Blog

VULNERABILIDADES DE APLICACIONES WEB: LA INCLUSIÓN LOCAL DE ARCHIVOS POR MEDIO DE COOKIES

19.01.2018 09:31
Algo que el desarrolllador podría no tener en cuenta es este caso un tanto especial de inclusión local de archivos, donde el nombre del archivo a incluir queda guardado en una cookie. Veamos el archivo "adelante.html", donde el usuario elige en qué idioma quiere manejarse dentro de la aplicación:
 
<html>
<form action="atras.php" method="get">
   <select name="idioma">
      <option value="castellano">Castellano</option>
      <option value="quechua">Quechua</option>
   </select>
   <input type="submit">
</form>
</html>
 
Siendo "atras.php" como sigue:
 
<?php
$idioma = $_GET['idioma'];
setcookie('idioma',$idioma,time() + (86400 * 7), "/", null, null, true);
header("location: final.php");
?>
 
El idioma elegido por el usuario se guarda como dato en una cookie y de acuerdo a él se incluirá castellano.php o quechua.php, como vemos en el archivo "final.php":
 
<?php
if ( isset( $_COOKIE['idioma'] ) ) {
   include( $_COOKIE['idioma'] . '.php' );
}
?>
 
Sin embargo si un pirata informático cliqueara en "Inspeccionar elemento" en "adelante.html" y cambiara "castellano" por "/subdirectorio/shell/" (suponiendo que en el directorio de estos archivos existiera "/subdirectorio/shell.php") y luego cliqueara en enviar, se ejecutaría el código de "shell.php".
 
 
El archivo "final.php" debió ser así:
 
<?php  
$idiomas = array('castellano', 'quechua');  
if(isset($_COOKIE['idioma']) and in_array($_COOKIE['idioma'], $idiomas)) {  
  include $idiomas[array_search($_COOKIE['idioma'], $idiomas)] . '.php';  
} else  
  die('No se ha especificado la página a mostrar o no existe en el servidor');  
?>
 
Además sugerimos no usar nombres tan obvios para las cookies y encriptar fuertemente sus valores.
 

VULNERABILIDADES DE APLICACIONES WEB: OTRO JUEGO DE VERANO (II - LA RESPUESTA)

18.01.2018 16:26
 
Damos la respuesta a nuestro juego de ayer:
 
El archivo adelante.html contiene un comentario sopechoso:
 
<!-- Cambiar primero acceso del tráfico invasivo previo luego desaparecerán los 1142 archivos excedentes alivianando las 102 sobrecargas semanales gastándose US$ 2454 menos cada mes ---- administrador -->
 
Para descubrir su significado debemos recurrir a nuestros conocimientos de esteganografía. Las técnicas de esteganografía nos permiten ocultar mensajes dentro de otros, de modo que no se perciba su existencia. En nuestro caso, si tomamos cada tercer carácter del texto obtendremos los siguiente:
 
miclaveess4ccis2bms$5nds-m, es decir:
 
mi clave es s4ccis2bms$5nds-m
 
Acá se nos presenta la primera dificultad. Vemos que en "atras.php" la contraseña está encriptada con un algoritmo sha512 y que si creamos el hash de "s4ccis2bms$5nds-m" con dicho algoritmo, el mismo no coincide con el hash de "atras.php". De hecho parte del hash ni siquiera aparece en la pantalla. No nos ahoguemos en un vaso de agua. Si copiamos de una sola vez el renglón inmediatamente por arriba del del hash, el del hash y el inmediatamente inferior y los pegamos en un editor de texto, el hash aprecerá completo.
 
Lo hacemos y no coincide con el que resulta de encriptar "s4ccis2bms$5nds-m".
 
¿Será que la palabra "administrador" es sólo parte de la firma y no del mensaje que contiene la contraseña? ¿Qué hay de los cuatro guiones que la preceden?  
 
Encriptamos "s4ccis2bms$5nds" y vemos que no coincide con el hash de "atrás.php". Volvemos a probar con "s4ccis2bms$5nds-" y ¡resuelto!
 
Estamos a su disposición en nuestra dirección de contacto: luis_lavric@hotmail.com.¡Gracias! 
 
Artículo relacionado:
 

VULNERABILIDADES DE APLICACIONES WEB: CÓMO DESHABILITAR "FUNCIONES PELIGROSAS" DE PHP

18.01.2018 13:19
 
En nuestro último artículo sobre inclusión local de archivos dijimos que además de las que ya habíamos mencionado había otras funciones vulnerables a este tipo de ataque. Veamos el siguiente archivo PHP:
 
<?php
highlight_file($_GET['file']);
?>
 
La función highlight_file no es de las más usuales. Imprime o devuelve una versión con la sintaxis remarcada del código contenido en el fichero dado por filename usando los colores definidos en el remarcador de sintaxis interno de PHP. (de php.net/manual/es/function.highlight-file.php)
 
Si se permite que el usuario ingrese como input cualquier nombre de archivo, estará en capacidad de llevar a cabo un ataque de inclusión local de archivos.
 
Es necesario preguntarse si realmente es necesario incluir esta función en una aplicación. Nos parece de mucha más utilidad para el desarrollador que para un usuario común, por lo que a nuestro entender no debería llegar al servidor comercial. Si es inevitable emplearla entonces debería ser usada así: 
 
<?php
highlight_file('archivo.php');
?>
 
El administrador del servidor web cuenta con la posibilidad de deshabilitar y ésta y otras funciones en el archivo php.ini, impidiendo su ejecución, pero deberá tener presente que el archivo que contenga la función deshabilitada no se ejecutará o su ejecución se detendrá y se mostrará un mensaje de error con una advertencia sobre la razón de la falta de ejecución.
 
Para deshabilitar funciones se abre php.ini y en 
 
disable_functions=
 
se agrega las funciones que se desea deshabilitar:
 
disable_functions=highlight_file,system
 
Como se ve, esta medida también es útil para prevenir la inyección de comandos.
 
Más que de funciones peligrosas de PHP habría que hablar del uso peligroso de algunas funciones.
 
Artículos relacionados:
 

 

LA EMPRESA: UN CASO CONCRETO DE CANALIZACIÓN DE QUEJAS

17.01.2018 20:30
 
Anteriormente hemos dicho que necesitamos de personal preparado o capacitado para resolver diferentes tipos de situaciones que se presentan en la actividad diaria de un negocio. Sobre esto les puedo comentar algunos procedimientos que establecimos como respuesta inmediata en la empresa en la que trabajo y alguna situación generada por esto:
 
Ante la insatisfacción por alguno de los productos que ofrecemos, los mismos se pueden cambiar, previa aprobación de control de calidad.
 
Si el cliente hace uso del Libro de Reclamaciones, se les responde vía notarial, manifestándole las disculpas del caso y se le envía un vale de cortesía.  De esta manera lo invitamos para que vuelva. Internamente se procede a averiguar el motivo que generó el reclamo a fin de corregir lo que haga falta.
 
Este hecho ocurrió hace un tiempo:
 
El área de caja recibió un reclamo debido a que un cliente solicitó pagar su cuenta mediante el uso de un POS. La cajera pasó la tarjeta hasta en dos ocasiones pero la misma no generaba cobro alguno, por lo que intentó una tercera vez y es cuando el POS funcionó. El cliente quedó con muchas dudas porque pensó que se le había cobrado dos veces más. Además perdió tiempo al resolver permanecer en el establecimiento para despejar sus dudas y efectuar el reclamo.
 
El cliente manifestó su molestia utilizando el libro de  reclamaciones ya que el inconveniente no pudo ser resuelto de manera inmediata.  Internamente, el área de Contabilidad pudo comprobar que sólo se le cobró una vez y después se procedió a enviar al cliente una carta de disculpas  y la explicación del caso, adjuntándose el movimiento de los cobros del día. Además se le hizo saber que la lentitud del sistema era por problemas técnicos  generados por el mismo operador de POS. A su vez nuestra empresa también hizo el reclamo a este operador.
 
Artículos relacionados:
 

VULNERABILIDADES DE APLICACIONES WEB: LA INCLUSIÓN LOCAL DE ARCHIVOS (II)

17.01.2018 11:37
 
Cuidado, este archivo: 
 
<?php
   include( $_GET['pagina'] );
?>
 
permite enviar la siguiente URL:
 
https://127.0.0.1/directorio/atras2.php?pagina=C:\xampp\apache\logs\access.log
 
con lo que cualquier pirata informático obtendrá información de mucho provecho. De por sí el tener la ruta "C:\xampp\" es una pésima idea, pero lamentablemente es algo muy frecuente.
 
Si en la aplicación hubiera una vulnerabilidad tipo "Directory Traversal" todo podría empeorar. 
 
La mejor forma de prevenir la inclusión local de archivos en evitando la inclusión dinámica de los mismos en base al input del usuario. Si eso no fuera posible es necesario hacer una lista blanca con los nombres de archivos que pueden ser incluidos. Damos un ejemplo:
 
<?php  
$paginas = array('rojo', 'azul', 'verde');  
if(isset($_GET['pagina']) and in_array($_GET['pagina'], $paginas)) {  
  include $paginas[array_search($_GET['pagina'], $paginas)] . '.php';  
} else  
  die('No se ha especificado la página a mostrar o no existe en el servidor');  
?>
 
Algunas de las otras sentencias y funciones vulnerables son: include(); include_once(); require(); require_once(); file() y file_get_contents(), aunque se podría agregar alguna más a la lista.
 
Artículo relacionado:
 
 

VULNERABILIDADES DE APLICACIONES WEB: OTRO JUEGO DE VERANO

17.01.2018 10:22
 
Para nuestros lectores del hemisferio norte es invierno, pero estamos seguros que igual difrutarán del juego. Obviamente incrustar un nombre de usuario y el hash de la contraseña en "atras.php" son vulnerabilidades pero están ahí para facilitar el desarrollo del juego.
A la brevedad publicaremos la respuesta. Por si alguien no descubrió la de nuestro juego anterior, la vulnerabilidad era que al tipear la contraseña la misma aparecía como texto plano y no escondida con asteriscos.
 
El archivo adelante.html es:
 
<html>
<h1>Simplemente ingrese</h1>
<form action="atras.php" method="post">
    Usuario: <input type="text" name="usuario" value="">
    <input type="password" name="clave" value="">
    <input type="submit">
</form>
<!-- Cambiar primero acceso del tráfico invasivo previo luego desaparecerán los 1142 archivos excedentes alivianando las 102 sobrecargas semanales gastándose US$ 2454 menos cada mes ---- administrador -->
</html>
 
y atras.php es:
 
<?php
$usuario = $_POST['usuario'];
$clave = $_POST['clave'];
$hashed = hash('sha512', $clave);
if (($usuario == 'administrador') && ($hashed == 'edae7c872ed53a5071ced641fb146455b046be2eb7c99b6892f51f6d61e86ec11fec8aba3fad8b61ed57b1e52176fcfff556511fc341bedd4efe67e4879c4929')){
  header('Location: administrador.php');
}else{
  header('Location: adelante.html');
}
?>
 
y administrador.php
 
<html>
<h1>Pagina del administrador</h1>
<h3>Bienvenido</h3>
</html>
 
Este ejercicio tiene por finalidad entrenar al lector para prevenir y/o eliminar vulnerabilidades. El hackeo es ilegal, pruebe esto sólo en su propio servidor aunque para encontrar la respuesta no hace falta contar con uno. ¡Éxitos!
 

LA EMPRESA: CÓMO CAPACITAR PARA CANALIZAR LAS QUEJAS

16.01.2018 19:15
 
Respecto a las quejas que reciben los negocios tomemos en cuenta lo importante que es canalizarlas bien y responder a ellas de manera oportuna para que estas reclamaciones se conviertan en oportunidades.
 
Por lo tanto la capacitación que debe tener el personal que está a cargo de la atención al cliente es primordial. El tiempo que se invierte es una ganancia a largo plazo ya que se contará con personal preparado y dispuesto a atender en servicios.  Tomemos en cuenta lo siguiente:
 
- Capacitar en los productos y servicios que se ofrecen. La finalidad es que este personal tenga amplio conocimiento de lo que ofrece y todo lo que se realice con su tipo de venta.
 
- Capacitar e introducir al personal a la empresa, facilitándoles la misión, visión y valores que caracteriza a su empleador.
 
- Capacitar constantemente con talleres, charlas dinámicas, videos, para que puedan desarrollar técnicas de ventas,  todo esto de acuerdo al tipo de servicio  que ofrecen.  Como línea general hay normas de cortesía, buena actitud y eficiencia, pero no es lo mismo vender seguros que atender servicios de restaurantes.
 
La fidelidad de los clientes es un beneficio para que prospere un negocio y los gastos en capacitaciones se convierten en inversión.
 
Artículos relacionados:
 

EL DESTRUCTOR TIPO 45 HMS DUNCAN LLEGÓ AL MEDITERRÁNEO

16.01.2018 14:58
 
Después que los seis destructores Type 45 de la Royal Navy pasaran el fin de año en la base de Portsmouth por razones técnicas, de descanso y de alistamiento, ayer el HMS Duncan llegó al Puerto de Málaga, en el Mediterráneo occidental, donde permanecerá una semana. El Duncan asumió el rol de buque insignia de la Agrupación Naval Permanente 2 (SNMG2, por sus siglas en inglés) de la Organización del Tratado del Atlántico Norte.
 
El buque llevará a cabo actividades defensivas junto a otras naves de países miembros de la OTAN y liderará el mencionado Grupo de Tareas SNMG2 en una serie de ejercicios de alto perfil. Al completar esta asignación el Duncan navegará hacia el Golfo Pérsico para demostrar el compromiso permanente del Reino Unido con la región.
 
Recordemos que en diciembre del 2016 el destructor HMS Duncan debió ser remolcado a puerto tras sufrir un desperfecto durante un ejercicio efectuado con otros tres buques de la OTAN. Se especula que ese incidente se debió a un fallo del sistema de propulsión a los que son tan propensos los destructores de la Clase Daring o Tipo 45. El buque  volvió a puerto remolcado y allí fue rodeado por tres remolcadores más, así como por escolta armada. 
 
También debemos recordar que el último destructor tipo 45 que se desplegó en el Golfo fue el HMS Diamond. En noviembre del año pasado la nave debió abandonar esa misión que debió durar nueve meses a sólo dos de haber permanecido en la región. El despliegue del Duncan podría ser una oportunidad de ver si se encontró alguna solución, al menos parcial, al problema o si el mismo persiste en toda su gravedad.
 
Artículos relacionados:
 

VULNERABILIDADES DE APLICACIONES WEB: LA INCLUSIÓN LOCAL DE ARCHIVOS

16.01.2018 11:41
 
Como es habitual, graficaremos la vulnerabilidad con un ejemplo bien simple:
 
El archivo "adelante.html" es el siguiente:
 
<html>
<form action="atras.php" method="get">
   <select name="idioma">
      <option value="castellano">Castellano</option>
      <option value="quechua">Quechua</option>
   </select>
   <input type="submit">
</form>
</html>
 
y "atras.php"
 
<?php
   if ( isset( $_GET['idioma'] ) ) {
      include( $_GET['idioma'] . '.php' );
   }
?>
 
Obviamente en el mismo directorio que los dos archivos de arriba existen "castellano.php" y "quechua.php". Uno de los mismos será incluido cuando se seleccione una opción de idioma ya que en "atras.php" se estará reemplazando "idioma" por el valor seleccionado, por ejemplo:
 
include 'castellano.php';
 
ya que $_GET['idioma'] es reemplazado por "castellano" y el operador "." lo concatena con ".php".
 
Si en el mismo directorio que los otros cuatro archivos existiera uno llamado informacion.php con el siguiente contenido
 
<?php phpinfo() ?>
 
y en la barra de direcciones del navegador escribiéramos lo siguiente:
 
https://localhost/directorio/atras.php?idioma=informacion 
 
en "atras.php" include quedaría así:
 
include 'informacion.php';
 
Dado que la sentencia include incluye y evalúa el archivo especificado, "informacion.php" será ejecutado, dejando expuesta una gran cantidad de datos de sumo provecho para un pirata informático.
 
Por ahora dimos sólo un ejemplo muy simple de esta vulnerabilidad en la que próximamente profundizaremos y enseñaremos a prevenir.
 

VULNERABILIDADES DE APLICACIONES WEB: UN MUY SENCILLO JUEGO DE VERANO PARA LOS MÁS INEXPERTOS

15.01.2018 16:09
Muy de tanto en tanto la vulnerabilidad aparece en la práctica:
 
<html>
<head>
<title>Práctica</title>
</head>
 
<body style="background-color:lightblue;">
<h1 style="color:blue;font-size:48px;">Descubra la vulnerabilidad</h1>
 
<pre>
Esta aplicación tiene una vulnerabilidad
      ¿Se atreve a descubrirla?
    No es nada difícil hallarla...
</pre><br>
 
<form action="cualquiera.php" method="post">
    Usuario: <input type="text" name="usuario" value="">
    Contraseña: <input type="text" name="contraseña" value="">
    <input type="submit">
</form>
<br>
 
<h4>¿Todavía no la encontró??</h4>
 
<h3 style="color:yellow;">Vamos, vamos, apúrese...
 
<h2 style="color:red;">... alguien podría estar espiando sobre el hombro ¡con excesiva facilidad !</h2>
 
<h3 style="color:green;">Si todavía está buscando simplemente copie el código, guárdelo como archivo .html, ábralo con su navegador de preferencia e ingrese un usuario y contraseña.</h3>
 
<h2 style="color:blue;">Como la respuesta está a la vista, la damos por publicada.<h2>
 
<h4>Si aún así está totalmente perdido puede escribirnos a nuestra dirección de contacto, le daremos la respuesta correcta.</h4> 
 
</body>
</html>
 
<< 116 | 117 | 118 | 119 | 120 >>