VULNERABILIDADES DE APLICACIONES WEB: INYECCIÓN ESTÁTICA DE CÓDIGO.

30.12.2017 06:18
En el lenguaje PHP la sentencia "include" incluye y evalúa el archivo especificado.
 
En el manual de PHP leemos "Cuando un archivo es incluido, el intérprete abandona el modo PHP e ingresa al modo HTML al comienzo del archivo objetivo y se reanuda de nuevo al final. Por esta razón, cualquier código al interior del archivo objetivo que deba ser ejecutado como código PHP, tendrá que ser encerrado dentro de etiquetas válidas de comienzo y terminación de PHP."
 
https://php.net/manual/es/function.include.php
 
De lo expresado se desprende que si incluimos, por ejemplo, un archivo de texto y en el mismo hay código PHP encerrado entre etiquetas ("<?php ?>"), el mismo será ejecutado.
 
Veamos el siguiente ejemplo:
 
<?php
$mensajes = "mensajes.txt";
if ($_GET["accion"] == "escribir") {
$nombre = $_GET["nombre"];
$texto = $_GET["texto"];
$handle = fopen($mensajes, "a+");
fwrite($handle, "$nombre dice '$texto'<hr>\n");
fclose($handle);
echo "El mensaje ha sido guardado\n";
}
else if ($_GET["accion"] == "ver") {
include($mensajes);
}
?>
 
escribimos del siguiente modo:
 
https://127.0.0.1/inyeccion-estatica/ejemplo.php?accion=escribir&nombre=Juan&texto=<?php phpinfo() ?>
 
cuando ingresemos:
 
127.0.0.1/inyeccion-estatica/ejemplo.php?%20accion=ver
 
veremos los mensajes y se ejecutará la función de opción "phpinfo()" dejando ver información que no debería quedar a la vista de cualquiera.
 
Si bien el presente ejemplo parece resultar de un error muy grosero, en la práctica esta vulnerabilidad aparecerá en escenarios mucho más realistas. Además en la práctica aparecerán vulnerabilidades más groseras que la del ejemplo.
 
Artículo realcionado: