the_open_door
café
ESEN
← Volver al índice

PHP zip:// Wrapper RCE

Arsenal completo de comandos en la cheatsheet

PHP incluye stream wrappers que amplían las funciones de inclusión y apertura de ficheros. El wrapper zip:// abre una entrada concreta dentro de un archivo ZIP con la sintaxis zip://ruta.zip#entrada. Combinado con un LFI (un include/require con un parámetro controlable), permite ejecutar código PHP que hayamos metido dentro de un ZIP, sin necesidad de que el .php se sirva directamente.

El patrón: si la app tiene un index.php?file= que incluye ficheros y algún punto donde subir un ZIP (o donde la propia app comprime lo que subimos), se sube un ZIP con un rev.php dentro y se apunta el LFI al wrapper. El # se codifica como %23:

# preparar el ZIP con la webshell dentro (entrada "rev.php")
echo '<?php system($_GET["cmd"]); ?>' > rev.php && zip payload.zip rev.php
http://<ip>/index.php?file=zip://./uploads/upload_123.zip%23rev&cmd=id

PHP abre rev (el rev.php) dentro del ZIP y lo ejecuta con el intérprete. Es el mismo espíritu que phar://, pero sin depender de deserialización.

Matices. Requiere un LFI que llegue a include/require (no solo lectura), que allow_url_include no haga falta (los wrappers locales funcionan igual) y conocer la ruta del ZIP subido. Si la app renombra o mueve el ZIP fuera del alcance, hay que localizarlo primero.

Cómo detectarlo. La firma en el log de acceso es un parámetro de inclusión con el esquema zip:// (o su codificación zip%3A%2F%2F y el %23 del ancla), que ningún flujo legítimo usa; un WAF que inspeccione wrappers de PHP lo marca. Correlacionar con la subida previa de un .zip cuyo contenido real es PHP. La confirmación es el proceso web abriendo un .zip de uploads/ vía stream y lanzando sh/bash a continuación (auditd/Sysmon for Linux con ppid del proceso web). Comparte detección con phar://.

Defensa. No incluir ficheros a partir de entrada del usuario; usar listas blancas de páginas, deshabilitar wrappers innecesarios y validar/renombrar las subidas. Relacionado con LFI / path traversal, phar:// a RCE y wrapper php://filter.

Máquinas donde se aplica

  • ZipperProving Grounds Practice