Pulapka na sieciowego lamera |
W prawie kazdej sieci znajdzie sie szkodnik, ktory skanuje porty komputerow najczesciej w poszukiwaniu trojana.Dobrym pomyslem jest zastawic na niego pulapke, czyli atrape trojana, ktora loguje jego IP.Do tego artu wymagane sa podstawy C i gniazd sieciowych w C lub mozna sobie po prostu skopiowac kodzik, skompilowac i odpalic.Rzeczj jasna mowie tutaj o systemach typu unixa.
A wiec najbardziej znanym trojanem jest chyba netbus, ktory uruchamia swoj wirtualny serwer na komputerze ofiary, nasluchujac na porcie 12345.Nie bede tutaj mowil jak dziala trojan, bo to nie wazne, wazny jest ten port :).
Wiec piszemy kodzik, ponizej kodu go omowie, aby bylo czytelniej.Kod rzecz jasna wyskrobalem sam :) - dostepny na mojej stronce ;]].
Kod:
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <unistd.h>
int main()
{
FILE *logi;
int gniazdo,gniazdo2,wielkosc;
struct sockaddr_in adres,adres2;
gniazdo=socket(AF_INET,SOCK_STREAM,0);
adres.sin_family=AF_INET;
adres.sin_addr.s_addr=INADDR_ANY;
adres.sin_port=htons(12345);
memset(adres.sin_zero,'\0',8);
bind(gniazdo,(struct sockaddr *)&adres,sizeof(struct sockaddr_in));
listen(gniazdo,1);
wielkosc=sizeof(struct sockaddr_in);
char wiadomosc[]="witaj stara krowo, twoje ip zostalo zapisane w logach, hakierze, netbus na linuxie...;]]]";
int rozmiar=sizeof(wiadomosc);
for(;;)
{
gniazdo2=accept(gniazdo,(struct sockaddr*)&adres2,&wielkosc);
if(gniazdo2>0)
{
send(gniazdo2,wiadomosc,rozmiar,0);
logi=fopen("log.txt","a+");
fprintf(logi,"%s\n",inet_ntoa(adres2.sin_addr.s_addr));
fclose(logi);
}
}
close(gniazdo2);
}
To teraz krotkie objasnieje :)
Tych wszystkich include nie bede omawial...
Kod:
adres.sin_addr.s_addr=INADDR_ANY;
Co to znaczy?
Ze adres do polaczenia moze miec kazdy adres, INADDR_ANY jest rowny 127.0.0.1 czyli localhostowi, ale!! Ale jak bysmy dali kod
Kod:
adres.sin_addr.s_addr=inet_addr("127.0.0.1");/code2]
To z naszym serwerem moglby sie polaczyc tylko nasz komputer, bo w tym wypadku nasz komputer jest localhostem, zas INADDR_ANY przyjmuje polaczenie (ze tak powiem ;] ) od komputera ktory sie laczy.
Nastepna linijka:
Kod:
adres.sin_port=htons(12345);
Ustawianie portu na port 12345.
Gdy ktos bedzie skanowal, to skaner pobierze informacje ze swojej bazy danych na temat portu 12345 i powie nam ze to netbus(trojan).
Kod:
char wiadomosc[]="witaj stara krowo, twoje ip zostalo zapisane w logach, hakierze, netbus na linuxie...;]]]";
int rozmiar=sizeof(wiadomosc);
Tutaj deklarujemy wiadomosc o tresci witaj stara krowo...A rozmiar jest wielkoscia tej wiadomosci.
Kod:
for(;;)
{
gniazdo2=accept(gniazdo,(struct sockaddr*)&adres2,&wielkosc);
Dla nieskonczonosci(puki dziala program, bo jak wylaczymy to juz nie bedzie) akceptuj polaczenie na gniezdzie(nasza zmienna), adresie 2,itd.
Kod:
if(gniazdo2>0)
{
send(gniazdo2,wiadomosc,rozmiar,0);
logi=fopen("log.txt","a+");
fprintf(logi,"%s\n",inet_ntoa(adres2.sin_addr.s_addr));
fclose(logi);
}
Jezeli na na gniazdo2, zwraca wartosc wieksza niz 0(tzn ze ktos sie polaczyl) to wysylamy mu wiadomosc(zrobcie man send i man inne funkcje to bedzie wszystko jasne), nastepnie otwieramy plik log.txt do dopisywania i notujemy w nim adres ip adresu 2 czyli naszego hakerzyka, zamykamy plik, a program dziala dalej i czeka na kolejnego chakera :).
Pozdro, Sark.