Rincón Informático

Un rincon para hablar sobre GNU/Linux, seguridad informatica, y mas!!

SupyBot: Como crear un BOT para IRC

Posted by Epsilon On junio - 16 - 2010

Hace pocos dias me puse a la tarea de registrar el canal IRC de la comunidad DragonJAR en freenode, ya que anteriormente  se encontraba en otro servidor el cual solia tener algunos inconvenientes de conectividad. Aprovecho la ocasion para invitarlos a  que ingresen al canal IRC de DragonJAR, para conversar un rato, los datos son los siguientes:

canal: #DragonJAR.org
servidor: irc.freenode.net

Ahore continuemos  con el tema central de esta entrada, al registrar el canal me dio curiosidad y quise hacer algo que desde hace mucho tiempo habia querido hacer y probar: Crear un bot IRC, antes que nada definamos que es un bot irc:

Un bot (abrevitatura de robot) es un programa informático que realiza funciones muy diversas, imitando el comportamiento de un humano. En sitios wiki, como Wikipedia, un bot puede realizar funciones rutinarias de edición. En otros sitios, como Encarta, el bot puede responder a cuestiones sobre el propio contenido del sitio (tcc bots conversacionales).En sitios de chat en línea (IRC o MSN), algunos bots fueron utilizados para simular una persona, intentando hacer creer al “ciberinterlocutor” que chateaban con una persona real.

Me puse a la tarea de buscar(aunque uno mismo puede crear su bot personalizado) un bot, adecuado, sencillo y potente,  y me encontre con supybot,  un bot desarrollado en Python el cual tiene muchas funcionalidades y herramientas, a continuacion voy a dar los pasos que se deben realizar para instalar dicho bot:

  1. Descargamos el bot desde este enlace. y lo descomprimimos
  2. Lo instalamos de la misma forma que instalamos cualquier modulo en python
  3. python setup.py install

  4. Ahora  nos vamos a la carpeta scripts y ejecutamos  un asistente el cual nos guiara creando el de configuracion.
  5. cd  scripts
    python supybot-wizard

  6. Este asistente nos empezara a pregutnar algunas cosas necesarias para configurar nuestro BOT, debemos responder cada una de ellas segun nuestras necesidades. Estas preguntas son:
    1. quieres ver las preguntas en negrita?  -> Responder Y
    2. eres usuario avanzado? -> Por defecto responder N (aunque si quieres puedes ensayar)
    3. donde se encuentra los archivos del bot? -> responder por default .
    4. cual es la red de IRC? -> la red de IRC en mi caso freenode
    5. servidor?  -> la direccion del servidor: irc.freenode.net
    6. requiere de otro puerto no standar? -> Si lo ves necesario
    7. nick del bot? -> Cual sera el nombre del bot
    8. password del nick?  si el nick esta registrado necesita password
    9. canales a conectar?  respondemos Y y en mi caso seria #DragonJAR.org
    10. cargar los plugin idividualmente?  -> NO
    11. owner? Este es el nick quien controlara al bot
    12. caracteres que usara para las ordenes del bot? Y Puede ser @ o | o ! como guste
  7. Lanzamos el bot con el de configuracion que se creo en el paso anterior, generalmente el de configuracion tiene el nombre del con extension .conf:
  8. supybot nombre.conf

  9. Si todo ha salido bien, ya tendremos nuestro bot en el canal de IRC, ahora es necesario entablar una con el bot e identificarnos para poder lanzarle comandos:
  10. /query nombre
    identify nick-quien-controlara-elbot password

  11. Listo ya podremos mandarle muchos comandos a nuestro bot, si quieren ensayar pueden mandarle un ping, y el respondera un pong, este bot tiene muchas funcionalidades, como diccionario, rss,  traductor, mensajes personalizados, y muchos mas… para eso es bueno que lean el manual de cada script y vean como funciona cada uno.

Como ejecutar comandos del sistema desde Python

Posted by Epsilon On abril - 9 - 2010

Hay ocasiones en las cuales necesitamos hacer uso de los comandos de nuestra amada  y querida shell desde algún programa que estemos desarrollando en Python, gracias a la facilidad de la serpiente (una de sus grandes características) podemos hacer esto de forma muy sencilla.  A continuación un ejemplo:

Creamos un llamado prueba.py con el siguiente contenido:

#!/usr/bin/python
import os

os.system(“uname -a”)

Importamos el modulo OS y hacemos uso de la funcion system, la cual nos permite ejecutar un comando de la . sobra decir que en el ejemplo basta reemplazar el comando “uname -a” por el  que nosotros deseemos. Ahora ejecutamos el *.py   de esta forma:

python prueba.py

y el resultado sera:

pythonshell Como ejecutar comandos del sistema desde Python

Como pueden ver es verdaderamente fácil ejecutar comandos del sistema operativo en lenguaje python, esto es importante ya que podemos ejecutar cualquier comando e incluso llamar a un script en bash o lo que se nos ocurra. Antes de terminar quiero aclarar que no soy muy experto en el tema, muy seguramente habrá formas mas sencillas, correctas y potentes para realizar este tipo de cosas, espero que les haya parecido interesante y no duden en comentar.

Quiero compartir con ustedes estos libros que seguramente a quienes les interesa el Desarrollo sobre la web, les será de gran utilidad.

Podemos acceder a dichos libros Online o también los podemos descargar en formato pdf. El material está bajo la licencia Creative Commons. (Idioma Español)

Pagina principal: www.librosweb.es

Descarga directa:
- Introducción a AJAX -> acá

- Introducción a JavaScript -> acá

- Introducción a CSS -> acá

- CSS avanzado -> acá

- Introducción a XHTML -> acá

Symfony, la guía definitiva:

- Symfony 1.0, la guía definitiva -> acá

- Symfony 1.1, la guía definitiva -> acá

- Symfony 1.2, la guía definitiva -> acá

- El tutorial Jobeet de symfony 1.2 -> acá

- El tutorial Jobeet de symfony 1.3 -> acá

Bueno espero que les sea de gran ayuda a todos, nunca esta demás tener un libro a la mano cuando estemos en problemas :D . Hasta la próxima!!

Optimizar el arranque en Debian/Squeeze

Posted by fortress On marzo - 9 - 2010

Cuando instalamos por primera vez en un computador portátil o en cualquier otro tipo de computador nuestro Debian/Squeeze se hace casi que necesario empezar a personalizarlo y eso incluye que nuestro computador arranque de una manera más eficiente y más rápida, para esto. Navegando por la web de esdebian.org me he encontrado con este tutorial que nos dice lo que debemos hacer para lograr este cometido, quise compartirlo con ustedes,  el tutorial es muy sencillo, aunque en la pagina hablan de que es para Debian/lenny yo lo he probado en Debian/Squeeze y funciona muy bien logró arrancar mi sistema en 23 segundos ya ustedes tomarán la decisión de seguir el tutorial o no. Así que no más carreta y manos a la obra.

Paralelismo en los scripts de init.d

Nota: Esta opción sólo proporciona una mejora notable en procesadores de más de un núcleo

Cuando arrancas algún sistema Debian este busca en /etc/init.d/rc para ejecutar los servicios que hayas configurado.

El problema es que no es muy efectivo que se ejecuten uno por uno. Por ejemplo, si tienes un servicio dhcp que tiene que esperar a que se te asigne una IP, retrasaría todo el proceso.

Pero hay que tener cuidado ya que muchos servicios dependen de otros para arrancar, entonces necesitamos un script que organice el arranque para que se puedan iniciar procesos en paralelo. Dicho script se consigue instalando el paquete insserv:

Atención: Este script modifica automáticamente el sistema de arranque de Debian, úsalo bajo tu propia responsabilidad.
#apt-get install insserv
#dpkg-reconfigure insserv

Por último queda decirle al script rcS que utilice esta opción:
CONCURRENCY=startpar >> /etc/default/rcS

Quitar servicios innecesarios

Suena lógico que, si no usas compartición de archivos, o que si tu máquina no tiene bluetooth, quites esos servicios. ¿Pero cómo hacerlo? En Debian hay dos maneras uno ir a /etc/init.d/ y quitas los permisos de ejecución a los scripts de servicios que consideres innecesarios:

#chmod -X nombre-del-servicio

Obviamente debes estar trabajando en el mismo directorio donde esta el servicio.
Ahora la otra manera es con la herramienta Smart Boot Manager, se instala
#apt-get install bum

La ejecutas y tendrás una GUI muy linda para configurar los servicios de arranque incluso, en la mayoría de los casos, te explica para qué sirve cada servicio.

Readahead

Usar Readahead es un herramienta que guarda un registro de ciertos archivos del proceso de arranque de forma que cuando se inicie Debian, el sistema leerá sólo el registro y no buscará los archivos, obteniendo una ligera reducción del tiempo de carga.
#apt-get install readahead
#touch /etc/readahead/profile-once

Con ello instalas readahead, lo segundo es para crear un perfil (profile) optimizado del proceso de arranque de nuestra máquina y servicios

Después de todo este relajo reinicias y no te asustes la primera vez que reinicies durará más de lo normal porque readahead está creando el perfil (profile). Luego de esto vuelve a reiniciar una vez más y verás cómo el proceso de arranque se reduce.

Bueno eso es lo que quería compartir con ustedes espero y les sea de utilidad, hasta la próxima.

Fuente

Joomscan: Escanner de vulnerabilidades para Joomla

Posted by Epsilon On febrero - 22 - 2010

Existen muchas herramientas como w3af, acunetixo el mismo nessus,  que nos ayudan en el proceso de encontrar vulnerabilidades en  aplicaciones web. Sin embargo hace poco encontré un scanner el cual se especializa en portales Joomla(para quienes no saben que es Joomla hacer click aqui). Tuve la oportunidad de probar la aplicacion  y me gusta bastante, entre sus características tenemos:

  • Hecho en Perl
  • Permite actualizarse.
  • Reporte completo.
  • Interfaz web y por .
  • detecta vulnerabilidades como: SQL injection, LFI, RFI, XSS entre otros.
  • Se basa en OWASP.

Para descargar el  script pueden hacer click aqui. Obviamente como es hecho en perl, necesitamos tener instalado perl y algunas librerías:

apt-get install perl libwww-perl libtest-www-mechanize-perl

Para actualizarlo  hacemos lo siguiente:

chmod 777 joomscan.pl

./joomscan.pl update

Hacer un simple escaneo:

./joomscan.pl -u url_joomla

El resultado  que nos arroja es muy explicito, dice la vulnerabilidad, la descripción y si es vulnerable o no. Joomscan un buen script que nos ayuda a  descubrir aquellos  fallos que se pueden explotar en nuestro portal Joomla.

Implementando WakeOnLan en Debian GNU/Linux

Posted by Epsilon On febrero - 16 - 2010

Wake-on-lan o mas conocido como “WOL”, es un estándar que nos permite encender un PC  de forma remota que  se encuentre en nuestra LAN, con tan solo la direccion MAC de dicho computador. El funcionamiento es simple,  la interfaz del PC apagado quedara a la escucha de algun “magic packet”,  el cual sera mandado por nosotros cuando deseemos encender nuestro PC. Para poder implementar esta tecnología, se deben  tener los siguientes requerimientos:

  1. El pc debe estar apagado pero no desconectado (suena obvio, pero es mejor aclarar)
  2. La tecnología debe estar soportada por la placa base y  la interfaz de red.
  3. Igualmente WOL debe estar habilitada en la BIOS del PC que vamos a encender de forma remota
  4. Necesitamos 2 : ethtool y wakeonlan (se pueden instalar desde los repositorios)

Preparando el PC que vamos a encender.

Lo primero que debemos hacer es verificar que nuestra tarjeta de red, soporte y tenga habilitada la opción de WakeOnLan:

ethtool eth0 // en mi caso la interfaz es eth0, la deben cambiar según sea su interfaz

el resultado debe ser algo como esto:

wol habilitado

Si en la opción wake-on (la que esta señalada en la imagen) aparece la d, significa que WOL esta “disable”, para habilitarla hacemos lo siguiente:

ethtool -s eth0 wol g

Comprobamos  haciendo de nuevo el comando de verificacion “ethtool eth0″ y ya en el apartado wake-on nos debe aparecer la letra g.

Ahora que ya sabemos que la tecnología WOL esta habilitada, crearemos el siguiente  script:

## /etc/init.d/wol
#
# chkconfig: 2345 99 99
# description: Force NIC into WOL mode
#
ethtool -s eth0 wol umbg
exit

El nombre de mi script es wol, ahora procedemos hacer lo siguiente:

cp wol /etc/init.d/

chmod 755 /etc/init.d/wol

update-rc.d wol defaults

Listo eso es todo, nuestro PC esta preparado para encenderlo de forma remota,  debemos copiar la mac, ya que ese es el dato para encenderlo, copiamos la mac en cualquier parte y lo apagamos.

Por ultimo en nuestro PC que va servir como remitente del “magic packet” (y que también debe tener el paquete wakeonlan instalado)  tecleamos el siguiente comando para encenderlo.

wakeonlan direccion_mac

Esta tecnología tiene muchas mas opciones y características, les recomiendo que lean e investiguen un poco mas, sobre esto que es muy interesante y sobre todo muy funcional

Como twittear desde la consola algunas estadisticas de tu PC

Posted by Epsilon On enero - 24 - 2010

Hace algun tiempo atras, veia como mi gran amigo @cronopio2 twiteaba las estadisticas de su PC, esto siempre me causo mucha curiosidad, obviamente sabia que el no publicaba esta informacion de forma manual, deberia  tener algun script que hacia todo por el.

blt (Bash Love Twitter), es un cliente de Twitter para nuestra ,  el cual nos brinda todo el poder de bash, una definicion segun la web oficial:

blt shows you what your twitter friends are doing while you’re working at the commandline, in Linux, BSD, OS X and Cygwin under Windows. In more detail, it’s a perl script which integrates the checking of twitter into bash(1). Think of it like biff(1) for twitter. It should be considered alpha at present. blt is released under the GPLv3 with no warranty.

Para instalarlo solo basta con escribir lo siguiente en una :

cpan App:: BLT

De aqui en adelante BLT se configurara solo, basandose en una serie de preguntas.

Despues de instalarlo, debemos ejecutarlo por primera vez para ingresar las credenciales de autenticacion:

blt

Estamos listos para twittear desde la , la sintaxis es la siguiente:

blt “tweet que deseas publicar”

Es algo sencillo si  necesitan mas info sobre el manejo de blt pueden consultar  la ayuda  con el parametro -h

Usando el poder de BASH

Teniendo claro como twitteamos desde la , podemos ir un poco mas alla y  aprender a publicar algunas estadisticas de nuestra PC, o si lo desean como twittear el contenido de cualquier o la salida de cualquier comando.

Algunos ejemplos simples:

blt ” Este es mi paswd $(cat /etc/passwd)” // muy recomendado xD

blt “Mi tarjeta inalambria es $(lspci |grep Network)”

Ahora que ya sabemos la sintaxis podemos  intentar publicar o twittear algo mas complejo e interesante, como por ejemplo:

blt "datos PC.. Memoria usada: $(free |grep Mem |cut -b 21-30)kb |carga cpu: $(cat /proc/loadavg | cut -b 1-5) | procesos: $(cat /proc/loadavg | cut -b 15-16) | uptime: $(uptime |cut -b 14-18) #estadisticasPC"

En la siguiente instruccion, sacamos algunas estadistiscas de nuestra PC, como:

  • Memoria RAM
  • Carga de CPU
  • Numero de procesos
  • Tiempo de encendido de nuestro computador

Algunas cosas que se deben tener en cuenta:

  1. El contenido del tweet debe tener menos de 140 caracteres por que sino,  no se publicara nada.
  2. Cada comando no necesita separador, en el ejemplo anterior puse | entre cada dato simplemente por estetica

Y eso es todo, si quisieramos podriamos hacer un script para que las estadisticas de nuestro PC se publiquen cada  cierto tiempo. Con esto creo que se abre un mundo de posibilidades para aquellos que son fanaticos de esta red social.

Openfire termina la conexión de los usuarios!!!

Posted by mirphak On diciembre - 31 - 2009

En  RincónInformático nuestro amigo SpiderM@N  ya ha hablado de OpenFire, instalación, configuración, ventajas.

Uno llega a acostumbrarse a que OpenFire no moleste, y de hecho no lo hace, los problemas se presentan por configuraciones no óptimas,  por ejemplo,   la memoria de  Java por defecto para OpenFire  resulta suficiente  cuando se tienen pocos usuarios,   en caso contrario  estamos en problemas, tendremos a los usuarios  encima diciendo que no pueden  “chatiarr”, que  de repente  se les cae la conexión.

memoria Openfire termina la conexión de los usuarios!!!

Para solucionar ésto solo basta con modificar el script  openfire y cambiar los parámetros de la máquina virtual:

primero detenemos el servicio.

La ruta es  /opt/openfire/bin/ , editamos la línea

INSTALL4J_ADD_VM_PARAMS=”-Xms128m -Xmx256m

con el valor minimo y máximo en Megas.

Guardamos, iniciamos el servicio y listo.

mem2 Openfire termina la conexión de los usuarios!!!

Script para enviar Spam o MailBomber

Posted by Epsilon On diciembre - 27 - 2009

Algunas veces es necesario hacer un poco de spam por diferentes motivos: SEO, dinero etc.  estando en algun canal de IRC algún usuario (que no recuerdo su nombre) compartio este script el cual sirve para enviar un mensaje a muchos destinatarios diferentes, (si tienen maldad, se imaginan si mandamos el mismo mensaje a  un solo destinatario?).  Su funcionamiento es muy sencillo, solo necesitamos un de texto  con todos los destinatarios y tener python instalado en nuestro PC . Después de tener todo esto listo, solo basta ejecutar esto en una :

chmod 777 mail.py
./mail.py destinatarios.txt

Al ejecutarlo el script nos pedirá  los datos de autenticación de la cuenta que va hacer el papel de remitente,  el numero de mails a enviar (parametro que no funciona como debería hacerlo),  el asunto y cuerpo del mensaje, inmediatamente  le entregamos estos datos, el script empieza hacer su trabajo. El código de este programa es el siguiente:

#!/usr/bin/python
################################################################
#       .___             __          _______       .___        #
#     __| _/____ _______|  | __ ____ \   _  \    __| _/____    #
#    / __ |\__  \\_  __ \  |/ // ___\/  /_\  \  / __ |/ __ \   #
#   / /_/ | / __ \|  | \/    <\  \___\  \_/   \/ /_/ \  ___/   #
#   \____ |(______/__|  |__|_ \\_____>\_____  /\_____|\____\   #
#        \/                  \/             \/                 #
#                   ___________   ______  _  __                #
#                 _/ ___\_  __ \_/ __ \ \/ \/ /                #
#                 \  \___|  | \/\  ___/\     /                 #
#                  \___  >__|    \___  >\/\_/                  #
#      est.2007        \/            \/   forum.darkc0de.com   #
#                                         www.beenuarora.com   #
################################################################
#Thanks to low1z for initial script
#Greetz to all darkc0de memeber

import os, smtplib, mimetypes,time,sys,urllib,urllib2
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText 

def sendMail(gmailUser,gmailPassword,recipient,subject,text): 

 msg = MIMEMultipart()
 msg['From'] = gmailUser
 msg['To'] = recipient
 msg['Subject'] = subject
 msg.attach(MIMEText(text))
 mailServer = smtplib.SMTP('smtp.gmail.com', 587)
 mailServer.ehlo()
 mailServer.starttls()
 mailServer.ehlo()
 mailServer.login(gmailUser, gmailPassword)
 mailServer.sendmail(gmailUser, recipient, msg.as_string())
 mailServer.close()
 print('[-] Sent email to %s :' % recipient)
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 SysCls = 'clear'
elif sys.platform == 'win32' or sys.platform == 'dos' or sys.platform[0:5] == '-dos':
 SysCls = 'cls'
else:
 SysCls = 'unknown'

os.system(SysCls)

print "\n|---------------------------------------------------------------|"
print "| beenudel1986[@]gmail[dot]com                                  |"
print "| Spomb v1.0                                                    |"
print "|   Do Visit     www.BeenuArora.com      &        darkc0de.com  |"
print "|---------------------------------------------------------------|\n"

if len(sys.argv) < 2:
 print "\nUsage: ./spammer.py list.txt"
 print "Ex: ./spomb.py list.txt\n"
 sys.exit(1)

list= sys.argv[1]
try:

 hosts= open(list,'r')
except (IOError):
 print " \n\nSpamming List Missing ..Exiting :( "
 sys.exit(0)

count= raw_input('Enter the Number of mails :')
gmailUser = raw_input('Enter Your Email ID :')
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 os.system('stty -echo')
gmailPassword = raw_input('Enter Your Gmail Password :')
list= sys.argv[1]
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 os.system('stty echo')
subject = raw_input('\nSubject :')
text = raw_input('Text :')
for a in range (0,int(count)):
 for host in hosts:
 recipient=host[:-1]
 try:
 sendMail(gmailUser,gmailPassword,recipient,subject,text)
 time.sleep(10)
 except(urllib2.URLError, socket.timeout, socket.gaierror, socket.error):
 print ('Something Went Wrong ..Check Manually for Error\n')
 except(KeyboardInterrupt):
 pass
print ('\n\nDone Mailing...')

Tuve la oportunidad de probarlo, y hay varias cosas negativas que aclarar:

  1. Como dije anteriormente el parametro de numeros de mensajes no funciona adecuadamente.
  2. Despues de un tiempo enviando correos,  gmail cerro la , y no se podia conectar  despues de 3 horas mas, al parecer gmail bloquea la cuenta por tratarse de spam

No tengo nada mas que decir, espero que lo prueben y me cuenten sus comentarios