
Resuelve el caso en el que la escalada de privilegios en PHP no puede ejecutar comandos debido a funciones del sistema deshabilitadas.
bypass_disablefunc.php tiene tres opciones GET: cmd, outpath y sopath.
Las opciones son muy sencillas:
cmd es tu comando malicioso,
outpath es la ruta del archivo de salida del comando (legible y escribible),
sopath es la ruta absoluta de nuestro objeto compartido bypass_disablefunc_x64.so. Por ejemplo:
En primer lugar, el parámetro cmd, el comando del sistema que se va a ejecutar (por ejemplo, pwd);
En segundo lugar, el parámetro outpath, la ruta del archivo que guarda el resultado de la ejecución del comando (por ejemplo, /tmp/xx), para facilitar su visualización en la página. Además, en cuanto a este parámetro, debes prestar atención a si el servidor web tiene permisos de lectura y escritura, a si puede acceder a rutas fuera de su directorio y a que el archivo será sobrescrito y eliminado;
En tercer lugar, el parámetro sopath, que especifica la ruta absoluta del objeto compartido que secuestra funciones del sistema (por ejemplo, /var/www/bypass_disablefunc_x64.so). Además, con respecto a este parámetro, debes prestar atención a si el servidor web puede acceder a él fuera de su directorio.
Además, bypass_disablefunc.php concatena el comando y la ruta de salida para formar la línea de comandos completa, por lo que no necesitas redirigir en el parámetro cmd.
bypass_disablefunc_x64.so es el objeto compartido que ejecuta el comando; se compila a partir de bypass_disablefunc.c con el comando gcc -shared -fPIC bypass_disablefunc.c -o bypass_disablefunc_x64.so
Si el objetivo es de arquitectura x86, debes añadir la opción -m32 y recompilar bypass_disablefunc_x86.so.
Busca la manera de subir bypass_disablefunc.php y bypass_disablefunc_x64.so al objetivo; una vez especificados los tres parámetros GET, bypass_disablefunc.php podrá evadir disable_functions.
Problemas conocidos:
Diferentes entornos de destino pueden requerir recompilar el objeto compartido. El bypass_disablefunc_x64.so de este proyecto fue compilado en Debian, x64; en sistemas que no son de la familia Debian puede ser necesario recompilarlo;
bypass_disablefunc.php necesita permisos de lectura y escritura sobre la ruta especificada por outpath; si el objetivo tiene SELinux activado, puede impedir que la cuenta web escriba archivos. Por ejemplo, si ejecutas id con la identidad de apache, la salida es uid=48(apache) gid=48(apache) groups=48(apache) context=system_u:system_r:httpd_t:s0. ¿Ves el context=system_u:system_r:httpd_t:s0 del final? Eso es SELinux haciendo de las suyas.