我想创建一个与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;
答案 0 :(得分:31)
您正在发布错误的数据,因为您正在使用HTML指定窗口小部件并将其与实际发送的数据混淆。更正后的数据只是发送小部件名称及其值:
term: 098f6bcd4621d373cade4e832627b4f6
相反,当前获得POST的数据是:
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
。这被认为是一种良好的做法,可以节省您的时间。
答案 1 :(得分:6)
过去,通过阅读,破解者会想出这种东西。 HTTP :: Request :: Common中有一些例子,LWP :: UserAgent告诉你签出发送POST数据。您只需要发送表单数据,而不是随附的元数据。
您可以更轻松地使用WWW::Mechanize,因为它有一个更加以人为中心的界面。