VULNERABILIDADES DE APLICACIONES WEB: ESCRITURA DE ARCHIVOS

23.01.2018 11:31
 
Ya vimos esta vulnerabilidad cuando escribimos sobre INYECCIÓN ESTÁTICA DE CÓDIGO (geoestrategia.webnode.es/news/vulnerabilidades-de-aplicaciones-web-inyeccion-estatica-de-codigo/) aunque la habíamos presentado como una forma de inyección de código PHP. A modo de repaso y con una variante que pretende llamar la atención de los desarrolldores para que no cometan un error que podría ser fatal, volvemos a tocar el tema.
 
El archivo "escribe.php" es el siguiente:
 
<!DOCTYPE html>
<html>
<head>
  <title>Vulnerabilidad de escritura de archivos</title>
</head>
 
<body>
    <p><form action="escribe.php" method="get">
    Texto que desea escribir :<input type="text" name="texto" value="">
    <input type="submit">
    </form>
    <br />
 
<?php 
error_reporting(0);
 
$archivo = 'escrito.txt'; $contenido = $_GET['texto'];
if
(!$handle = fopen($archivo, 'a')){
print
"No se puede abrir ($archivo)";
exit
; } $s=fwrite($handle, $contenido);
echo
"Número de caracteres escritos ".$s."<br>";
if 
($s>0){
echo
"Escribió exitosamente<br>"; }
else
{
echo
"No se pudo escribir";
 } 
?> 
 
<br /><br />
</body>
</html>
 
Escribamos lo siguiente en la barra del navegador:
 
https://127.0.0.1/escribir%20archivo/escribe.php?fw=<%3Fphp+phpinfo%28%29+%3F>
 
Nótese que estamos escribiendo código PHP a un archivo de texto. Sabemos que la sentencia "include" incluye y evalúa el archivo especificado. Lo que a veces se ignora que para que el código sea evaluado, no es necesario que el archivo incluido sea .php. De hecho el código PHP será ejecutado aunque el archivo "escrito.txt" ya contenga texto (veáse que hemos escrito el código, no lo hemos sobrescrito). 
 
Supongamos que el archivo atras.php es vulnerable a la Inclusión Local de Archivos: 
 
<?php
   if ( isset( $_GET['color'] ) ) {
      include( $_GET['color'] . '.txt' );
   }
?>
 
escribiendo lo siguiente en la barra de direcciones del navegador EL CÓDIGO PHP DE ARCHIVO DE TEXTO SERÁ EVALUADO, POR ENDE EJECUTADO:
 
https://127.0.0.1/lfi/atras.php?color=C:\xampp\htdocs\escribir%20archivo\escrito
 
proporcionando al pirata informático información de provecho para escalar su ataque.