Как отправить данные POST с помощью LWP? - PullRequest
17 голосов
/ 01 октября 2010

Я хочу создать программу, которая связывается с http://www.md5crack.com/crackmd5.php. Моя цель - отправить на сайт хэш (md5) и, надеюсь, сайт сможет его взломатьПосле я хотел бы отобразить открытый текст хеша.Моя проблема заключается в отправке данных на сайт.Я просмотрел статьи об использовании LWP, но все еще потерян.Прямо сейчас, хеш не отправляет, некоторые другие ненужные данные.Как мне отправить определенную строку данных на сайт?

use HTTP::Request::Common qw(POST);  
use LWP::UserAgent; 


$ua = LWP::UserAgent->new();  
my $req = POST 'http://www.md5crack.com/crackmd5.php', [ 
 maxlength=> '2048',
 name=> 'term',
 size=>'55',
 title=>'md5 hash to crack',
 value=> '098f6bcd4621d373cade4e832627b4f6',
 name=>'crackbtn',
 type=>'submit',
 value=>'Crack that hash baby!',

]; 
$content = $ua->request($req)->as_string; 

print "Content-type: text/html\n\n"; 
print $content;

Ответы [ 2 ]

31 голосов
/ 01 октября 2010

Вы размещаете неверные данные, потому что вы берете HTML-код для указания виджета и сопоставляете его с данными, которые он фактически отправляет. Исправленные данные будут просто отправлять имя виджета и его значение:

term: 098f6bcd4621d373cade4e832627b4f6

Вместо этого данные, которые в настоящее время отправляются POSTed:

maxlength: 2048
name:      term
size:      55
title:     md5 hash to crack
value:     098f6bcd4621d373cade4e832627b4f6
name:      crackbtn
type:      submit
value:     Crack that hash baby!

Исправленная программа:

use strict;
use warnings;

use LWP::UserAgent; 
use HTTP::Request::Common qw{ POST };
use CGI;

my $md5 = '098f6bcd4621d373cade4e832627b4f6';
my $url = 'http://www.md5crack.com/crackmd5.php';

my $ua      = LWP::UserAgent->new();
my $request = POST( $url, [ 'term' => $md5 ] );
my $content = $ua->request($request)->as_string();

my $cgi = CGI->new();
print $cgi->header(), $content;

Вы также можете использовать LWP::UserAgent метод post ():

use strict;
use warnings;

use LWP::UserAgent;
use CGI;

my $md5 = '098f6bcd4621d373cade4e832627b4f6';
my $url = 'http://www.md5crack.com/crackmd5.php';

my $ua       = LWP::UserAgent->new();
my $response = $ua->post( $url, { 'term' => $md5 } );
my $content  = $response->decoded_content();

my $cgi = CGI->new();
print $cgi->header(), $content;

Всегда не забывайте use strict и use warnings. Это считается хорошей практикой и сэкономит ваше время.

6 голосов
/ 01 октября 2010

Раньше взломщики разбирались с такими вещами, читая. В HTTP :: Request :: Common есть примеры, которые LWP :: UserAgent предлагает вам проверить для отправки данных POST. Вам нужно только отправить данные формы, а не метаданные, которые идут вместе с ней.

Возможно, вам будет проще использовать WWW :: Mechanize , поскольку он имеет гораздо более ориентированный на человека интерфейс.

...