Как сделать сниффер на php

Пишем простой сниффер под Windows

Введение

Цель: написать программу, которая будет захватывать сетевой трафик (Ethernet, WiFi), передающийся по протоколу IP.
Средства: Visual Studio 2005 или выше.
Подход, который здесь описан, не принадлежит лично автору и успешно применяется во многих коммерческих, а также категорически бесплатных программах (привет, GPL).
Сей труд предназначен прежде всего для новичков в сетевом программровании, которые, однако, имеют хотя бы базовые знания в области сокетов вообще, и windows-сокетов в частности. Здесь я часто буду писать общеизвестные вещи, потому что предметная область специфическая, если что-то пропустить — в голове будет каша.

Надеюсь, Вам будет интересно.

Теория (читать не обязательно, но желательно)

В данный момент подавляющее большинство современных информационных сетей базируются на фундаменте стека протоколов TCP/IP. Стек протоколов TCP/IP (англ. Transmission Control Protocol/Internet Protocol) — собирательное название для сетевых протоколов разных уровней, используемых в сетях. В настоящей статье нас будет интересовать в основном протокол IP — маршрутизируемый сетевой протокол, используемый для негарантированной доставки данных, разделяемых на так называемые пакеты (более верный термин – дейтаграмма) от одного узла сети к другому.
Особый интерес для нас представляют IP-пакеты, предназначенные для передачи информации. Это достаточно высокий уровень сетевой OSI-модели данных, когда можно обстрагироваться от устройства и среды передачи данных, оперируя лишь логическим представлением.
Совершенно логичным является то обстоятельство, что рано или поздно должны были появится инструменты для перехвата, контроля, учета и анализа сетевого трафика. Такие средства обычно называется анализаторами трафика, пакетными анализаторыми или снифферами (от англ. to sniff — нюхать). Это — сетевой анализатор трафика, программа или программно-аппаратное устройство, предназначенное для перехвата и последующего анализа, либо только анализа сетевого трафика, предназначенного для других узлов. [1]

Практика (разговор по существу)

На данный момент создано достаточно много программного обеспечения для прослушивания трафика. Наиболее известный из них: Wireshark. Естественно, пожинать его лавры цель не стоит — нас интересует задача перехвата трафика методом обычного «прослушивания» сетевого интерфейса. Важно понимать, что мы не собираемся заниматься взломом и перехватывать чужой трафик. Нужно всего лишь просматривать и анализировать трафик, который проходит через наш хост.

Как так? Очень просто.
Ключевым шагом в превращении простого сетевого приложения в сетевой анализатор является переключение сетевого интерфейса в режим прослушивания (promiscuous mode), что и позволит ему получать пакеты, адресованные другим интерфейсам в сети. Этот режим заставляют сетевую плату принимать все кадры, вне зависимости от того, кому они адресованы в сети. [2]

Начиная с Windows 2000 (NT 5.0) создать программу для прослушивания сегмента сети стало очень просто, т.к. ее сетевой драйвер позволяет перевести сокет в режим приёма всех пакетов.

Включение неразборчивого режима

Наша программа оперирует IP-пакетами, и использует библиотеку Windows Sockets версии 2.2 и «сырые» сокеты (raw sockets). Для того чтобы получить прямой доступ к IP-пакету, сокет нужно создавать следующим образом:

Создание сырого сокета

Здесь вместо константы SOCK_STREAM (протокол TCP) или SOCK_DGRAM (протокол UDP), мы используем значение SOCK_RAW. Вообще говоря, работа с raw sockets интересна не только с точки зрения захвата трафика. Фактически, мы получаем полный контроль за формированием пакета. Вернее, формируем его вручную, что позволяет, например, послать специфический ICMP-пакет…

Идем дальше. Известно, что IP-пакет состоит из заголовка, служебной информации и, собственно, данных. Советую заглянуть сюда, чтобы освежит знания. Опишем в виде структуры IP-заголовок (спасибо отличной статье на RSDN [3]):

Описание структуры IP-пакета

Главная функция алгоритма прослушивания будет выглядеть следующим образом:

Функция захвата одного пакета

Здесь все просто: получаем порцию данных с помощью стандартной функции socket-функции recv, а затем копируем их в структуру типа IPHeader.
И, наконец, запускаем бесконечный цикл захвата пакетов:

Захватым все пакеты, которые попадут на наш сетевой интерфейс
Немного оффтопика

Здесь и далее у некоторых важных функций и переменных автор сделал префкис RS_ (от Raw Sockets). Проект делал 3-4 года назад, и была шальная мысль написать полноценную библиотеку для работы с сырыми сокетами. Как это часто бывает, после получения сколь-нибудь значимых(для автора) результатов, энтузиазм угас, и дальше учебного примера дело не полшло.

В принципе, можно пойти дальше, и описать заголовки всех последующих протоколов, находящихся выше. Для этого необходимо анализировать поле protocol в структуре IPHeader. Посмотрите на пример кода (да, там должен быть switch, чёрт возьми!), где происходит раскрашивание заголовка в зависимости от того, какой протокол имеет пакет, инкапсулированный в IP:

Однако это существенно выходит за рамки этой статьи. Для нашего учебного примера вполне достаточно будет посмотреть ip-адреса хостов, с которых и на которые идет трафик, и посчитать его количество в единицу времени(готовая программа в архиве в конце статьи).

Читайте также:  Как сделать в фотошопе синяки

Для того, чтобы отобразить данные IP-заголовка, необходимо реализовать функцию преобразования заголовка (но не данных) дейтаграммы в строку. В качестве примера реализации, можно предложить такой вариант:

Преобразование IP-заголовка в строку

На основании приведенных выше базовых сведений, получается вот такая небольшая программа (жуткое название ss, сокр. от англ. simple sniffer), реализующая локальное прослушивание IP-трафика. Интерфейс ее приведен ниже на рисунке.

8992c5d81ee4e262938082ed3cd3a067

Исходный и бинарный код предоставляю как есть, таким как он был несколько лет назад. Сейчас мне на него страшно смотреть, и все же, он вполне читабельный (конечно же, нельзя быть таким самоуверенным). Для компиляции будет достаточно даже Visual Studio Express 2005.

upd: По совету Weageoo, выложил на гитхаб.

Источник

CodeSniffer и PhpEd

На хабре уже ни раз встречалось описание интструмента PHP_CodeSniffer, который используется для проверки соответствия написанного кода стандартам кодирования. Инструмент очень удобный и полезный, думаю, спорить никто не станет. В интернете есть статьи, которые описывают как интергрировать его с системой контроля версий, чтобы осуществлять проверку перед очередным коммитом, но мне захотелось прикрутить его к своей IDE, чтобы проверять код во время его написания.

Исторически сложилось, что в работе я использую IDE от Nusphere – PhpEd. PhpEd позволяет подключать к себе скрипты на php, которые могут выполнять произвольные операции над кодом в редакторе. Скрипт также может запустить внешнюю программу и вернуть данные со стандартного потока вывода непосредственно в редактор кода.

На форуме Nusphere есть целый раздел, посвященный скриптам автоматизации

Об этой возможности я давно знал, но она не совсем подходит для использования CodeSniffer. Объясню почему. Мы можем перенаправить все данные, полученные в результате анализа нашего кода в отладочное окно редактора, но это будет всего лишь статичный текст. Номера строк с ошибками являются тоже обычным текстом и перемещаться по коду будет невозможно. Придется глазками смотреть номер строки с ошибкой, переходить руками на эту строку и править ее. Разумеется, это дело мне совершенно не нравилось.

В лог окне редактора я заметил колонку location. Скорее всего это то, что мне было нужно, но как вывести данные в эту колонку я не знал.
Перерыв весь форум разработчиков, я нашел несколько тем, посвященных данной проблеме, но везде никаких ответов и рецептов не было. Я уже было отчаялся, как наткнулся на следующее сообщение.

Иными словами, если сформировать выходную строку в соответствии с данным регулярным выражением, то IDE поймет, что мы передаем ей информацию о файле и номере строки в нем. Задача сводилась к тому, чтобы запустить CodeSniffer, получить от него данные, немного переформатировать вывод и направить в окно логов редактора, что является сущим пустяком.

Теперь все по шагам:

0. Устанавливаем pear для php, который идет в составе PhpEd
c:\Program Files\NuSphere\PhpED\php5> go-pear.bat

и пакет php_sniffer
c:\Program Files\NuSphere\PhpED\php5> pear install php_sniffer

1. Качаем мой небольшой класс-обертку над CodeSniffer. Кладем его, скажем, в
c:\Program Files\NuSphere\PhpED\scripts\

Settings > Tools > Integration
Создаем новое меню «Scripts»
Создаем новое подменю «CodeSniffer»

3. Редактируем созданный пункт:

— Execute with «Shell»
— Command line:
«c:\Program Files\NuSphere\PhpED\php5\php.exe» «c:\Program Files\NuSphere\PhpED\scripts\codesnifferwrapper.php» «@Fname@»
— Shortcut: CTL-ALT-0 (или любой удобный)
— Ставим крестики в следующих пунктах:
Show this command in Workspace popup – for files
Show this command in Explorer popup – for files
Show this command in File Bar popup
Redirect Output Stream to log window

Сохраняем результат, открываем любой php файл, жмем назначенное сочетание клавиш и любуемся.

Источник

Как сделать сниффер на php

Автоформатирование кода: PHP CodeSniffer и PHP CS Fixer

На laracasts есть замечательное видео по этой теме в контексте PhpStorm, здесь же пойдёт речь о том, чего не рассказывал в том видео Джефри (ну а если хотите настроить фиксер под Sublime, смотрите эту статью).

PHP CodeSniffer

Давайте начнём с PHP CodeSniffer. Этот инструмент поможет выявить нарушения форматирования, при надлежащей настройке PhpStorm будет вас об этом информировать путём выделения проблемных частей кода. Кроме всего прочего мы можем воспользоваться консолью для вывода информации об ошибках.

Установка
Используемый стандарт

Также хорошенько подумайте о том, достаточно ли набора правил стандарта. Вполне возможно, что ответ будет отрицательным. Перечитайте документацию, и добавьте те, которые Вам понадобятся.

Можно каждый раз в консоли руками пописывать какие-то дополнительные правила или условия, указывать стандарт и т.д. Но, мы же понимаем, что это не оптимальный вариант. Поэтому, в корне проекта создадим файл phpcs.xml и добавим туда следующее (в качестве примера использую код из текущего проекта):

Пояснения:

Основные команды

Вывести список установленных стандартов:

Вывести список снифов, используемых в конкретном стандарте:

Проверить форматирование файла file.php :

Проверить весь проект :

Проверить весь проект с выводом информации о том, где конткретно были встречены ошибки:

Вывести код-репорт, т.е. отчёт со сниппетами кода, где были обнаружены ошибки:

Есть ещё и другие команды, но, по моему мнению, вполне хватает перечисленных. Справедливости ради стоит отметить, что PHP CoedSniffer также включает и code beautifier fixer, т.е. можно исправить ошибки (читай отформатировать) командой:

но я всё же предпочитаю php-cs-fixer

PHP CS Fixer

Установка

Опять-таки подумайте устанвливать интсрумент глобально, или для каждого проекта. Второй вариант:

Если выбираете глобальную установку, убедитесь, что в переменную PATH добавлен путь к бинарным файлам composer-a. Проверьте это командой:

Читайте также:  Как сделать самодельную вышку
Пользовательские правила
Автоформат
Основные команды

Вывести список команд:

Вывести описание правил входящих в конкретный стандарт:

И, как уже был сказано, отформатировать (для разнообразия укажем стандарт Symfony):

В случае с fixer-ом я предпочитаю использовать не консоль, а настроить PhpStorm для использования этого инструмента, добавить горячие клавиши и использовать по месту в конкретных файлах.

Git pre-commit hook

Подведём итоги. Мы используем:

Внимание: php-cs-fixer исправит только те ошибки, которые он может исправить, не более. Например, если у Вас не написан phpdoc, fixer за вас его не напишет. Помните об этом.

Источник

Wi-Fi Sniffer для Windows: перехват трафика, логинов, паролей, Cookies в локальной сети

ВНИМАНИЕ! Данная статья написана только в ознакомительных целях для специалистов в области IT безопасности. Перехват трафика был на примере собственных устройств в личной локальной сети. Перехват и использование личных данных может караться законом, поэтому мы не призываем использовать данную статью во вред окружающих. Мир во всем мире, помогаем друг другу!

Всем привет! В статье мы поговорим про WiFi сниффер. Вообще данный тип программ предназначен исключительно для перехвата трафика в локальной сети. Далее без разницы как именно жертва подключена к маршрутизатору, по кабелю или по Wi-Fi. Хочу показать перехват трафика на примере интересной программы «Intercepter-NG». Почему я выбрал именно её? Дело в том, что это sniffer приложение написана специально для Windows имеет достаточно приветливый интерфейс и проста в использовании. Да и Linux есть не у всех.

Возможности Intercepter-NG

Как вы знаете, в локальной сети постоянно используется обмен данными между роутером и конечным клиентом. При желании эти данные можно перехватывать и использовать в своих целях. Например, можно перехватить куки, пароли или другие интересные данные. Происходит все очень просто – компьютер отправляет запрос в интернет и получает данные вместе с ответом от центрального шлюза или маршрутизатора.

Программа запускает определенный режим, в котором компьютер клиент начинает отправлять запросы с данными не на шлюз, а именно на устройство с программой. То есть можно сказать он путает роутер с компьютером злоумышленника. Данная атака ещё называется ARP спуфингом. Далее, со второго компа, все данные используются в свои целях.

После получения данных начинается процесс сниффинга, когда программа пытается выудить из пакетов нужную информацию: пароли, логики, конечные web-ресурс, посещаемые страницы в интернете и даже переписку в мессенджерах. Но есть небольшой минус в том, что такая картина отлично работает при незашифрованных данных. При запросе на HTTPS страницы нужны танцы с бубном. Например, программа может при запросе клиента на DNS сервер, подкладывать адрес своего фальшивого сайта, где он может ввести логин и пароль для входа.

Обычная атака

Скачиваем архив с версией или «v». Далее устанавливать ничего не нужно и достаточно просто разархивировать содержимое.

Как видите тут можно только увидеть и засечь перехваченные ключи и имена пользователей, а также те сайты, которые посетила цель.

Перехват Cookies

Если кто не знает, то куки это временные данные, которые позволяют нам постоянно не вводить учетные данные на форумах, в социальных сетях и других сайтах. Можно сказать – это такой временный пропуск. Вот их также можно перехватывать с помощью этого приложения.

Все делается достаточно просто, после запуска обычной атаки переходим в третью вкладку, нажимаем правой кнопкой по свободному полю и выбираем «Show Cookies».

Вы должны увидеть нужные Cookies. Использовать их очень просто – просто нажимаем по нужному сайту правой кнопочкой и далее выбираем «Open in browser». После этого откроется именно сайт с чужой учетной страницы.

Получение логина и пароля

Скорее всего после запуска программы клиент уже будет сидеть в той или иной учетной записи. Но можно заставить его снова ввести логин и пароль. Так как куки сами по себе не вечные – то это вполне нормальная практика. Для этого используется программа «Cookie Killer». После запуска у клиента полностью удаляются старые куки и ему приходится вводить логин и пароль заново, вот тут и включается перехват. По этому поводу есть отдельная видео инструкция:

Источник

Создание сниффера на Delphi

cover 280 210

Снифер – тулза номер один для хакера. Поснифать и проанализировать трафик, выудить из него пароли к почтовому ящику своего соседа Васи Пупкина – типичные задачи, которые возлагают на подобные программы. Etherscan Analyzer, EtherSnoop, Ettercap, ZxSniffer – хорошо зарекомендовавшие себя сниферы. Об их правильном использовании не раз говорилось в нашем журнале. Юзать эти проги, несомненно, круто, но намного круче написать свой 31337-й снифер, который будет обладать тем функционалом, который нужен именно тебе и только тебе!

Теория сниффера

Итак, начнем с определения. Снифер – это программа или аппаратное устройство для перехвата сетевого трафика. Аппаратные сниферы нас сегодня интересовать не будут, а программные мы рассмотрим подробнее.

Сниферы условно можно разделить по способу прослушивания сети. Прослушивание бывает активным и пассивным. Сниферы, использующие этот пассивное прослушивание, просто переводят сетевую карту в режим promiscuous (неразборчивый). В этом случае становится возможным получить все пакеты в сегменте Ethernet. Сразу хочу развеять возможно возникшие иллюзии. Все пакеты ты сможешь увидеть только в том случае, если сеть построена на так называемых хабах (hub). В сетях, где используются устройства типа свитча (switch), такие фокусы не пройдут. Почему? Секрет кроется в работе сетевого устройства. Хабы – довольно безграмотные жестянки, одним словом, двоечники. Все пришедшие данные с одного порта они передают на все остальные, то есть даже не задумываясь о том, на каком порту находится получатель, для которого эти данные, собственно, и были предназначены. Свитчи – это своего рода отличники. Они с немецкой дотошностью проверяют заголовки пришедших кадров данных и пересылают их в другой сегмент только в том случае, если в нем есть истинный получатель. Сниферы, применяющие активное прослушивания сети, более продвинуты. Для перехвата тяжелого трафика они используют разные способы. Наиболее известные из них:

Читайте также:  Как сделать клочок шелка в майнкрафте

Routing attacks. Этот способ основан на отправке жертве фальшивых сообщений ICMP Redirect. Они используются роутерами для сообщения узлу адреса нового роутера, но с более коротким путем для запрашиваемого узла. Таким образом, можно в качестве адреса нового роутера подставить адрес своей тачки, и все пакеты будут проходить через твой комп. Применение этого способа осложняется игнорированием современными ОС сообщений ICMP Redirect.

Зачем нужен хакеру пассивный снифинг? А вот зачем! Многие злодеи наживляют своим врагам тайные и неопределяемые антивирусами (ввиду самописности) трояны, которые собирают логи и отсылают информацию своему хозяину.

Снифер с точки зрения кодера

С позиции программирования наиболее простыми в реализации являются сниферы, использующие пассивное прослушивание. Сейчас можно найти кучу готовых драйверов, которые занимаются перехватом трафика. Все, что остается, – изучить хелп по работе с ними и написать свою программу-интерфейс. Подобным образом и работают многие известные сниферы. Если ты думаешь, что это несерьезно, то спешу огорчить тебя. Хороший снифер должен уметь не только захватывать данные, но и разбирать их, а это уже достаточно серьезная задача.

Из драйверов для перехвата трафика чаще всего используется WinPCap. Этот драйвер один из немногих поддерживает все NT версии Windows, поэтому его можно юзать, не опасаясь, что твое творение где-то вылетит с ошибкой.

Если тебе не хочется заморачиваться с драйверами, можно пойти более простым путем – использовать raw sockets (сырые сокеты). Такой тип снифера реализовать тоже достаточно просто, а если учесть, что в рубрике «Кодинг» я уже неоднократно приводил примеры сетевых приложений с использованием WinSock API, то задача становится и вовсе нетривиальной.

winpcap

Универсальные компоненты

Эта полезная библиотека состоит из двух главных невизуальных компонентов: TMonitorPCap (взаимодействует с WinPCap) и TMonitorSocket (использует сырые сокеты). Оба компонента написаны достаточно хорошо, и глюков при их использовании замечено не было. Давай рассмотрим их возможности.

TMonitorSocket

table

Первый параметр пояснять, я думаю, не нужно, поскольку если ты программируешь на Delphi, то знать это просто обязан, а вот второй рассмотрим подробнее. Во втором параметре передается структура типа TPacketInfo, в которой и хранятся все захваченные данные. Структура описана так:

Разберем поля структуры более подробно:

От теории к практике

Пришло время закончить с теорией и перейти к реальной работе. Сейчас мы с тобой напишем самый настоящий снифер в, казалось бы, неприспособленной для этого среде. Запускай Delphi и создавай новый проект. Как создашь, сразу же добавь в Uses имена модулей компонентов от MSIPMC. В своем проекте я добавил monsock, monpcap, WSocket, packet32, pcap, Winsock, magsubs1, Packhdrs.

Делаем форму

Для сегодняшнего примера я сделал простенькую форму, которая представлена на одном из рисунков. По всей форме я растянул TPageControll и создал две закладки: «Настройки» и «Лог».

form1

form2

Закрой новоиспеченную форму и перейди в раздел private. Объяви в нем следующие переменные и процедуры:

Процедура Initialize()

После получения очередной порции данных управление будет передаваться процедуре GetPacket(). Код процедуры приведен во врезке. Перед выводом данных в лог нужно проверить состояние флажка cbFullData («Выводить полученные данные целиком»). Если он тру, тогда будем добавлять в лог все захваченные пакеты. Получаем сами данные:

form3

Теперь их необходимо как-то разобрать. Сначала я пропускаю данные через функцию StringRemCntls() из модуля magsubs1.pas. Эта функция заменяет управляющие коды пробелами. Это делать не обязательно, но желательно, поскольку читабельность полученной информации заметно возрастет.

Когда с управляющими кодами будет покончено, переходим к более детальному разбору. В зависимости от текущего типа данных я вызываю всем известную функцию format, которая форматирует строку в соответствии с шаблоном. Шаблон у меня определен в константе sPL:

Отформатированные данные добавляются в RichEdit. Наверняка ты заметил имена неизвестных тебе функций вроде IPToStr(), GetICMPType() и т.п. Все они описаны в модулях packhdrs.pas и magsubs1.pas и призваны облегчить процесс разработки. Например, функция IpToStr() позволяет выудить из структуры TInAddr IP-адрес в виде строки. Заглянув в модули, нашел интересные функции, которые могут пригодиться не только при программировании сниферов, но и при разработке других программ. Советую и тебе хорошенько покопаться в них.

Финальный тест

Возьми пример с нашего диска и посмотри код запуска монитора. Перепиши/скопируй его в свой проект и запусти, пора тестировать снифер в боевых условиях. Во время тестирования программы у меня на всю катушку работал torrent-клиент и Opera. Если хорошенько присмотреться к логу, то можно увидеть трафик браузера, который был поснифан. Можно считать тест оконченным и успешно пройденным.

Источник

Поделиться с друзьями
admin
О том как сделать своими руками
Adblock
detector