====Zenk Roulette 6 : B2evolution==== **Date :** Mercredi 24 novembre 2010 de 19h à 00h00. **Application auditée :** B2evolution Beta 4.0.0.1 http://b2evolution.net/ **Description :** CMS pour multi blogs **Pad :** http://piratepad.net/S3wvHmgcFH ------------------------------------------------------------------------------ **Défauts de sécurité :** ------------------------------------------------------------------------------ **Fichier** : gettext/xg.php **Ligne** : 113 elseif( isset($argv[2]) && strtoupper($argv[2]) == 'MERGE' ) { $action = 'merge'; if( ! isset($argv[3]) ) // the to-get-merged locale { echo_usage(); exit(1); } $locales_to_merge = array_slice( $argv, 3 ); } **Ligne** : 254 if( $action == 'merge' ) { // Merge with existing .po files: if( ! @is_readable( $file_pot ) ) { echo "FATAL: $file_pot is not readable!\n"; exit(1); } foreach( $locales_to_merge as $l_locale ) { $l_file_po = $dir_root.'locales/'.$l_locale.'/LC_MESSAGES/messages.po'; echo 'Merging with '.$l_locale.'.. '; if( ! file_exists( $l_file_po ) ) { echo "PO file $l_file_po not found!\n"; continue; } system( 'msgmerge -U -F --no-wrap '.escapeshellarg($l_file_po).' '.escapeshellarg($file_pot) ); # delete old TRANS comments and make automatic ones valid comments: system( 'sed -i -r "/^#\\s+TRANS:/d; s/^#\\. TRANS:/# TRANS:/;" '.$l_file_po ); echo "Written $l_file_po .\n"; echo "\n"; } exit(0); } **Exécution possible de commande : ** Si $l_file_po = "\00 && commande #" marche uniquement sous windows pour le null-byte poisoning. Car file_exists( $dir_root.'locales/' ) renvoi true et system( 'sed -i -r "/^#\\s+TRANS:/d; s/^#\\. TRANS:/# TRANS:/;" '.$l_file_po ); oublie de escapeshellarg. **Ligne** : 291 $l_file_po = $dir_root.'locales/'.$l_locale.'/LC_MESSAGES/messages.po'; $global_file_path = $dir_root.'locales/'.$l_locale.'/_global.php'; **Ligne** : 304 $r = $POFile->write_evo_trans($global_file_path, $l_locale); **Fichier** : blogs/inc/locales **Ligne** : 223 function write_evo_trans($file_path, $locale) **Ligne** : 241 fwrite( $fp, '$trans[\''.$locale."'] = array(\n" ); Si $l_locale = "../blogs/index.php\0'] = array(); code_php/*" Normalement, ca passe les file_exists. A voir si cela passe le $trans[\''.$locale."'] toujours sous windows. **Ligne** : 52 param( 'redirect_to', 'string', '' ); La fonction param() prend en argument des variable $_GET comme $_POST. Il est possible d'agir sur la variable $redirect_to depuis l'url : register.php?redirect_to=[fake_url] et de redirigé le nouveau membre vers une page qui n'a rien à voir avec celle du site de base. Pas pris le temps de chercher dans le fichier les lignes vulnérable au niveau de la non verification de l'url. **Cotés admin** : **Fichier** : htsrv/async.php: **Ligne** : 142 http://localhost/b2evolution/blogs/htsrv/async.php?action=get_login_list&q=admin'%20union%20select%20user()%20--%20a# **SQL Injection** **Fichier** : _commentquery.class.php: **Ligne** : 270 $this->WHERE_and( $this->dbprefix.'author_url '.$url_match.' ("'.$author_url.'")'.$include_empty ); * PHP_INFO non enlevé à l'install Pour le compte rendu... Malheuresement pas tres concluant :dodgy: Mais on peut pas gagner a tous les coups ! En tout cas merci au personne presente : K1wy, Essandre et Tishrom.