ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Расшифровка хешей
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

distributed john the ripper
  #1  
Старый 13.07.2008, 19:25
Аватар для ShAnKaR
ShAnKaR
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию distributed john the ripper

появилось тут несколько свободных серверов и дабы занять их решил наконецто разбрутить все что накопилось, поначалу хотел заюзать dJohn но чето оно глючило с диапазонами пасов и решил сделать небольшой свой скрипт для этого.
в общем написал кое как корявенько ибо не программист два скрипта - сервер и клиент, заюзав код для john.conf из dJohn`а :
PHP код:
#!/usr/bin/perl -w

use strict;
use 
IO::Socket;
use 
Thread;
use 
POSIX qw(ceil floor);
use 
MIME::Base64;
use 
POSIX 'setsid';

die 
"cant fork" unless defined (my $child=fork);

exit 
if $child;
setsid();
open (STDIN,"</dev/null");
open(STDOUT,">.dev.null");
open(STDERR,">&STDOUT");

our $chars='~!@#$%^&*()_+=-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';# chars
our $len=8;# max len password
our $step=100000;#kolichestvo iteraciy

my $port=12345;





our $count=length($chars)**$len;
our $nowcount=1;



my $listen_s=IO::Socket::INET->new(LocalPort=>$port,Listen=>20,Proto=>'tcp',Reuse=>1);

die $@ 
unless $listen_s;

while(
my $conn=$listen_s->accept){
my $thr=Thread->new(\&interact,$conn);
$nowcount+=$step;
}

sub interact{
my $hand=shift;
Thread->self->detach;
my $inp;
chomp($inp=<$hand>);
if(
$inp=~m/givedata/){ # get word data
print $hand encode_base64($chars).':'.$len.':'.encode_base64(pwd($nowcount)).':'.encode_base64(pwd($nowcount+$step))."\n";
}
$hand->close();
}






sub pwd{
my $ncount=shift;
my $a=1;
my $b=0;
my ($c,$d1,$c1,$cc,$skstep);
while(
$b<$ncount){
$b+=length($chars)**($a++);
}
$a=$a-1;
$c1=$b-length($chars)**($a);
$skstep=$ncount-$c1;
for(
my $sts=0;$sts<$a;$sts++){
$d1=floor($skstep/(length($chars)**$sts));
while(
$d1>=length($chars)){
$d1=$d1-floor($d1/length($chars))*length($chars);
}
$c.=substr($chars,$d1,1);
}
for(
my $i=length($c)-1;$i>-1;$i--){
$cc.=substr($c,$i,1);
}
return 
$cc;

и клиент:
PHP код:
#!/usr/bin/perl -w


use strict;
use 
IO::Socket;
use 
MIME::Base64;
use 
POSIX 'setsid';

die 
"cant fork" unless defined (my $child=fork);

exit 
if $child;
setsid();
open (STDIN,"</dev/null");
open(STDOUT,">.dev.null");
open(STDERR,">&STDOUT");



my $socket;


my $host=$ARGV[0];

while(
1){
if(
$socket=IO::Socket::INET->new($ARGV[0])){

my $data;

print 
$socket "givedata\n";
sysread($socket,$data,1024);
print 
$socket "exit\n";
close($socket);

if(
$data=~m/([^:]+):([^:]+):([^:]+):([^:]+)/){

open(LOG,'>'.$ENV{HOME}.'/.john/djohn_log.txt');
print 
LOG decode_base64($1).':'.$2.':'.decode_base64($3).':'.decode_base64($4)."\n";
close(LOG);

my $chars=decode_base64($1);
my $len=$2;
my $stch=decode_base64($3);
my $ench=decode_base64($4);







my ($ch_1,$ch_2,$ch_3);

for(
$a=0;$a<length($chars);$a++){
$ch_1.="  charset[$a] = '".substr($chars,$a,1)."';\n";
}


for(
$a=0;$a<length($stch);$a++){
$ch_2.="  word[$a] = '".substr($stch,$a,1)."';  rword[$a] = ".(index($chars,substr($stch,$a,1))).";\n";
}


for(
$a=0;$a<length($ench);$a++){
$ch_3.="word[$a] == '".substr($ench,$a,1)."' && "
}




my $conf="[List.External:dJohn]
int length;                // Current length
int charset["
.length($chars)."];
int rword[15];
int charsetl;
int first_time;

void init()
{
  length = "
.length($stch).";  charsetl = ".length($chars).";
  "
.$ch_1.$ch_2."
  word["
.($a++)."] = 0;

  first_time = 1;
}

void generate()
{
    int i;

    if (first_time) {
      first_time = 0;
      return;
    }

          if ("
.substr($ch_3,0,-3).") {
      word = 0;
      return;
    }

      i = length - 1;            // Start from the last character
    while (++rword[i] == charsetl)        // Try to increase it
    if (i)                // Overflow here, any more positions?
        rword[i--] = 0;    // Yes, move to the left, and repeat
    else                // No
    if (length < 15-1) {
        i = ++length;    // Switch to the next length
        while (i--)
            rword[i] = 0;
        while (i < length)
          word[i] = charset[rword[i++]];
        word[length] = 0;
        return;
    } else {
        word = 0; return;    // We're done
    }
    i = 0;
    while (i < length)
      word[i] = charset[rword[i++]];
    word[length] = 0;
}

"
;


my $fp=open(IN,'>/tmp/j.conf');
print 
IN $conf;
close(IN);

system('cat /etc/john.conf /tmp/j.conf > '.$ENV{HOME}.'/.john/john.conf');
unlink('/tmp/j.conf');
system('john -external=dJohn --session=/tmp/session_'.$$.'.john '.$ARGV[1]);
}
else{
sleep(600);
}}
else{
sleep(600);
}


сервер запускается просто ./server.pl, клиент ./client 127.0.0.1:12345 /home/user/password.txt
для работы требуется установленный JTR, default конфиг /etc/john.conf, папка ~/.john/ , файл с хешами /home/user/password.txt

хотя все можно сделать еще проще например серверную часть через веб сайт,
, ну в общем вроде все работает и так вроде как корректно.
принцип работы- сервер расчитывает начальный и конечный пароль которые и отдает клиенту , клиент в свою очередь подсодиняется к серверу на порт 12345 получает задание, исправляет конфиг JTR и запускает его, и так бесконечно,
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
John the ripper WebHacK Windows 6 26.01.2006 20:27
как правильно настроить john Zazil Расшифровка хешей 11 08.01.2006 23:37
John the ripper Nemez Болталка 1 27.12.2003 15:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ