El jueves la empresa de seguridad Hispasec difundió en su lista de correo sobre seguridad que las versiones de PHP para Windows permiten leer cualquier archivo del ordenador (como por ejemplo los de claves) o bien ejecutar código. Exactamente, la noticia es la siguiente:
Visualización y ejecución de archivos con Apache y PHP para Windows
-------------------------------------------------------------------
Mediante una petición HTTP es posible llamar al interprete PHP.EXE
para visualizar archivos fuera del directorio público. También es
posible ejecutar archivos con cualquier extensión como si de un
archivo PHP se tratara.
En la documentación de PHP se recomienda que en la instalación en
Windows se inserten las siguientes líneas en el archivo httpd.conf
para que Apache trabaje con el ejecutable CGI de PHP:
ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"
Gracias a la primera de las líneas podremos acceder a c:/php para
llamar y ejecutar PHP.EXE con una petición tipo:
http://www.servidor.xxx/php/php.exeEntre otras posibilidades, facilita la lectura de cualquier archivo
fuera del ámbito público del servidor web. Por ejemplo, la siguiente
petición permite descargar el archivo de claves de un servidor
Windows NT:
http://www.servidor.xxx/php/php.exe?c:winntrepairsamSi el servidor permite subir archivos, pongamos por ejemplo imágenes,
un atacante podría hospedar archivos con código PHP y extensión .GIF.
Posteriormente bastaría con llamar al intérprete PHP.EXE para llevar
a cabo su ejecución:
http://www.servidor.xxx/php/php.exe/dir ... codigo.gifEn el caso de que el servidor no permita subir archivos existen otras
formas de conseguir ejecutar código arbitrario y conseguir el control
total del sistema afectado. Por ejemplo introduciendo el comando a
ejecutar en una petición HTTP para que quede registrado en el archivo
log de Apache:
http://www.servidor.xxx/<?%20system('comando a ejecutar');%20?>
Posteriormente bastaría con llamar al log con el interprete PHP para
que ejecute el comando:
http://www.servidor.xxx/php/php.exe?c:a ... access.logOpina sobre esta noticia:
http://www.hispasec.com/unaaldiacom.asp?id=1215Más información:
PHP for Windows Arbitrary Files Execution (GIF, MP3)
http://www.securiteam.com/windowsntfocu ... 0U60C.html