Авторские статьи Сниффер для начинающих

Discussion in 'Статьи' started by cash$$$, 30 Mar 2008.

  1. cash$$$

    cash$$$ Banned

    Joined:
    6 Jan 2008
    Messages:
    385
    Likes Received:
    246
    Reputations:
    10
    Эта статья рассчитана, для новичков. И так начнем.

    Что такое сниффер

    Снифферы - это программы, которые перехватывают весь сетевой трафик.
    Они могут перехватывать и расшифровывать имена и пароли пользователей, конфиденциальную информацию, нарушать работу отдельных компьютеров и сети в целом. Известно, что в большинстве протоколов передачи данных ( FTP , POP, HTTP, telnet ) секретная информация между клиентом и сервером передаётся открытым текстом. Поэтому, не составляет большого труда получить доступ к такой информации.

    Методы применения sniff'инга

    Sniff'инг - один из наиболее популярных видов атаки. Sniff'инг - один из наиболее популярных видов атаки, используемых хакерами. Наибольшую известность приобрел сниффер Esniff.c - очень маленький, разработанный для работы на SunOS, занимался тем, что вылавливал первые 300 байтов telnet, ftp и rlogin сессий.
    Существует множество ethernet sniff'еров, здесь лишь некоторые из них:
    sniffers для систем Unix
    SunOS: Esniff.c | Etherfind | Snoop (ftp://playground.sun.com/)
    DEC Unix: tcpdump
    OSF Unix: faq on BPF suppport
    DEC Ultrix: tcpdump | faq on BPF suppport
    Solaris: tcpdump | Snoop ( ftp://playground.sun.com/) | solsniffer.c
    FreeBSD: ftp://gatekeeper.dec.com/pub/BSD/FreeBSD/FreeBSD-current/src/contrib/tcpdump/
    NetBSD: ftp://gatekeeper.dec.com/pub/BSD/NetBSD/NetBSD-current/src/usr.sbin/
    Linux: ftp://sunsite.unc.edu/pub/Linux/system/Network/management/ | Linsniffer 0.03.9
    SGI Irix: nfswatch | Etherman | tcpdump
    HP/UX: nettl (monitor) | netfmt (display) | nfswatch

    Основы передачи данных в сети

    Каждому устройству в сети Ethernet, соответствует уникальный шестибайтовый MAC -адрес ( Media Access Control). Единицей передачи данных, в такой сети является кадр ( frame ), который имеет определённую структуру и несёт в себе информацию о получателе, отправителе и самих данных.

    Кадр может иметь размер, примерно от 60 до 1514 байт, из них первые 14 байт являются служебными. Когда требуется передать большое количество данных, они разбиваются на фрагменты и последовательно направляются в сеть. Кадр передаётся по сети и получает его каждое устройство этой сети. Значение поля структуры с именем type определяет тип и версию в кадре. Завершающая секция кадра служит для проверки целостности передаваемых данных и использует код циклического контроля ( CRC 32 - cyclic redundancy check ). Это мощная хэш-функция, для выявления искажённости числовых данных. Обычно она аппаратно реализована в сетевой плате.
    В качестве данных может быть IP -пакет или ARP -пакет. ARP ( address resolution protocol ) - это служебный вспомогательный протокол, который осуществляет, трансляцию MAC -адресов в логические IP -адреса на основе широковещательной рассылки запросов.

    Для доставки пакетов в сети, нужно определить адрес узла назначения. Для этого существует ARP - протокол автоматического определения адресов ( IP <=> MAC ). Когда компьютеру нужно начать обмен данными, он ищет MAC -адрес получателя, затем IP -адрес в ARP-таблице. Если для нужного IP-адреса не найден соответствующий MAC -адрес, то посылается широковещательный запрос ARP, содержащий искомый IP-адрес назначения, а MAC-адрес для широковещательной рассылки заполнен единицами FF:FF:FF:FF:FF:FF. Целевой хост узнает свой IP-адрес, обрабатывает запрос и посылает ответ. Система готова к пересылке данных по локальной сети.

    IP –пакеты

    Пакет состоит из заголовка, служебной информации ( options ) и данных. На языке Си этот заголовок выглядит, в виде такой структуры:

    Для нас особый интерес представляют поля заголовка protocol, src и dest . Два последних поля - это хорошо известные IP -адреса отправителя и получателя пакета. Например, шестнадцатеричное значение адреса 0 x 0000140 A соответствует 10.20.0.0.
    Поскольку в сети большое количество пакетов, то их лучше отфильтровывать. Критериями фильтрации могут быть IP -адреса, тип вышестоящего протокола ( TCP , UDP , ICMP , PUP ), а также содержимое пакета. Функции фильтрации полезны, так как не только ограничивают собираемую программой информацию, но и просто обеспечивают её нормальную работу.

    Структура программы для прослушивания сети

    Обладая знаниями, можно приступить к написанию программы, для Windows 2000. Каркас программы может состоять из частей:
    1. Драйвер для приёма всех пакетов ( уже установлен в ОС ).
    2. Буфер для накопления и обработки пакетов. Это может быть простейший массив из байтов.
    3. Анализатор пакетов - набор функций, для управления фильтрацией.
    4. Декодер-шифратор (например, декодировать данные из BASE64).
    5. Автоматизированный редактор пакетов, который по команде, вносит некоторые изменения в пакет и отправляет его обратно в сеть.
    В начале программы, использующей Windows Sockets, находится код инициализации сетевой библиотеки ( WSAStartup ). Затем следует создание сокета, определение имени и IP-адреса компьютера ( gethostbyname ), с которого запущена программа. В заключение устанавливаются параметры сокета ( bind ). Теперь осталось переключить сокет в режим приёма всех пакетов. Управляющая функция ioctlsocket с параметром-командой SIO_RCVALL включает promiscuous mode.

    PHP:
    #include <conio.h> 
    # include < winsock 2. h > 
    # define MAX _ PACKET _ SIZE     0 x 10000 
    // Буфер для приёма данных 
    static BYTE Buffer[MAX_PACKET_SIZE]; // 64 Kb 
    void main() 

      
    WSADATA     wsadata;   // Инициализация WinSock. 
      
    SOCKET      s;         // Слущающий сокет. 
      
    char         name[128]; // Имя хоста (компьютера). 
      
    HOSTENT*    phe;       // Информация о хосте. 
      
    SOCKADDR_IN sa;        // Адрес хоста 
      
    long         flag 1;  // Флаг PROMISC Вкл / выкл. 
      // инициализация 
      
    WSAStartup(MAKEWORD(2,2), &wsadata); 
      
    socketAF_INETSOCK_RAWIPPROTO_IP ); 
      
    gethostname(namesizeof (name)); 
      
    phe gethostbynamename ); 
      
    ZeroMemory( &sasizeof (sa) ); 
      
    sa.sin_family AF_INET
      
    sa.sin_addr.s_addr = (( struct in_addr *)phe->h_addr_list[0])->s_addr
      
    bind(s, (SOCKADDR *)&sasizeof (SOCKADDR)); 
      
      
    // Включение promiscuous mode. 
      
    ioctlsocket(sSIO_RCVALL, &flag); 
      
    // Приём IP -пакетов. 
      
    while ( !_kbhit() ) 
      { 
        
    int count
        
    count recvsBuffersizeof (Buffer), ); 
        
    // обработка IP- пакета 
        
    if ( count >= sizeof (IPHeader) ) 
        { 
          
    IPHeaderhdr = (IPHeader *)Buffer
          
    //что-то делаем с пакетом... 
        

      } 
      
    // Конец работы . 
      
    closesocket); 
      
    WSACleanup(); 

    Для успешной компиляции, следует библиотечный файл " ws 2_32. lib ". Вот и все, что хотелось рассказать в этой статье.

    Ps: Спасибо всем, кто уделил свое внимание… Удачи :)

    (с) cash$$$ !-> http://www1.hut.ru/aneksniff/sniffer2.html (прим. -=lebed=-)
     
    #1 cash$$$, 30 Mar 2008
    Last edited by a moderator: 30 Mar 2008
  2. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    В основной массе копипаст от сюда: http://www1.hut.ru/aneksniff/sniffer2.html
    Часть от сюда http://sp.sz.ru/sniffers_.html
    Ввиду практически отсутствующих своих слов автора в статье + чисто теоретическая направленность статьи непозволяет даже к сборнику копипаста её отнести, скорее всё же перенос -> чужие статьи (причина плагиат, копипаст, ссылки на используемый материал не приведены).