pentoo-overlay/app-fuzz/http-fuzz/files/http-fuzz.pl
2008-11-29 17:35:05 +00:00

86 lines
4 KiB
Raku

#!/usr/bin/perl
# Simple HTTP request header fuzzing utility.
# by prdelka
use IO::Socket;
if(!$ARGV[0]||!$ARGV[1])
{
die "Please provide <host> <port>";
}
@request = ("GET","POST","HEAD");
@fields = ("Accept","Accept-Charset","Accept-Encoding","Accept-Language","Authorization","Expect","From","Host","If-Match",
"If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Max-Forwards","Pragma","Proxy-Authorization",
"Range","Referer","TE","Trailer","Transfer-Encoding","Upgrade","User-Agent","Via","Warning");
@chars = ("\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08","\x09","\x0a","\x0b","\x0c","\x0d","\x0e","\xf","\x10","\x11","\x12",
"\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1a","\x1b","\x1c","\x1d","\x1e","\x1f","\x20","\x21","\x22","\x23",
"\x24","\x25","\x26","\x27","\x28","\x29","\x2a","\x2b","\x2c","\x2d","\x2e","\x2f","\x30","\x31","\x32","\x33","\x34",
"\x35","\x36","\x37","\x38","\x39","\x3a","\x3b","\x3c","\x3d","\x3e","\x3f","\x40","\x41","\x42","\x43","\x44","\x45",
"\x46","\x47","\x48","\x49","\x4a","\x4b","\x4c","\x4d","\x4e","\x4f","\x50","\x51","\x52","\x53","\x54","\x55","\x56",
"\x57","\x58","\x59","\x5a","\x5b","\x5c","\x5d","\x5e","\x5f","\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67",
"\x68","\x69","\x6a","\x6b","\x6c","\x6d","\x6e","\x6f","\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77","\x78",
"\x79","\x7a","\x7b","\x7c","\x7d","\x7e","\x7f","\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89",
"\x8a","\x8b","\x8c","\x8d","\x8e","\x8f","\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9a",
"\x9b","\x9c","\x9d","\x9e","\x9f","\xa0","\xa1","\xa2","\xa3","\xa4","\xa5","\xa6","\xa7","\xa8","\xa9","\xaa","\xab",
"\xac","\xad","\xae","\xaf","\xb0","\xb1","\xb2","\xb3","\xb4","\xb5","\xb6","\xb7","\xb8","\xb9","\xba","\xbb","\xbc",
"\xbd","\xbe","\xbf","\xc0","\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb","\xcc","\xcd",
"\xce","\xcf","\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6","\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde",
"\xdf","\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec","\xed","\xee","\xef",
"\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf7","\xf8","\xf9","\xfa","\xfb","\xfc","\xfd","\xfe","\xff");
@term = (":"," ",": ","/","\\");
@termx = (" ","\r\n","\n");
$SIG{PIPE} = 'IGNORE';
while(1){
for($fuzz = 10;$fuzz <= 100;$fuzz = $fuzz + 10)
{
my $sock = new IO::Socket::INET (
PeerAddr => $ARGV[0],
PeerPort => int($ARGV[1]),
Proto => 'tcp',
);
die "Could not create socket: $!\n" unless $sock;
$a = int(rand($fuzz));
$b = int(rand($fuzz));
$c = int(rand($fuzz));
$index = int(rand(@request));
my $buffer;
$buffer .= "$request[$index] ";
$index = int(rand(@term));
$buffer .= "$term[$index]";
$charlength = int(rand($b));
for($count2 = 0;$count2 <= $charlength;$count2++)
{
$index = int(rand(@chars));
$charamount = int(rand($c));
$buffer .= "$chars[$index]"x$charamount;
}
$index = int(rand(@termx));
$buffer .= "$termx[$index]";
$fieldamount = int(rand($a));
for($count = 0;$count <= $fieldamount;$count++){
$index = int(rand(@fields));
$buffer .= "$fields[$index]";
$index = int(rand(@term));
$buffer .= "$term[$index]";
$charlength = int(rand($b));
for($count2 = 0;$count2 <= $charlength;$count2++)
{
$index = int(rand(@chars));
$charamount = int(rand($c));
$buffer .= "$chars[$index]"x$charamount;
}
$index = int(rand(@termx));
$buffer .= "$termx[$index]";
}
print $sock "$buffer\n\n\n";
print "[ Sent ";
print length($buffer);
print " byte(s) to host $ARGV[0]($ARGV[1]/tcp)\n";
sleep(0.5);
my $recv = 0;
while(<$sock>){$recv = $recv + length($_);}
print "[ Received $recv byte(s) from host $ARGV[0]($ARGV[1]/tcp)\n";
close($sock);
}
}