Explotar Vulnerabilidad de Ejecución Remota de Código PHP-CGI en bWAPP

  • Posted on: 17 June 2016
  • By: ReYDeS

El archivo “sapi/cgi/cgi_main.c” en versiones anteriores a PHP 5.3.12 y 5.4.x anteriores a 5.4.2, cuando es configurado como un script CGI (mejor conocido como php-cgi), no maneja adecuadamente las cadenas de consulta careciendo del caracter correspondiente al signo igual “=”.

Cuando PHP es utilizado en una configuración basada en CGI; como el mod_cgi de Apache; php-cgi recibe y procesa parámetros de cadena para consulta como argumentos en línea de comando, lo cual permite pasar opciones en línea de comando, como “-s”, “-d” o “-c”, hacia el binario php-cgi, lo cual puede ser explotado para exponer el código fuente y obtener ejecución de código remoto.

Para la siguiente demostración se utiliza la máquina virtual de nombre “bee-box”conteniendo la versión más actual de bWAPP.

Ingresar a bWAPP, y seleccionar el “bug” de nombre "PHP CGI Remote Code Execution", para luego hacer clic en el botón de nombre “Hack”..

Se verifica la versión API del servidor y versión de PHP.

La manera más simple de explotar esta vulnerabilidad permite exponer el código fuente PHP, utilizando la URL adecuada.

http: //IP_Objetivo / bWAPP/ admin/?-s

El atacante también puede optar por ejecutar comandos en el servidor. Esencialmente; con esta vulnerabilidad; se podría inyectar argumentos dentro del binario PHP-CGI y hacer cambios en las directivas “php.ini” permitiendo la ejecución remota de código.

Para ganar la capacidad de ejecutar código remoto, se debe indicar a “php.ini” permita la inclusión de URL (allow_url_include = 1), y automáticamente anteponer el “archivo” php//:input. Esto significa lo enviado en una petición POST es interpretado como PHP, y ejecutado

Se utiliza la funcionalidad de “Resend” o Reenvío de Zed Attack Proxy, para enviar una nueva petición utilizando el método POST solicitando la siguiente URL:

http://IP_Objetivo /?-d+allow_url_include %3d1+-d+auto_prepend_file %3dphp://input

En el cuerpo del mensaje se incluye el comando a ejecutar.

<?php echo(md5("Hola Mundo")) ?>

La respuesta devuelta por el servidor incluirá para este caso el resultado de aplicar un hash MD5 sobre la cadena de texto “Hola Mundo”.

Un atacante remoto no autenticado podría obtener información sensible, causar una condición de negación de servicio, o puede ser capaz de ejecutar código arbitrario con los privilegios del servidor web.

Fuentes:

https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection
http://www.itsecgames.com/
https://bugs.php.net/bug.php?id=61910
https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823
https://www.rapid7.com/db/vulnerabilities/php-cve-2012-1823
http://insecurety.net/?p=705

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Curso de Informática Forense