Pregunta

Necesito hacer un gran conjunto de pruebas en telnet. Estoy trabajando en algunas formas de detectar automáticamente los ataques de diccionario en nuestro servidor de correo electrónico, y luego reducirlos o ponerlos en una lista negra, etc.

Ahora estoy listo para realizar algunas pruebas y ver si mi trabajo da sus frutos. Pensé que solo descargaría alguna aplicación de script kiddy para ejecutar las pruebas. No puedo encontrar ninguno y los que puedo son malos o binarios y no configurables.

Tendré una lista de direcciones que genero en un bucle.

Quiero tomar $ address como argumento y hacer esto:

  

telnet myserver.com 25   hola some-string.com   correo de: me@me.com   rcpt a: $ dirección   salir

Dentro de eso, necesito probar algunas cosas, como, si habilito las listas grises, quiero fallar el script, ya que esa es mi primera contramedida. Supongo que en ese caso, simplemente tendría un tiempo de espera de telnet?

  • helo debería devolver una cadena de código que comience con 220, que es casi tan precisa como necesito para hacer esta prueba.

  • el correo de debería devolver 250, o buscar Aceptar sería suficiente

  • rctp to debería devolver 250 u Ok a veces, cuando envío un usuario válido, pero la mayoría de las veces enviaré una dirección incorrecta, así que busco la ausencia de 250 o bien.

  • Finalmente, enviaré un quit.

No puedo hacer que las condiciones y el registro se realicen en una situación interactiva. Miré a expect pero no pude hacerlo funcionar.

Mi código hasta ahora:

echo -e "helo foo\nmail from: foo.... | telnet example.com 25 | grep -i blah 

Esto no funcionó como se esperaba.

¿Qué puedo hacer para lograr mi objetivo?

¿Fue útil?

Solución

Me sorprende que Expect no lo haya hecho por ti, ya que está escrito para este tipo de cosas.

Perl es más simple en algunos aspectos y puede hacer un trabajo como este. Pero con Perl, no se molestará con Telnet, sino que puede abrir el puerto 25 directamente.

Si realmente desea ejercitar su servidor, obtenga la fuente para Siege y modifique para hablar SMTP en lugar de HTTP. Esa fue mi herramienta favorita para probar el rendimiento de Apache y estoy seguro de que no sería demasiado difícil hacerlo probar a Sendmail.

Otros consejos

Pruebe netcat: http://netcat.sourceforge.net/

Te permitirá enviar y recibir datos en un socket. telnet no es lo que quieres, es para uso interactivo.

esperar que envuelto en netcat (en lugar de telnet) sea probablemente la mejor apuesta inicial. Pero, si realmente necesitas esto, usaría perl. Hay bibliotecas de cliente SMTP para ello.

Puede usar la sintaxis de Bash para eso, por ejemplo,

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
grep Example <&${stream}

Aquí hay otro ejemplo de sintaxis que vuelca la lista de claves de memcached :

exec {memcache}<>/dev/tcp/localhost/11211; printf "stats items\nquit\n" >&${memcache}; cat <&${memcache}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top