domingo, 26 de diciembre de 2010

Leyendo las cookies y logins de Firefox con Python y SQLite

Aprovecho la oportunidad para decir
Felices navidad! / Bo nadal! / Merry christmas!

Ahora sí... recordemos que Firefox guardaba alguna información en forma de bases de datos SQLite (interesantes por el hecho de que no requiere un demonio externo, sino que toda la información lo maneja la librería sobre un archivo), veamos como hacer un script que nos muestre las cookies para dominios concretos.

Las cookies se guardan en el archivo "cookies.sqlite" en la carpeta del perfil del programa, un "file" confirma que es una base de datos sqlite3, se puede abrir con

sqlite3 cookies.sqlite



lunes, 20 de diciembre de 2010

PyLOIC 0.2

Visto lo visto y viniendo lo que viene, hay nueva versión de pyLOIC, entre otras cosas se añadieron 2 formas de ataque más efectivas:
  • Uno basado en Slowloris, un poco más abajo, aquí, están los servidores a los que afecta (aunque no espereis gran cosa para 10 minutos de código) 
  •  Y otro un clásico, "un Stairway to Heaven casi", un SYN flood... peeeero necesita Scapy ('sudo apt-get install python-scapy') y permisos de root. 
Además se añadieron los cambios a la GUI de fanta (tirando de copypaste descarado de su código =P ) para aprovechar lo nuevo [pyloic02.zip].

Actualización: arreglado Bug gracias a Tincho que hacía que nunca cerrase las conexiones -fixed-


sábado, 18 de diciembre de 2010

5 programas que (quizá) no conocias [offtopic]

Vamos a dejar de lado la programación un rato para ver algunos programas (la mayoría solo sirven para Gnu/Linux) que cuando los conozcas te preguntarás, ¿ como vivía yo sin esto?... o quizá no =P


jueves, 16 de diciembre de 2010

Casi traducidos los documentos del cablegate que involucran la Ley Sinde [nunca Offtopic]

La gente de Hacktivistas se está currando una traducción de los documentos del cablegate con alguna relación a la Ley Sinde, así que si no los leisteis por no saber donde buscar, por el tema de la comprensión del inglés o algo así, ya no teneis excusa, están aquí: http://wiki.hacktivistas.net/index.php?title=Accion/Sindegate/traducciones

Aprovecho para decir que la misma gente montó una web muy completa para protestar por como vá todo esto, http://sindegate.net/.

A este paso nos vemos en Freenet

sábado, 11 de diciembre de 2010

Proceso de escritura de un shellcode

Hoy me ha entrado del vicio de escribir un shellcode, aquí queda el proceso para quien se pregunte como se escriben estos extraños seres de la fauna binaria.

Actualización: me había olvidado del BITS 32 en el shellcode para que funcione bien

Un shellcode, llamados así porque generalmente lo que hacían era presentar una shell (aunque se puede hacer cualquier cosa con ellos), son trozos de código ensamblador, normalmente pasados a formato hexadecimal para un "consumo" más cómodo, cuya característica más importante es que se pueden cargar en cualquier posición de memoria.


viernes, 10 de diciembre de 2010

Concurso de programación de corewars

Me entero por Thoughts on Corewar que están organizando un concurso de programación para este juego. Traduzco el post:
El Primer Concurso Internacional de Programación de Corewars acaba de ser anunciado, con un primer premio de $50 patrocinado por www.corewar.info.

La competición tomará lugar en el área inexplorada entre la configuración '94nop y LP, que ha sido recientemente investigada por Fizmo en Redcode Talk.

La configuración exacta es como sigue:

Estándar:CWS'94
Tamaño del núcleo:8000
Procesos:200
Tamaño de la entrada:20
Puntos de victoria:3
Puntos de empate:1
Ciclos:80000
Rondas:1000

La línea de comandos de pMARS es pmars -p 200 -l 20 -r 1000. STP y LDP están prohibidos se permiten hasta dos entradas y las batallas serán en un torneo round-robin.


Para más información, hecha un vistazo al anuncio en rec.games.corewar.

Solo añadir que como dicen en la página web, el deadline es el 31 de diciembre.

Happy coding!

martes, 7 de diciembre de 2010

Script para comprobar una lista de proxies SOCKS4

Traigo un script que filtra una lista de proxies con el formato de host:puerto y devuelve una lista de los que funcionan, ordenados de mayor a menor velocidad.

El código se basa uno anterior, y se puede encontrar aquí [ http://pastebin.com/AF1RmgJj ]


viernes, 3 de diciembre de 2010

Hablando por ICMP

Hoy presento un script que usa Scapy para comunicarse a través de paquetes ICMP (ping request concretamente). La idea original, de Mungu, era hacer una shell que se comunicara a través de ICMP, esto es simplemente una prueba de concepto.

Cliente: http://pastebin.com/0vLsiiBQ

Servidor: http://pastebin.com/Y751Ty0x

martes, 30 de noviembre de 2010

Pitufeando con Scapy y python

Empezando por el principio, HackXCrack acaba de liberar otra tanda de tutoriales entre los que se encuentra uno sobre Scapy escrito por Larry sobre la manipulación de paquetes (muy recomendable, por cierto).

Resulta que Scapy es una librería para python (aunque puede usarse aparte de forma interactiva ) que permite trastear con los paquetes creandolos, snifandolos, decodificandolos, una burrada de cosas (al parecer hasta puede usarse para decodificada VOIP sobre un canal WEP cifrado), por último decir que funciona sin gran dificultad sobre cualquier OS mayoritario.

Lo que venía a presentar hoy es un script de prueba que lanza ataques smurf usando Scapy, se puede encontrar aquí [smurf.py]


Manifiesto por una Red neutral

Los ciudadanos y las empresas usuarias de Internet adheridas a este texto manifestamos:

  1.  Que Internet es una Red Neutral por diseño, desde su creación hasta su actual implementación, en la que la información fluye de manera libre, sin discriminación alguna en función de origen, destino, protocolo o contenido.
  2.  Que las empresas, emprendedores y usuarios de Internet han podido crear servicios y productos en esa Red Neutral sin necesidad de autorizaciones ni acuerdos previos, dando lugar a una barrera de entrada prácticamente inexistente que ha permitido la explosión creativa, de innovación y de servicios que define el estado de la red actual.
  3.  Que todos los usuarios, emprendedores y empresas de Internet han podido definir y ofrecer sus servicios en condiciones de igualdad llevando el concepto de la libre competencia hasta extremos nunca antes conocidos.
  4.  Que Internet es el vehículo de libre expresión, libre información y desarrollo social más importante con el que cuentan ciudadanos y empresas. Su naturaleza no debe ser puesta en riesgo bajo ningún concepto.
  5.  Que para posibilitar esa Red Neutral las operadoras deben transportar paquetes de datos de manera neutral sin erigirse en "aduaneros" del tráfico y sin favorecer o perjudicar a unos contenidos por encima de otros.
  6.  Que la gestión del tráfico en situaciones puntuales y excepcionales de saturación de las redes debe acometerse de forma transparente, de acuerdo a criterios homogéneos de interés público y no discriminatorios ni comerciales.
  7.  Que dicha restricción excepcional del tráfico por parte de las operadoras no puede convertirse en una alternativa sostenida a la inversión en redes.
  8.  Que dicha Red Neutral se ve amenazada por operadoras interesadas en llegar a acuerdos comerciales por los que se privilegie o degrade el contenido según su relación comercial con la operadora.
  9.  Que algunos operadores del mercado quieren “redefinir” la Red Neutral para manejarla de acuerdo con sus intereses, y esa pretensión debe ser evitada; la definición de las reglas fundamentales del funcionamiento de Internet debe basarse en el interés de quienes la usan, no de quienes la proveen.
  10.  Que la respuesta ante esta amenaza para la red no puede ser la inacción: no hacer nada equivale a permitir que intereses privados puedan de facto llevar a cabo prácticas que afectan a las libertades fundamentales de los ciudadanos y la capacidad de las empresas para competir en igualdad de condiciones.
  11.  Que es preciso y urgente instar al Gobierno a proteger de manera clara e inequívoca la Red Neutral, con el fin de proteger el valor de Internet de cara al desarrollo de una economía más productiva, moderna, eficiente y libre de injerencias e intromisiones indebidas. Para ello es preciso que cualquier moción que se apruebe vincule de manera indisoluble la definición de Red Neutral en el contenido de la futura ley que se promueve, y no condicione su aplicación a cuestiones que poco tienen que ver con ésta.

La Red Neutral es un concepto claro y definido en el ámbito académico, donde no suscita debate: los ciudadanos y las empresas tienen derecho a que el tráfico de datos recibido o generado no sea manipulado, tergiversado, impedido, desviado, priorizado o retrasado en función del tipo de contenido, del protocolo o aplicación utilizado, del origen o destino de la comunicación ni de cualquier otra consideración ajena a la de su propia voluntad. Ese tráfico se tratará como una comunicación privada y exclusivamente bajo mandato judicial podrá ser espiado, trazado, archivado o analizado en su contenido, como correspondencia privada que es en realidad.

Europa, y España en particular, se encuentran en medio de una crisis económica tan importante que obligará al cambio radical de su modelo productivo, y a un mejor aprovechamiento de la creatividad de sus ciudadanos. La Red Neutral es crucial a la hora de preservar un ecosistema que favorezca la competencia e innovación para la creación de los innumerables productos y servicios que quedan por inventar y descubrir. La capacidad de trabajar en red, de manera colaborativa, y en mercados conectados, afectará a todos los sectores y todas las empresas de nuestro país, lo que convierte a Internet en un factor clave actual y futuro en nuestro desarrollo económico y social, determinando en gran medida el nivel de competitividad del país. De ahí nuestra profunda preocupación por la preservación de la Red Neutral. Por eso instamos con urgencia al Gobierno español a ser proactivo en el contexto europeo y a legislar de manera clara e inequívoca en ese sentido.

sábado, 27 de noviembre de 2010

Un bot para probarlos a todos (trampeando en RTB)

Andaba yo con la idea de hacer un tuto sobre Real Time Battle, un juego de programación muy original en el que uno ha de programar un tanque que se maneja usando la entrada y salida estándar, permitiendo usar casi cualquier lenguaje.
Escarmentado por lo que pasó con la Introducción a la criptografía, que lleva 5 meses esperando el penúltimo post (que vaya si se dice rapido) y el de NetKit (en cuanto pueda lo acabo, en serio), quería tener todo preparado antes de empezar, mientras tanto presento un bot que a mí me sirve para hacer las pruebas y puede que a alguien le resulte útil.

El bot tiene dos partes, la que funciona con RTB (el "servidor"), no hace gran cosa, simplemente lee el archivo "/tmp/controller" y hace que el tanque lo haga, la segunda parte es con la que se comunica el usuario (el "cliente"), que le permite controlar al robot... sí, trampa gordísima, va en contra del objetivo propio del juego, pero sirve para probar el comportamiento de otros robots sin tener que escribir uno que los active.


jueves, 25 de noviembre de 2010

La guía del "grey hat" de la EFF [traduccion]

Encontre un documento de la EFF hasta el que llegue a través de el de "derechos del programador" (muy recomendable, por cierto) que puede resultar interesante para quién sin querer se pudo meter en problemas o simplemente tiene dudas sobre como avisar sobre vulnerabilidades y supuse que a alguien le puede parecer interesante, así que aquí va la traducción. Por cierto, esto gira en torno a las leyes en los EEUU, pero al fin y al cabo hoy en día en este mundillo son las que se acaban imponiendo, sin más...

Un/a investigador/a de seguridad informática que ha violado la ley durante su investigación se enfrenta a un dilema al pensar si debe notificar a la compañía del problema que descubrió en uno de los productos de esa compañía. Al reportar el fallo de seguridad, el/la investigador/a revela que puede haberr cometido una actividad ilegal, lo que puede invitar a la denuncia o investigación criminal. Por otro lado, ocultar la informacion significa que un fallo de seguridad potencial puede que no se arregle.

miércoles, 24 de noviembre de 2010

Pywc 0.4

Hoy estrenamos nueva versión de Pywc:
  • Corregido un bug que incluía lo que sigue a "?" y "#" como parte de una URL relativa, vamos que con una URL como "blablabla.com/yoquese.php?asd=jejeje/123" , la ruta base antes quedaría en "blablabla.com/yoquese.php?asd=jejeje/" y ahora en "blablabla.com/" (como tiene que ser). 
  • Además se añadió un método para descargar datos que no se tienen que parsear (para imágenes o archivos binarios, por ejemplo).
 El código es este: pywc04.zip

Entonces la referencia quedaría así:

martes, 23 de noviembre de 2010

Más animaciones

Hoy solo colorinchos y código de Structure Synth.
Vídeo en: http://videobin.org/+2ks/2vh.html


Este tardó 3 horas y media en ser trazado, lo que le hace a uno cuestionarse si será válido para cosas grandes (el video muestra el bucle dos veces)

Ah, sí, antes de nada decir que al parecer se puede establecer que al alacanzar el límite de recursividad de una regla se aplique otra con:
rule <nombre de la regla> maxdepth <profundidad> > <regla que se ejecutará al final>

Introducción a Structure Synth (y van 4), animaciones con la nueva versión

Pues sí, se supone que la serie se quedaría en el 2, pero resulta que acaban de lanzar la versión 1.5 de Structure Synth, que añade:
  • Un raytracer integrado, ya no hay que usar programas externos como Sunflow
  • Scripting con Javascript para hacer animaciones (a estas alturas más de uno, entre los que me incluyo, ya debe estar salivando =D )
  • Exportación de archivos OBJ (confieso que esto aún no se que es)
  • Cambios varios... en la GUI, se añadio un generador de números aleatorios para el preprocesador, etc
Y uno no se puede quedar sin hablar de ella =P
La nueva versión se puede descargar aquí: http://structuresynth.sourceforge.net/download.php

Empezamos...

domingo, 21 de noviembre de 2010

PoC de login seguro sobre HTTP

A raíz de este hilo en HackXCrack decidí programar un sistema de login que permitiese cierta seguridad ante atacantes pasivos aún funcionando sobre HTTP en plano, todo de forma transparente al usuario.

La idea es simple, cuando el usuario se intenta loguear, se le asigna un token que se utilizará como salt de una función hash que se aplicará a la contraseña (yo he utilizado MD5 porque tenía el código en python a mano), el resultado de la función será el que se envíe. El utilizar un token es importante porque evita ataques de replay, es decir, que el atacante pase a través de la función hash, enviando el resultado directamente, no tendría que conocer la contraseña original si el resultado es siempre el mismo. Además es importante que el token lo establezca el servidor y nunca quién se loguee, ya que lo podría modificar para que fuera el mismo que el del usuario original, con lo que se vuelve al ataque de replay.

Pero tiene bastantes problemas:
  • Si el atacante es activo (puede interceptar la conexión y modificar datos al vuelo), puede cambiar el código fuente de la página, invalidando esto.
  • Las contraseñas han de guardarse en texto plano, para poder realizar el hash a posteriori.
  • Como consecuencia de lo anterior se produce un aumento muy considerable de la carga del servidor, ya que en vez de hacer el hash una sola vez (ya que se supone que las contraseñas se guardan ya hasheadas), en el peor caso, ha de comprobarse el hash de todas las contraseñas cada intento de login.
La prueba (todo muy mínimo) está alojada en md5poc.webcindario.com, el código fuente se puede descargar aquí [md5poc.zip]

Btw... 1 año!!

miércoles, 17 de noviembre de 2010

De algoritmos genéticos y entropía

Hoy presento una idea chorra como cualquier otra, pero que a mi personalmente me emocionó ver que funcionaba, es simplemente un conjunto de un intérprete y un programa que modifica un trozo de bytecode al azar, obviamente pensados para trabajar juntos.

La idea es usarlos para generar un algoritmo usando algo análogo a la evolución natural, aplicando un script (solo por comodidad) para que elija que rama del algoritmo debe ser la que prevalezca, el código con un ejemplo: [instructolang.zip] (el script usa un trozo de código que se puede encontrar aquí http://math.co.ro/C/entropy.c, aunque va incluido en el .zip).

Por ahora está muy limitado, solo realiza las operaciones de suma, resta, intercambio de variables y asignación, de todos modos no creo que pueda llegar a ser turing completo por cosas como el problema de parada, que sería necesario resolver para evitar bucles infinitos.

martes, 16 de noviembre de 2010

SniperlCat 0.3.1, pasado a perl estricto y correjidos bugs varios

Esta versión no trae nada nuevo, así que va a ser corto. Se pasó todo el código a perl estricto (use strict), y se corriguieron fallos tontos al interpretar las opciones de la línea de comandos, por ejemplo, si se daemonizaba después de lanzar un hilo, el hilo se cerraba por que lo hacía el proceso original =P

El trigger no cambia (bueno, en realidad cambia el notify-send, que en vez de poner 0.3, es 0.3.1, pero es estético). El código completo está en github , aunque lo importante es el Sniperlcat.pl [o en plano]

ps: Ya me dirán por que ******* no dejarán usar break; en estricto !?

lunes, 15 de noviembre de 2010

Usando proxies con Python

Presento un pequeño código para usar proxies SOCKS 4 y 5 en python, en principio la idea era mostrarlo junto un servidor proxy en C, pero viendo que con esto se podía tumbar, tardará un poco más...

miércoles, 10 de noviembre de 2010

De Firefox y URL's extrañas [Offtopic]

La verdad, no se me ocurre como explicarlo, pero encontre que  intruciendo el número "420269270299515438631900510129391513177391570263223450330471608719833573145727622663393847726701366096253366170285832918664116229882221533373"
sacado de el resultado un post anterior, sin comillas en firefox, te lleva a una página web:
Sin embargo otros navegadores te mandan directamente al buscador (y se niegan a ir aunque pongas http:// delante), nslookup y dig dicen  'is not a legal name (label too long)' y telnet dice de primeras que "Name or service not known".

No creo que se pueda considerar un bug ni nada por el estilo, pero uno no puede evitar seguir tirando del hilo =P

martes, 9 de noviembre de 2010

Fibonacci rápido en python

No es gran cosa, pero aquí teneis una versión de los números de Fibonacci que no se demora mucho para obtener números grandes, por ejemplo, para el número de Fibonacci 10000, tarda 0.1 segundos
(Eliminé los números que hay por el medio para que no quede una imágen excesivamente grande)

sábado, 6 de noviembre de 2010

Clon de LOIC en python

Cierto anónimo sugirió hacer un clon de LOIC en python, aquí está un posible código, dividido en 5 archivos, no tiene interfaz gráfica, pero implementa el flooder de los 3 protocolos de LOIC.

Actualización: subido a github https://github.com/kenkeiras/pyLOIC

jueves, 4 de noviembre de 2010

Probando el Go de Google

Pues leyendo la linux magazine de este mes (donde me también di por primera vez con scratch) me encontré con un articulo sobre el lenguaje Go de Google y me entraron ganas de probarlo, la experiencia es bastante curiosa.

domingo, 31 de octubre de 2010

Probando scratch

"Scratch es un lenguaje de programación que hace fácil crear tus propias historias interactivas, animaciones, juegos, musica y arte -- y compartir tus creaciones en la red.
Cuando la gente joven crea y comparte proyectos de Scratch, aprenden importantes ideas sobre las matemáticas y la computación, mientras aprenden también a pensar de forma creativa, razonar systematicamente y trabajar colaborativamente."
Eso es lo que dicen de este proyecto en su web, solo cabría añadir que fue desarrollado en el MIT y que el código está basado en "bloques" de instrucciones, no en texto, haciendolo muy visual y evitando errores sintácticos.

sábado, 30 de octubre de 2010

Un autómata celular para generar números pseudo-aleatorios

La idea no es la primera vez que se oye, creo que fue Wolfram quién lo propuso en su momento, pero el concepto no deja de ser curioso, y el otro día trasteando con Golly me encontre con que una pequeña variante del juego de la vida de Conway, con la diferencia de que una "célula" también puede "nacer" si tiene 4 vecinos (y no solo 3) llamado "3-4 life", que hace que patrones sencillos crezcan indefinidamente quedando el contenido en su interior algo aleatorio, esta es una simulación de las 250 primeras generaciones [http://videobin.org/+2be/2ly.html].

SniperlCat 0.3, suma y sigue

Pues nada, nueva versión de sniperlcat, los cambios son:
  - Los avisos los hace un script a parte, eliminando GTK de las dependencias y haciendo que no haya que trastear en el código para que haga algo distinto con los avisos.
  - Corregido al bug que lo volvia paranoico al cerrar el dispositivo...al final solo había que reabrirlo =)
  - Añadida la opción de poner a la escucha un puerto cualquiera para detectar los scanners que se conectan a el, si se utiliza varias veces se escuchan varios puertos (cada uno en un hilo distinto).

viernes, 29 de octubre de 2010

Invertir los canales de sonido

Otro script más que engrosa las listas de lo programado solo por programar [http://pastebin.com/FzQmDxKP].

Recibe como parámetros el archivo original y el nombre del que se creará y copia el sonido del primero en el segundo cambiando el canal de la derecha por el de la izquierda y viceversa.

Meh... pues si que quedo pequeño el post =P.

miércoles, 27 de octubre de 2010

Como generar una onda de Audio para archivos WAV (PCM)

Como en su momento no encontré nada sobre este tema, aquí va una pequeña explicación de como generar audio modulado en PCM, lo que usa por ejemplo, el formato WAV.

martes, 26 de octubre de 2010

[Offtopic] Thunderbird te avisa si te olvidas de adjuntar algo

Parece que thunderbird añadió la característica de avisar al usuario de que falta algo por adjuntar si observa algo en el mensaje que indica que se debería haber hecho (algo como nombrar un tipo de archivo común)

lunes, 25 de octubre de 2010

Mostrar el voltaje actual de la batería en gambas

Con el tiempo el hardware deja de funcionar todo lo bien que deberia, esto se nota sobretodo (al menos eso creo) con los portátiles, que al parecer tienen una marcada tendencia a fallar en la batería y en el cargador, piezas que se supongo que resienten especialmente en un uso prolongado.

La última "manifestación" que vi de estos problemas es de vez en cuando la potencia de la corriente que viene del adaptador AC cae por debajo de cierto valor, lo que hace que poco a poco la batería se vaya descargando(¿?). Esto hace que haya que comprobar frecuentemente el voltaje de carga para poder tomar precauciones antes de que se quede sin energía, una forma fácil de hacerlo es con una sencilla línea de bash

miércoles, 20 de octubre de 2010

Improvisando un cifrado de flujo/generador de números aleatorios

A veces hay que hacer un pequeño sistema de cifrado para la ocasión que no tiene porque ser criptográficamente seguro, una chapuzilla vamos, veremos como improvisar uno.

domingo, 17 de octubre de 2010

Música con el WiiMote y python

Antes de nada, gracias a Vishkey por prestarme el mando para poder seguir con estas cosas :D

Enfin, que hay avances en el código para manejar el Wiimote, conseguí reproducir música de 8-bits en el, el resultado a penas se entiende con sonido "normal", pero con música electrónica a lo binärpilot, se escucha relativamente bien. El formato usado es PCM a 8 bits con signo (no como wav), con un framerate de 1500Hz

jueves, 14 de octubre de 2010

Colorinchos

Hoy presento un programilla que muestra triángulos de colores a lo caleidoscopio (que era la primera intención, pero de SDL se pasó a OpenGl y de texturas a triángulos y ya la armamos)[colorinchos.c].

El efecto es este (videobin mola :P) [ http://videobin.org/+1zv/2ac.html ]

El hola mundo con el alfabeto fonético

La idea original era hacer define de las letras "fonéticas" a su equivalente normal y despues unirlas, todo con el preprocesador, pero parece que este funciona al reves, primero cambia las funciones y después lo demás, ademas no se puede usar la recursividad (que un archivo se incluya a si mismo), porque cada nivel vuelve a ver el archivo original. Así que habrá que conformarse con esto, que es bastante menos elegante, pero enfin...

domingo, 10 de octubre de 2010

Interactuando con el WiiMote desde Python

El mando de Wii es a día de hoy un cachivache muy capaz de interactuar con el PC, tanto por que funciona a través de bluetooth, como porque sus capacidades impolsaron a la scene a estudiarlo.
El detalle es que después de ver un problema recurrente con estas consolas, que hacían falta pilas para usar el mando incluso cuando al final para jugar solo se utilizaran los que se conectan por cable a la consola, decidí escribir un script que permitiese conectarse a la consola y que, al menos, moviera el cursor y pulsara el boton principal [A] para poder solventar estos casos.

Nota: Hay una librería C para interactuar con el mando, llamada libcwiid

Aunque dicho script aún no está escrito, es más fácil conseguir un mando para trastear y explorar la forma con la que se comunica con la consola que una consola directamente, con ese motivo se escribió este código [pymote.py]. Conecta el dongle/pincho/chuzo bluetooth y comenzemos...

viernes, 8 de octubre de 2010

Script para grabar CD's y guardar la imágen ISO

Hoy presento un pequeño script que permite extraer una imágen ISO de un CD, o grabar una fácilmente. El script se puede descargar aquí [bashBurn.sh], funciona usando Zenity para la GUI, wodim para grabar y dd para recuperar las ISO.

lunes, 4 de octubre de 2010

Portando LOIC a Gnu/Linux

Empezando por el principio, Anonymous está atacando a los lobbies del copyright, la noticia no es nueva, ya llevan un rato así, y me entero de que aún estan portando LOIC (el DOSer que utiliza esta comunidad) a Gnu/Linux. Portarlo es trivial, usaré MonoDevelop porque lo hace más facil y apenas ocupa 20 Megas, sino solo hay que editar el código a mano, cosa más que fácil.

Script para saber etiqueta de un dispositivo FAT

El aburrimiento de pasar unas horas en el tren sin conexión hace estragos, y para muestra un botón script, indícale al script un dispositivo FAT (vas a necesitar permisos de root) y dirá el nombre:

domingo, 3 de octubre de 2010

Script para limpiar archivos borrados del disco duro

Hoy presento un código que acaba con el problema de los archivos ya borrados pero que siguen rondando por el disco duro. No es gran cosa, y seguramente forme parte de muchas colecciones de scripts, pero sigue pudiendo ser útil.

Simplemente genera archivos nuevos con contenido aleatorio (de /dev/urandom, /dev/random se eternizaría) hasta llenar el espacio de la particion, y despues los borra.

jueves, 30 de septiembre de 2010

BClock, un reloj binario en 510 bytes (autobootable)

Hoy presento un código en la línea del BGame, es decir, algo completamente inútil, hecho solo para quitarse el mono de ensamblador en ring 0.

Simplemente muestra un reloj binario (puro o en BCD, según le venga en gana al RealTimeClock =S )

De heuristicas, antivirus y malware

Antes de nada, ningun ordenador fue infectado por malware en el proceso y lo que viene a continuación se hizo con el único fin de pasar el rato, si lees esto con la esperanza de saber como infectar más ordenadores o algo por el estilo, lo siento (... en realidad no) pero no estas en el lugar indicado, ve con root.

Pues presento un programa que genera otros programas ensamblando componentes (una shell inversa, un proxy SOCKS4 , un bot IRC... ), al principio no tenía ningun propósito pero parece que los módulos por separado pueden servir para echarle un vistazo a la euristica de los antivirus.

domingo, 26 de septiembre de 2010

Introducción a NetKit (I): instalación

Al final si que habrá tuto de Netkit (lo estás leyendo ahora), más que nada orientado a esa gente que quiere trastear con las redes, y que no tiene espacio/tiempo/ganas de montar una fisica o con las máquinas virtuales habituales (tipo VirtualBox) y a aclarar algo mis propias ideas :P.

miércoles, 22 de septiembre de 2010

Generador de redes netkit

Comenzando por el principio... NetKit, conocido como "El sistema del hombre pobre para experimentar con redes de ordenadores" es un proyecto que pretende usar UML (User Mode Linux, un kernel que como su nombre indica, corre en espacio de usuario, en ring 3) para simular redes de ordenadores completos pero ligeros (normalmente Gnu/Linux Debian en modo texto).

lunes, 20 de septiembre de 2010

Sonido fractal (experimento)

Update: corregido un detalle que podría causar un error al dividir por 0

La idea (no me acuerdo de donde salio, la verdad) es diseñar un fractal y "mostrarlo" a través de un archivo de música. El fractal elegido es una conjunto de Cantor por que es simple, y porque se puede presentar en un formato de 1 dimensión, de tiempo en este caso y otra que aquí será la frecuencia. Este script genera un archivo wave (.wav) basandose en esa idea.

No a grabaciones Copyright en el CSA LaTabacalera [Offtopic]

Update: Parece que al final, el ministerio dejará la elección en manos de la asamblea del Centro ^^

Grosso modo, el asunto es que cierto cantante "pro-copyright" (Alejandro Sanz) quiere grabar un videoclip en el CSA LaTabacalera, estando este centro comprometido con el Copyleft se le pidio que no lo hiciera o que liberara la música, en este momento es cuando el ministerio de [in]cultura mete mano y obliga a que se permita la grabación, al principio se intento convencer al artista por las buenas (vía twitter). Dado que el artista no responde (o eso tengo entendido), se convoca a la gente mañana lunes, (¿hoy?) a las 10 (a las 10.30 es cuando se tiene pensado montar todo para grabar el videoclip) para ver que hacer.

Para verlo más claro:
    http://blogs.latabacalera.net/tabapress/?p=277 [en menéame] del 18, primera noticia
    http://latabacalera.net/?p=2361 lo que se hará el lunes (hoy)

Y el mensaje en la lista de correo:
Hola, fuentes bien informadas nos advierten que l@s montador@s de sonido
han sido convocad@s mañana a las 10,30 en Tabacalera para, obviamente,
preparar la técnica de la grabación del videoclip de Alejandro Sanz.

(Por si no todo el mundo ha seguido el hilo, la cuestión es que el
ministerio, nuestro dueño, ha decidido ejercer una cláusula e imponernos
la grabación en nuestro espacio -en la Nave central- de un videoclip
promocional del artista. Les explicamos que eso pasaba por encima de
todos nuestros criterios, desde el copyleft hasta la priorización de
actividades no comerciales y sin ánimo de lucro, pero no les gustó que
se lo dijéramos y cortaron la comunicación. Ahora por la vía de los
hechos, su decisión se impondrá).

Eso quiere decir que sea la asamblea a las 8, a las 5 o a las 7, la cosa
se juega mañana por la mañana, porque esta misma fuente dice que si se
llega a montar es prácticamente imposible que no se haga, porque el
proceso es costosísimo en todos los sentidos, incluido el de carísimo.

Entonces, no nos queda más remedio que convocarnos a tod@s l@s que
podamos a las 10 en Tabacalera, y ver entonces qué ondas.

Lo que la fuente no nos ha podido decir es si tiene que presentarse en
un lugar o en otro del edificio, solo la han convocado a las 10, 30 en
Embajadores. Cabría la posibilidad de que hubiera suerte y hubieran
decidido hacerlo en la otra parte del edificio, pero nos tememos que no
sea así, y que finalmente lunes y martes estemos copad@s -veremos si nos
dejan acceder- por la macroproducción de la warner a mayor gloria de
alejandro, una de esas estrellas públicas que además se negó a firmar en
apoyo a la despenalización parcial de los manteros que el parlamento
aprobó recientemente.

nos vemos entonces a la mañana, oh, qué largo día. Difundid al máximo la
convocatoria.

Hasta luego, espero no haber llegado muy tarde =P.

martes, 14 de septiembre de 2010

SniperlCat 0.2, detección de SYN scan's

Actualización: por algun extraño motivo se vuelve paranoico con los paquetes cuando se suspende el ordenador y se vuelve a iniciar (¿?), estoy trabajando para resolver eso.

Hoy traigo la segunda versión del SniperlCat [SniperlCat 0.2], los cambios no son muchos, pero creo que pueden resultar interesantes:

- Detecta los paquetes SYN de sockets raw (típicos de un SYN scan), aunque para esto necesita permisos de root para levantar un sniffer, básicamente se aprovecha esta [http://danielmiessler.com/study/synpackets/] idea, aunque con scanners modernos se puede hacer que no exista diferencia, unicamente avisa de paquetes con un tamaño menor de 60 bytes (suelen ser de 58) y sin el flag DF de IP activado.

- Permite llevar un log aparte de las notificaciones... no es gran cosa pero puede ser útil.

- Las alertas se reunieron en una función llamada "show_alert" para poder modificar el sistema más facilmente.

Las dependencias quedarían en "libgtk2-notify-perl" para las notificaciones, y "libnet-pcap-perl" y "libnetpacket-perl" para buscar paquetes sospechosos.

Y la sintaxis del comando sería:

Sniperlcat 0.2

sniperlcat [-h]|[-d | -v ] [-nf] [-c] [-n <red>] [-f <descriptor de red>] [-p|-np] [-dv <interfaz>][-l <log>][-s <tiempo>]
-h  (--help): Muestra este mensaje
-d  (--daemonize): Se ejecuta de fondo
-nf (--no-fill): No llena la tabla de hosts (con nmap) antes de leerla
-c  (--cansino): Repite los avisos, aún los ya emitidos, en cada iteración
-v  (--verbose): Muestra más información por pantalla
-n  (--network): Especifica la red donde se ejecuta, por defecto 192.168.1.0/24
-dv (--device): Especifica la interfaz de red que se monitoreará
-p  (--privileged): Se asumirán que es un usuario con privilegios
-np (--no-privileged): Se asumirán que es un usuario sin privilegios
-l  (--log): Se guardarán los avisos en un archivo
-s  (--sleep): Especifica el tiempo en segundos de "descanso" entre iteraciones (por defecto 60)


Eso es todo, otro día... más.

[Referencias]
http://seclists.org/pen-test/2007/Oct/44
http://www.perlmonks.org/index.pl?node_id=170648
http://search.cpan.org/~saper/Net-Pcap-0.16/Pcap.pm

martes, 7 de septiembre de 2010

Script para hacer animaciones con CFDG

Hoy traigo un script que genera automaticamente un conjunto de imágenes con CFDG [cfanim.pl].
 Lo que hace es partir de un archivo de este programa, partiendo de un nivel de recursividad pequeño y avanzando, por ejemplo, partiendo del archivo:

startshape init

rule init{
     spiral{sat 1 b 0.8}
}

rule spiral{
     SQUARE{}
     spiral{x 1 r 1 hue 1 s 0.999}
}



Se pueden obtener las imágenes desde el primer nivel de recursividad, hasta, digamos... el 300


./cfanim.pl base.cfdg -i 1 -f 300


Nota: Es importante no partir del 0, porque se utilizaría en esa imágen el nivel de recursividad normal, no el especificado.

Con ese comando obtendríamos 300 imágenes individiales, pero si además queremos juntarlas para convertirlas en un .gif, se haría:

./cfanim.pl base.cfdg -i 1 -f 300 -m animacion.gif



La sintaxis del script es:

./cfanim.pl <archivo.cfdg> -i <figuras iniciales> -f <figuras finales> [-s <step>] [-m <output.gif> [-d <delay>]]


Por ejemplo, en el ejemplo anterior haciendo un gif de los 1000 primeros frames con 1 centésima de segundo entre cada una se haría:


./cfanim.pl base.cfdg -i 1 -f 1000 -m animacion.gif -d 1



Y eso es todo, hasta otra.

Introducción a Structure Synth (y III), el regreso

Gracias a Vishkey, descubrí hace un tiempo que las posibilidades que brinda Structure Synth van más allá de lo mencionado anteriormente, pues resulta que también soporta texturas más complejas, siempre partiendo de las mismas figuras básicas, cuales son dependen de la plantilla usada para exportar, como la plantilla "Sunflow-Ultimate-Groovelock", que como se encuentra entre las que están por defecto, servirá de ejemplo.

La sintaxis es la siguiente:

<figura base>::<textura>



Así, si queremos hacer una esfera con una textura de cristal ("glass"), haremos


sphere::glass



Este ejemplo muestra brevemente como se ven las texturas

set background black
{color white x -0.50005 s 0.001 1000 1000}box::ao // Base
{color white }sphere::glass
{color white x 10 s 0.5 1000 1000}box::shiny // Luz/techo
{ color blue y -2 }sphere::diffuse
{ color white y -4 } sphere::mirror
{color red y -6 } sphere::ao
{color black y -8 }sphere::constant
{color white y -10} sphere::phong
{color white y -12} sphere::ward



De izquierda a derecha, las texturas "glass" en blanco, "diffuse" en azul,"mirror" en blanco,"ao" en rojo,"constant" en negro,"phong" y "ward" en blanco. Además hay una caja que sirve de suelo (con una textura "ao" en blanco) y otra que ilumina la escena (con una textura "shiny" también en blanco).

Este otro ejemplo, (escrito por Vishkey) muestra más claramente las posibilidades que hay

//Autor: Vishkey

{s 2} room

esferas

rule room {
{color brown}pared
{z 20} paredLuminosa
{rx 90 z 10 y 10 color green} pared
{rx 90 z -10 y 10 color blue} pared
{ry 90 z 10 x -10 color yellow} paredEspejo
{ry 90 z -10 x -10 color white} paredEspejo
}

rule esferas {
{s 2 z 1 x 2 color white} sphere::glass
{s 2 z 1 x 1 y 1 color white} sphere::mirror
{s 2 z 1 x 1 y -1 color blue} sphere::phong
{s 2 z 1 x 2 y 2 color green} sphere::ao
{s 2 z 1 x 2 y -2 color yellow} sphere::constant
{s 2 z 1 x 1 y -3} sphere::diffuse
{s 2 z 1 x 2 y -4} sphere::shiny
{s 2 z 1 x -2 y -3 color white} box::ward
{s 2 z 1 x -3 y -2 color white} box::ao
{s 2 z 1 x -2 y -1 color white} box::phong
{s 2 z 1 x -3 color white} box::glass
}

rule pared {
{s 20 20 1} box
}

rule paredLuminosa {
{s 20 20 1} box::shiny
}

rule paredEspejo {
{s 20 20 1} box::mirror
}





Como se puede ver, el resultado es una delicia para los ojos aun con pocos elementos... aunque quizá demasiado perfecto =).
Por último añadir que la plantilla usada "Ultimate-Groovelock" añade algunas luces por su cuenta (se aprecia en algunos reflejos), en caso de querer tener un control total de la imágen estas se podrían eliminar buscando las secciones light adecuadas de la plantilla y eliminándolas o cerrando la escena con cajas... es elección de cada uno.

Hasta otra.

lunes, 23 de agosto de 2010

SniperlCat, un guardian de red

Hoy traigo un script en perl que vigila la red en busca de nuevos hosts o de ataques de ARP spoofing (buscando cambios en la tabla arp). El nombre, Sniperlcat es (obviamente) una mezcla entre snipercat y perl, lenguaje en el que esta programado.

El script se puede descargar aquí [sniperlcat.pl], o al final coloreado.

Simplemente hay que ejecutarlo y avisa de los cambios usando el libnotify de GTK2 (puede que sea necesario instalar las librerias Gtk para perl, libdesktop-notify-perl, o libgtk2-notify-perl ).
Por ejemplo, para un nuevo host en la red:

Si el nuevo host está spoofeado desde otro (si coinciden sus MAC):

Si cambia una MAC:


O si cambia la MAC de uno a través de un ARP spoof:

Hay que tener en cuenta algunas cosas:

  • El script no hace nada para evitar los ataques ARP spoof, solo los detecta
  • Si no se lanza con una configuración, utilizará como tal la tabla ARP en ese momento, si hay entonces un ARP spoof en marcha, lo tomará como el estado base.
Los parámetros aceptados son:

./sniperlcat [-h]|[-d | -v ] [-nf] [-c] [-n <red>] [-f <descriptor de red>] [-s <tiempo>]
-h  (--help): Muestra este mensaje
-d  (--daemonize): Se ejecuta de fondo
-nf (--no-fill): No llena la tabla de hosts (con nmap) antes de leerla
-c  (--cansino): Repite los avisos, aun los ya emitidos, en cada iteración
-v  (--verbose): Muestra más información por pantalla
-n  (--network): Especifica la red donde se ejecuta, por defecto 192.168.1.0/24
-f  (--file): Especifica el archivo de red inicial (se obtiene con arp -an)
-s  (--sleep): Especifica el tiempo en segundos de "descanso" entre iteraciones (por defeto 60)



Creo que solo necesitan explicación un par de cosas:

  • Antes de leer la tabla ARP, para llenarla con todos los host de la red se hace un `nmap $red -sP` , si consideras que no es necesario, usa -nf
  • Si la red es distinta de 192.168.1.0/24 (o 192.168.1.*), la puedes cambiar con -n red, como solo lo usa nmap, la sintaxis es la misma que este.
Hasta otra.

El script [sniperlcat.pl] :

#!/usr/bin/env perl
#
# SniperlCat
#
##############################################################################
#  Copyright (C) 2010 Kenkeiras <kenkeiras (arroba) gmail (punto) com>
#
#  This program is free software. It comes without any warranty, to
#  the extent permitted by applicable law. You can redistribute it
#  and/or modify it under the terms of the Do What The Fuck You Want
#  To Public License, Version 2, as published by Sam Hocevar.
#
#  See http://sam.zoy.org/wtfpl/COPYING for more details.
##############################################################################

my $appname = "Sniperlcat";

$app_icon = "";
$network = "192.168.1.*";
$verbose = 0;
$cansino = 0;

my $go_back = 0;
my $arp_fill = 1;
my $file = "";
my $sltime = 60;

use Gtk2::Notify -init, "Sniperlcat";

# Se va al fondo
sub daemonize{
    $verbose = 0;
    umask 0;
    open STDIN, "</dev/null" || die $!;
    open STDOUT,">>/dev/null" || die $!;
    open STDERR, ">>/dev/null" || die $!;
    defined ($pid=fork) || die $!;
    exit if $pid;
    setsid || die $!;
}

sub show_help{
        print "$appname\n";
        print "./sniperlcat [-h]|[-d | -v ] [-nf] [-c] [-n <red>] [-f <descriptor de red>] [-s <tiempo>]\n";
        print "-h  (--help): Muestra este mensaje\n";
        print "-d  (--daemonize): Se ejecuta de fondo\n";
        print "-nf (--no-fill): No llena la tabla de hosts (con nmap) antes de leerla\n";
        print "-c  (--cansino): Repite los avisos, aun los ya emitidos, en cada iteración\n";
        print "-v  (--verbose): Muestra más información por pantalla\n";
        print "-n  (--network): Especifica la red donde se ejecuta, por defecto 192.168.1.0/24\n";
        print "-f  (--file): Especifica el archivo de red inicial (se obtiene con arp -an)\n";  
        print "-s  (--sleep): Especifica el tiempo en segundos de \"descanso\" entre iteraciones (por defeto 60)\n";  
}

# Comprueba los parámetros

my $i = 0;
while ($i <= $#ARGV){
    if (($ARGV[$i] eq "-d") || ($ARGV[$i] eq "--daemonize")){
        $go_back = 1;
    }
    elsif (($ARGV[$i] eq "-h") || ($ARGV[$i] eq "--help")){
        show_help;
        exit 0;
    }
    elsif (($ARGV[$i] eq "-v") || ($ARGV[$i] eq "--verbose")){
        $verbose = 1;
    }
    elsif (($ARGV[$i] eq "-c") || ($ARGV[$i] eq "--cansino")){
        $cansino = 1;
    }
    elsif (($ARGV[$i] eq "-nf") || ($ARGV[$i] eq "--no-fill")){
        $arp_fill = 0;
    }
    elsif (($ARGV[$i] eq "-n") || ($ARGV[$i] eq "--network")){
        $i++;
        if ($i > $#ARGV){
            print "No se ha especificado la red\n";
            show_help;
            exit 1;
        }
        $network = $ARGV[$i];
    }
    elsif (($ARGV[$i] eq "-f") || ($ARGV[$i] eq "--file")){
        $i++;
        if ($i > $#ARGV){
            print "No se ha especificado el archivo de red\n";
            show_help;
            exit 1;
        }
        $file = $ARGV[$i];
    }
    elsif (($ARGV[$i] eq "-s") || ($ARGV[$i] eq "--sleep")){
        $i++;
        if ($i > $#ARGV){
            print "No se ha especificado el tiempo\n";
            show_help;
            exit 1;
        }
        $sltime = $ARGV[$i];
    }
    $i++;
}

daemonize if $go_back;

# LLena la tabla arp con nmap
sub fill_arp_table{
    `nmap $network -sP 2>/dev/null 1>/dev/null`;
}

# Carga la tabla arp de un archivo
sub load_arp_desc{
    my %tmplist = ();
    my $arp = $_[0];
    my @lines = split(/\n/,$arp);
    my $ip,$mac,$i = 0;
    my $max = @lines;

    while ($i < $max){
        # Extrae la IP
        @line = split(/ /,@lines[$i]);
        @ip = split(/\(/,$line[1]);
        @ip = split(/\)/,@ip[1]);
        $ip = @ip[0];


        # Y la MAC
        $mac = $line[3];

        # Y se introduce en la lista si es una MAC válida
        if (substr("$mac", 0, 1) ne "<"){
            $tmplist{"$ip"} = "$mac";
        }
        $i++;
    }
    return %tmplist;
}

# Carga la tabla arp
sub load_arp_list{
    my $arp = `arp -an`;
    return load_arp_desc($arp);
}

# Hace las comprobaciones
sub check_list{
    my $ip_list = $_[0];
    my $tmplist = $_[1];
    my $lastlist = $_[2];

    foreach my $ip (keys %$tmplist){
        my $mac = $tmplist->{$ip};
        # Si es un host nuevo
        if (!exists $ip_list->{$ip} ) {
            if ((!exists $lastlist->{$ip}) || ($cansino)){
                my $message = "Equipo desconocido en la red: $ip [$mac]";
                if ($mac ne "00:00:00:00:00"){ # Se suele utilizar para tapar
                                                                  # despues de arp spoofing.
                                                                  # No aporta nada
                    # Si la MAC está repetida, probablemente haya spoofing
                    foreach my $tmpip (keys %$ip_list){
                        if (($ip_list->{$tmpip} eq $mac) && ($tmpip ne $ip)){
                            $message .= ", posiblemente spoofeado desde $tmpip";
                        }
                    }
                }
                print "$message\n" if $verbose;
                my $notification = Gtk2::Notify->new("$appname", "$message","$app_icon");
                $notification->show();
            }
        }
        else{
            # Si cambio la MAC
            if ($ip_list->{$ip} ne $mac){
                if (($lastlist->{$ip} ne $mac)||($cansino)){
                    my $message = "La MAC de $ip ha cambiado de [".$lastlist->{$ip}."] a [".$mac."]";
                    if ($mac ne "00:00:00:00:00"){ # Se suele utilizar para tapar
                                                   # despues de arp spoofing.
                                                   # No aporta nada
                        # Si la MAC está repetida, probablemente haya spoofing
                        foreach my $tmpip (keys %$ip_list){
                            if (($ip_list->{$tmpip} eq $mac) && ($tmpip ne $ip)){
                                $message .= ", posiblemente spoofeado desde $tmpip";
                            }
                        }
                    }
                    print "$message\n" if $verbose;
                    my $notification = Gtk2::Notify->new("$appname", "$message","$app_icon");
                    $notification->show();
                }
            }
        }
    }
}

my %ip_list;
if ($file eq ""){
    if ($arp_fill){
        print STDERR "LLenando lista arp... " if $verbose;
        fill_arp_table;
        print STDERR "[OK]\n" if $verbose;
    }
    print STDERR "Leyendo tabla arp... " if $verbose;
    %ip_list = load_arp_list;
}
else{
    local $/=undef;
    open MYFILE, "$file" or die "Couldn't open file: $!";
    binmode MYFILE;
    $arp = <MYFILE>;
    close MYFILE;
    %ip_list = load_arp_desc("$arp");
}
print STDERR "[OK]\n" if $verbose;

my $lastlist = \%ip_list;
while (1){
    if ($arp_fill){
        fill_arp_table;
    }
    my %tmplist = load_arp_list;
    check_list(\%ip_list,\%tmplist,$lastlist);
    $lastlist = \%tmplist;

    sleep $sltime;
}

viernes, 20 de agosto de 2010

Detectando DNS y ARP spoofing

Pues eso, hoy, unas formas de detectar el spoofing de DNS (falseamiento de un nombre de dominio) y de ARP (que puede servir para suplantar una IP).

DNS

La forma de detectar un DNS spoofing es bastante simple, pero sigue siendo bastante efectiva para entornos de red local, el script es este o descargado aquí [dns.sh]:

#!/usr/bin/env bash
if [ "$2" == "" ]
    then
        echo "$0 <dirección a resolver> <servidor DNS a probar>"
        exit 1
    fi

echo -n "Velocidad: ";((time ping -c 1 "$2" >> /dev/null) 2>> /dev/stdout )|head -n 2|tail -n 1|cut -f2
echo -n "DNS: ";((time nslookup "$1" "$2" >> /dev/null) 2>> /dev/stdout )|head -n 2|tail -n 1|cut -f2

( ./script <dirección a resolver> <servidor DNS a probar> )

La idea es que compara el tiempo que se tarda en hacer un ping a un servidor DNS y el tiempo que tarda el mismo servidor en resolver una dirección, obviamente un servidor que no esta en la red local (como estaría el supuesto intruso), tardaría mas que el intruso, en la red local.

Por ejemplo, suponiendo que los resultados normales (sin spoofing) fueran estos:


Velocidad: 0m0.068s
DNS: 0m0.075s

Velocidad: 0m0.061s
DNS: 0m0.066s

Velocidad: 0m0.060s
DNS: 0m0.067s

Velocidad: 0m0.061s
DNS: 0m0.070s

Velocidad: 0m0.060s
DNS: 0m0.066s


Los valores con un DNS spoofing podrian ser:


Velocidad: 0m0.060s
DNS: 0m0.015s

Velocidad: 0m0.065s
DNS: 0m0.014s

Velocidad: 0m0.061s
DNS: 0m0.014s

Velocidad: 0m0.066s
DNS: 0m0.014s

Velocidad: 0m0.061s
DNS: 0m0.014s


La diferencia es obvia, el tiempo para resolver sin spoofing es ligeramente mayor que el tiempo de ping, mientras que el tiempo para resolver con spoofing es menos de la mitad del tiempo de ping.

ARP

La forma de detectar un ARP spoofing tambien es bastante simple, si al comprobar la tabla ARP hay MAC's repetidas, significa que (alguna de las repetidas) está spoofeada. Quizá sea necesario llenar la tabla con los host de la red para poder comprobar las MAC de todo la red, se puede hacer simplemente con:


nmap 192.168.0.* -sP


(El 192.168.0.* habría que cambiarlo por el adecuado para la red)
 El script es (o aquí [arp.sh]):

#!/usr/bin/env bash

mip=""
t=0
for a in $(arp -a|sed -e "s/ /_/g" ); do
        ip=`echo $a|cut "-d_" -f2|cut -d\( -f2|cut -d\) -f1`
        mac=`echo $a|cut "-d_"  -f4`
        if [ ${mac,0,1}"" != "<" ]
            then
                # echo "IP: $ip MAC: $mac"
                t=$(($t + 1))
                i=0
                lip=""
                for tmp in $mip ; do
                    if [ `echo $tmp|cut -d_ -f2` == "$mac" ]
                        then
                            echo "MAC duplicada $ip - "`echo $tmp|cut -d_ -f1`" [$mac]"
                        fi
                done
                mip="$mip $ip"_"$mac"
            fi
    done

Simplemente comprueba las MAC duplicadas, y avisa de ello, no requiere interpretación por parte del administrador como el script de DNS (no hay que ver que indican los datos, hay spoof o no).

Y eso es todo, hasta otra.