Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Сокеты 4 (Использование DScan)

Автор: Danil
WEB-сайт: http://www.danil.dp.ua

- Миколо, ты що свою домашню строныцю на домен "ru" засувов?
- А шо?
- Так то ж "Раша"!
- От, гады! А я думав, Ридно Украина!

В этой статье я расскажу примеры использования моей программы "DScan". Вместе с исходниками и предыдущими статьями так будет легче понять принцип работы сокетного движка. Первые статьи и исходники можно взять на http://www.danil.dp.ua

Сканер по диапазону

Сканер по диапазону портов или адресов предназначен для определения открытых портов на удаленном компьютере или открытого определенного порта по диапазону адресов. Таким образом можно просканировать весь диапазон адресов провайдера на 139 открытый порт. Или 10001 (DTr). Или по порту BO, LamerDeath и т.п. Для этого необходимо указать диапазон адресов в спецификации ip4 (xxx.xxx.xxx.xxx) и порт. Сканирование осуществляется в многопоточном режиме по изменению последнего значения. Количество потоков можно задать и оно зависит от скорости соединения. В версии 1.3 сканирование реализовано через неблокирующие сокеты (см. предыдущие статьи). Сканирование по диапазону портов в основном предназначено для определения установленных сервисов на удаленном компьютере. Таким образом можно выяснить и операционную систему компьютера, подключен ли он еще и в локальную сеть, установлен ли Apach, E-mail-SERVER, FireWall и т.д.

Сканер по выбранным портам

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

Универсальный TCP-клиент

После определения открытых портов на удаленном компьютере, можно с помощью универсального TCP-клиента выяснить тип установленного сервиса, протокол обмена данными, его ответ на попытку соединения, сколько байт отправляет при соединении, сколько получает и т.д. Может работать как TelNet-клиент, e-mail-клиент, броузер, клиент различных BackDoor, Whois-клиент и т.п. В общем - универсальный клиент. Также есть опции отправки/приема данных в виде Out-of-Band. Можно указать разное окончание отправляемого пакета и сгенерировать данные случайным образом. Область применения очень обширна.

Флудер

Два примера использования можно взять в третьей статье по этой теме. Также он может использоваться для флуда чата, гостевой и т.п. Принцип работы - посылка на указанный адрес и открытый порт указанного кол-ва сформированных пакетов. Пакеты можно формировать случайным образом, заполнять нулями, #1, #13, #10, буквой A, #10#13, /n,
или пробелами. Справа и слева сформированных данных можно ввести обязательные для этого пакета данные (для чатов, гостевых и т.д.). Вот пример. Возьму мою гостевую книгу на http://www.danil.dp.ua. После некоторых исследований port-mapper-ом, можно получить, что url для добавления -

GET http://www.danil.dp.ua/cgi-bin/add.pl?name=1111&email=E-MAIL&hpu=http%3A%2F%2F&city=CITY&country=COUNTRY&comments=COMMENTS&action=add. 

Теперь можно сформировать соответствующий запрос в разделе "Send": в первое поле ввода введем

GET http://www.danil.dp.ua/cgi-bin/add.pl?name=1111&email=E-MAIL&hpu=http%3A%2F%2F& city=CITY&country=COUNTRY&comments=

, во втором - random, в третьем - "&action=add". Теперь флудер будет посылать сформированное случайным образом поле "Комментарии". Окончание - #10. Осталось поставить кол-во Thread - 250 и Count of send - 1. Запустить. Теперь прога просто зафлудит гостевую. Моя гостевая приведена для примера и на ней лучше этого не делать. Там куча проверок, режим премодерирования (удалить весь флуд у меня займет пару минут). Обычно есть определение IP-адреса. Поэтому лучше работать через прокси (см. ниже) или с карточки на пару часов инета.

Брутфорс

Предназначен для определения пароля по словарю. Недостатки этого метода я рассмотрел в своей статье Взлом мыла. НО: во-первых не все используют сложные пароли, а во-вторых есть так называемая "Защита от брута", которая перекрывает сервис при определении попытки брутфорса. Иногда такая защита может перекрыть доступ и зарегистрированному пользователю. Как например, в mail.ru. При попытке брутфорса по POP3, даже зарегистрированный пользователь потом не может по POP3 получить свою почту. Приходится получать через бройзер, ну а здесь можно послать письмо с соответствующим скриптом. Или на чате, форуме и т.п. пароль достаточно простой - цифры. Тогда это несколько тысяч или сотен тысяч значений, которые при многопоточном брутфорсе подобрать вполне реально - от часа до суток. В общем, иногда очень полезная вещь. В инете есть очень много разных файлов с паролями, но лучше ими не пользоваться, а формировать самому. Практически у всех есть ICQ. По поиску можно получить имя, дату рождения и т.д. Пусть у нас есть только имя (например Danil :-)). Мы не знаем больше ничего. Но попытаемся попробовать сформировать некоторый файл с паролями. По моим наблюдениям, очень часто указывают пароль как имя+цифры. Например, цифры - день и месяц рождения. Вот небольшая программа на Delphi, которая формирует файл паролей:


procedure PassCreate;
const
  name = 'danil';
  file = 'pass.txt';

var
  PassList : TStringList;
  I, J : Integer;
begin
  PassList:=TStringList.Create;
  PassList.Clear;
  PassList.Add(name);
  // Цикл по месяцу и дате рождения
  for I:=1 to 12 do
    for J:=1 to 31 do
      PassList.Add(name+IntToStr(J)+IntToStr(I));
  PassList.SaveToFile(file);
  PassList.Free;
end;

Немного переделав, можно сделать добавление нулей при значении <10, формировать трех, черырех-значное число случайным образом, поставить цифры вначале и т.д. Можно просто сформировать файл паролей из цифр. Можно добавить стандарты типа qwerty, 1234, 4321, asdf и т.д. В общем, как повезет. С ftp и pop3 брутом надеюсь все понятно. Можно переделать исходники и под TelNet. Рассмотрим HTTP-брутфорс. Например есть такая конструкция проверки пароля:


<form action="cgi-bin/pass.cgi" method=post> 
<b>Авторизация:</b><br><br> 
<b>Имя :</b><input type=text name=name size=40><br>
<b>Пароль:</b><input type=password name=password size=40><br><br>
<input type=submit value="Отправить">
</form>

Мы видим, что скрипт проверки парля находится на www.domain.com/cgi-bin/pass.cgi. Через port-mapper или просмотрев на хтмл, мы видим, что url выглядит так: http://www.domain.com/cgi-bin/pass.cgi?name=NAME&password=PASSWORD. Нам надо перебрать поле PASSWORD. Введем непрвальный пароль и посмотрим ответ сервера. Перейдем на закладку Universal Client, соединимся с www.domain.com и пошлем POST url. Посмотрим ответ сервера. Там будет что-то типа "Password incorrect". При правильном пароле такого наверное не должно быть. Он должен написать что-то типа "Password is incorrect". HTTP-брутфорс в "DScan" допускает использование прокси прямо в программе. Таким образом можно заполнить поля прокси-сервера и сервера для работы, в первом поле отправки поставить http://www.domain.com/cgi-bin/pass.cgi?name=NAME&password=, указать файл паролей, в соответствующем поле указать ответ сервера на неверный пароль и начать сканирование. HTTP-брутфорс можно также использовать для закрытых паролем ресурсов. С помощью port-mapper определить url и поставить в поле "Сообщение при неверном пароле" - 500. Это стандартный ответ web-сервера при недоступном ресурсе. Также его можно использовать как CGI-сканер. Только вместо файла паролей необходимо указать файл, содержащий url к скриптам с ошибками. В первом поле отправки, в случае необходимости нужно поставить "/" (если скрипты в файле не начинаются с "/"). Ответ сервера на несуществующий скрипт - "500" или "404 Not Found" (необходимо сначала посмотреть через универсальный клиент). Таким образом, перебирая запросы к серверу, можно получить список установленных скриптов с ошибками. Список уязвимых скриптов и описание использований уязвимостей, можно взять в интернете на сайтах, посвященных безопасности.

Анонимность

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

Может быть в следующей статье я рассмотрю работу с датаграммами, функции sendto/recvto, подделку пакетов, работу с сокетом без connect и т.п.

P.S. Статья и программы предоставлены в целях обучения и вся ответственность за использование ложится на твои хилые плечи.

Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.