help_outline
Ayudanos!
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[PHP] Creando una firma dinamica

  • 0 Respuestas
  • 1194 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado arthusu

  • *
  • Underc0der
  • Mensajes: 554
  • Actividad:
    3.33%
  • Reputación 2
  • Yo solo se que no se nada - Socrátes
    • Ver Perfil
    • Arthusu BLOG
  • Skype: arthusuxD
« en: Mayo 05, 2015, 04:05:41 pm »
Introduccion

Buenas he estado sin tiempo para postear pero en esta ocasion les mostraré como crear una firma dinamica de manera que obtengan algunos datos, muchos ya saben como realizarlo por que no tiene tanta dificultad mas que nada se trata de utilizar la libreria de PHP GD.

Un buen tutorial que recomiendo mucho sobre PHP GD es el siguiente: http://wiki.elhacker.net/programacion/php/libreria-gd el cual esta muy bien explicado.
Tratare de ser breve colocando solo los pasos.

Estructura a realizar

La estructura con la que trabajaremos sera la siguiente:



Explicando un poco que hace cada archivo.

.htaccess - Con este archivo interpretaremos imagenes png (con su extension .png) como archivos php y bloquearemos cualquier intento de acceso al archivo logs.txt

firma.php - Con este archivo generamos la imagen dinamica (pronto le cambiaremos la extension a .png)

KeepCalm-Medium.ttf - Es el tipo de letra que utilizaremos para la firma dinamica.

logs.txt - Aqui guardaremos los logs, en este caso IP, Sistema, Si usa proxy.

rVJgsdx.png - Es la imagen que utilizaremos para la firma dinamica.

view_logs.php - Este es un archivo para ver los logs online. Con un simple formulario que tiene que ingresar una clave.

Nota importante: Nada de aqui es guardado en una base de datos. Y esto es facilmente explotable haciendo peticiones desde la misma IP un sin fin de veces cargaria todo el archivo logs.txt haciendolo demasiado pesado (Esa idea la hizo un amigo JhonJhon_123) entonces lo unico que podemos realizar en este caso es:

1.- Denegar las ips que realizen demasiadas peticiones
2.- No insertar IPS repetidas en el archivo logs.txt
3.- Cambiar el nombre de la carpeta para que no hagan mas peticiones.

Cualquiera de estos tres puntos no se ven en este tutorial.

Creando la firma

En este caso crearemos el archivo PHP para realizar la firma dinamica, no entrare en detalles de explicaciones ya que comente el codigo lo mas posible para que se entendiera, de todas maneras si no entienden algo, arriba deje una buena documentacion con la que pueden guiarse.

Código: PHP
  1.  <?php
  2.  // no reportamos errores
  3.  // el nombre de la imagen a poner como firma
  4.  $im_name = "rVJgsdx.png";
  5.  // los datos de la imagen
  6.  $data_im = getimagesize($im_name);
  7.  // el tipo de imagen
  8.  header("Content-type: {$data_im['mime']}");
  9.  // creamos la imagen en este caso png
  10.  $im = imagecreatefrompng($im_name);
  11.  // creamos un color para usarlo en el texto
  12.  $color = imagecolorallocate($im, 45, 196, 236);
  13.  // obtenemos la IP
  14.  $ip = $_SERVER['REMOTE_ADDR'];
  15.  // obtenemos los datos del navegador
  16.  $user_agent = $_SERVER['HTTP_USER_AGENT'];
  17.  // vemos si existe algun proxy (no es 100% fiable), y lo agregamos a la variable ip
  18.  $proxy_headers = array(
  19.         'HTTP_VIA',
  20.         'HTTP_X_FORWARDED_FOR',
  21.         'HTTP_FORWARDED_FOR',
  22.         'HTTP_X_FORWARDED',
  23.         'HTTP_FORWARDED',
  24.         'HTTP_CLIENT_IP',
  25.         'HTTP_FORWARDED_FOR_IP',
  26.         'VIA',
  27.         'X_FORWARDED_FOR',
  28.         'FORWARDED_FOR',
  29.         'X_FORWARDED',
  30.         'FORWARDED',
  31.         'CLIENT_IP',
  32.         'FORWARDED_FOR_IP',
  33.         'HTTP_PROXY_CONNECTION'
  34.     );
  35.     foreach($proxy_headers as $x){
  36.         if (isset($_SERVER[$x])) {
  37.          $ip .= "/Estas usando proxy!";
  38.          break;
  39.         }
  40.     }
  41.  
  42.     // reemplazamos los datos del navegador en caso de que sea firefox por firefox o chrome por chrome, la lista es corta se pueden agregar mas
  43.  $navegador = preg_replace('/.*(firefox|chrome).*/i', '$1', $user_agent);
  44.  // lo mismo que arriba en este caso con el sistema, igual podemos hacer la lista personalizable
  45.  $sistema = preg_replace('/.*(windows|mac|linux).*/i', '$1', $user_agent);
  46.  // guardamos los datos en una variable para usarla en el texto
  47.  $string = " Tu IP: $ip \n Tu navegador: $navegador \n Tu sistema: $sistema \n Te estoy vigilando!\n";
  48.  // asignamos una variable con la fuente para usarla en el texto
  49.  $fuente = "KeepCalm-Medium.ttf";
  50.  // en caso de que no se haya detectado nada mostramos el navegador, aunque nos trolleen xD :P
  51.  if($navegador == ''){
  52.   $navegador = $_SERVER['HTTP_USER_AGENT'];
  53.  }
  54.  // what? :3, Guardamos logs
  55.  $manejador = fopen("logs.txt", 'a+');
  56.  fwrite($manejador, "$string\n\n\n");
  57.  fclose($manejador);
  58.  // magia is here! Mostramos el texto en las coordenadas dadas
  59.  imagettftext($im, 10, 0, 300, 10, $color, $fuente, $string);
  60.  // png transparency, para la transparencia en la imagen sino se veria desfigurada
  61.  imagealphablending($im, true);
  62.  imagesavealpha($im, true);
  63.  imagepng($im);
  64.  // destroy image, liberamos la memoria
  65.  imagedestroy($im);
  66. ?>
  67.  
  68.  

Asignar formato a la imagen y denegar acceso a los logs

En este apartado crearemos el archivo .htaccess el cual denegara acceso a los logs y interpretara nuestro archivo png como php.

Citar
AddType application/x-httpd-php .png
<FilesMatch "\.(txt)$">
  Order Deny,Allow
  Deny from all
</FilesMatch>

Creando archivo para ver los logs

Por ultimo creamos nuestro archivo view_logs.php con el cual veremos los logs.

Código: PHP
  1.  <?php
  2.  if (isset($_POST['pass']) && !empty($_POST['pass']) && $_POST['pass'] == 'tucontraseñae.e') {
  3.   $gestor = fopen('logs.txt', 'r');
  4.   $contenido = fread($gestor, filesize('logs.txt'));
  5.   fclose($gestor);
  6.   echo "<pre>" . $contenido . "</pre>";
  7.  }
  8. ?>
  9. <form method="post" action="">
  10.  <p><input type="text" name="pass" /></p>
  11.  <p><input type="submit" name="enviar" /></p>
  12. </form>
  13.  

En este caso solo hay que cambiar tucontraseñae.e por la contraseña que le quieras asignar a la entrada.

Finalizando

Le cambiamos la extension al archivo firma.php y le ponemos el nombre que queramos en mi caso firma.png
Lo abrimos en el navegador para ver los resultados.



En este caso mi ip es ::1 ya que es una ip local.

Les dejo por ultimo los archivos por si quieren probarlo, igual pueden realizar el suyo propio cambiando algunas funciones como dependiendo del tipo de imagen que sea JPEG, PNG, etc. el tipo de letra, sus datos, etc. De igual manera con esto podrian crearse hasta generadores de firmas, saludos!

Archivos: http://www.mediafire.com/download/wr4yeydjyoyc397/firma_dinamica.rar
« Última modificación: Mayo 05, 2015, 09:27:41 pm por arthusu »
Pentest - Hacking & Security Services

Contact me: arthusu@gmail.com

 

¿Te gustó el post? COMPARTILO!



Creando una capa de abstraccion de base de datos

Iniciado por ~ Yoya ~

Respuestas: 5
Vistas: 2466
Último mensaje Julio 18, 2013, 12:01:27 am
por ~ Yoya ~
Creando herramientas interesantes con funciones de red en php

Iniciado por Oggy

Respuestas: 0
Vistas: 1563
Último mensaje Diciembre 17, 2012, 09:02:00 pm
por Oggy