6.1 KiB
LFI2RCE a través de PHP_SESSION_UPLOAD_PROGRESS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿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!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.
Información básica
Si encontraste una Inclusión de Archivos Locales incluso si no tienes una sesión y session.auto_start
está Off
. Si session.upload_progress.enabled
está On
y proporcionas PHP_SESSION_UPLOAD_PROGRESS
en los datos multipart POST, PHP habilitará la sesión para ti.
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah' -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange
In the last example the session will contain the string blahblahblah
Ten en cuenta que con PHP_SESSION_UPLOAD_PROGRESS
puedes controlar los datos dentro de la sesión, por lo que si incluyes tu archivo de sesión, puedes incluir una parte que controles (como un shellcode de PHP, por ejemplo).
{% hint style="info" %}
Aunque la mayoría de los tutoriales en Internet recomiendan establecer session.upload_progress.cleanup
en Off
con fines de depuración, la configuración predeterminada de session.upload_progress.cleanup
en PHP sigue siendo On
. Esto significa que tu progreso de carga en la sesión se limpiará lo antes posible. Por lo tanto, esto será una condición de carrera.
{% endhint %}
El CTF
En el CTF original donde se comenta esta técnica, no fue suficiente explotar la condición de carrera, sino que el contenido cargado también necesitaba comenzar con la cadena @<?php
.
Debido a la configuración predeterminada de session.upload_progress.prefix
, nuestro archivo de SESIÓN comenzará con un prefijo molesto upload_progress_
. Por ejemplo: upload_progress_controlledcontentbyattacker
El truco para eliminar el prefijo inicial fue codificar en base64 la carga útil 3 veces y luego decodificarla mediante filtros convert.base64-decode
, esto se debe a que cuando decodificas en base64, PHP eliminará los caracteres extraños, por lo que después de 3 veces solo la carga útil enviada por el atacante permanecerá (y luego el atacante puede controlar la parte inicial).
Más información en el informe original https://blog.orange.tw/2018/10/ y en la explotación final https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
Otro informe en https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿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!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Consigue el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.