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
domingo, 26 de diciembre de 2010
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:
Actualización: arreglado Bug gracias a Tincho que hacía que nunca cerrase las conexiones -fixed-
- 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.
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
Etiquetas:
offtopic
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
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.
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.
Etiquetas:
asm,
ensamblador,
nasm,
shellcode
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:
Solo añadir que como dicen en la página web, el deadline es el 31 de diciembre.
Happy coding!
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 espmars -p 200 -l 20 -r 1000. STP
yLDP
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 ]
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
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]
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:
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
Etiquetas:
python,
real time battle,
rtb
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.
Etiquetas:
offtopic,
traduccion
miércoles, 24 de noviembre de 2010
Pywc 0.4
Hoy estrenamos nueva versión de Pywc:
Entonces la referencia quedaría así:
- 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).
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>
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>
Etiquetas:
3d,
javascript,
structure Synth
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:
La nueva versión se puede descargar aquí: http://structuresynth.sourceforge.net/download.php
Empezamos...
- 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
La nueva versión se puede descargar aquí: http://structuresynth.sourceforge.net/download.php
Empezamos...
Etiquetas:
3d,
grafico,
javascript,
structure Synth
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:
Btw... 1 año!!
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.
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.
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.
Etiquetas:
C,
pseudo aleatorio
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 !?
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 !?
Etiquetas:
Perl,
redes,
sniperlcat
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
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)
(Eliminé los números que hay por el medio para que no quede una imágen excesivamente grande)
Etiquetas:
python
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
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.
Etiquetas:
go
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.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.
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."
Etiquetas:
scratch
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].
Etiquetas:
automata celular,
C,
pseudo aleatorio
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).
- 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).
Etiquetas:
Perl,
redes,
sniperlcat
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.
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.
Etiquetas:
audio,
pasando el rato,
python
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)
Etiquetas:
offtopic,
pasando el rato
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
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.
Etiquetas:
cifrado,
cifrado de flujo,
criptografia,
pasando el rato,
pseudo aleatorio,
python
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
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 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...
Etiquetas:
C,
pasando el rato
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...
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:
Etiquetas:
python
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.
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 )
Simplemente muestra un reloj binario (puro o en BCD, según le venga en gana al RealTimeClock =S )
Etiquetas:
asm,
ensamblador,
nasm,
no-os
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.
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.
Etiquetas:
C,
pasando el rato,
pascal,
seguridad
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.
Etiquetas:
GNU/linux,
netkit,
redes,
tutoriales
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.
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:
Hasta luego, espero no haber llegado muy tarde =P.
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
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
Etiquetas:
Perl,
redes,
seguridad,
sniperlcat
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
./cfanim.pl <archivo.cfdg> -i <figuras iniciales> -f <figuras finales> [-s <step>] [-m <output.gif> [-d <delay>]]
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>]]
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.
<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::wardDe 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.
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.
Etiquetas:
3d,
grafico,
structure Synth
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.
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:
./sniperlcat [-h]|[-d | -v ] [-nf] [-c] [-n <red>] [-f <descriptor de red>] [-s <tiempo>]
Creo que solo necesitan explicación un par de cosas:
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;
}
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.
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.
Suscribirse a:
Entradas (Atom)