BoZoN icon indicating copy to clipboard operation
BoZoN copied to clipboard

Je me suis fait hacker le bozon

Open jerrywham opened this issue 8 years ago • 17 comments

auto_restrict ne fonctionne pas. Je ne sais pas où est la faille, je n'ai pas pu tester encore mais mon bozon est down. Merci à ducon Anoir Elfachtali.

jerrywham avatar Jan 26 '17 17:01 jerrywham

C'est le fichier auto_restrict_users.php qui est en cause. Voici le code enregistré suite au hack :

   	# user : Apparition
	$auto_restrict["users"]["Apparition"]["login"]='Apparition';
	$auto_restrict["users"]["Apparition"]["encryption_key"]='9a06a5ded495f80d3d1d69eafe3dcb4c';
	$auto_restrict["users"]["Apparition"]["salt"] = '<2n(?zpez|oh-$$MOn$`3}v4ZEA^1*>Vy%jX6{?`s_PnB@O9qgJ\'kP(fX+BHBOA(%axHgcvpVQ0J/B5_*rHt=yLp5:sS,X}qE`+7+:23}\\@`V&z~u~kA)@H0;Xk61G0^5`FOyTgA5}[gA5raaOV2b+(E{+OqHlHeAV{KdHR.^~,u+6+Oq.4gs[/^n=[I5YT9oV`D&zf6LxFlwckUAY,QFDK/[iSfR@ezt\\TNMu;Z))uLDK4t$TRr\\F;w/\\/+Qywf|~P~+ui#TC9&Of+{$u[&eY%H#Jyo6kCQAVn&GS/\\oPs^%@l$E&&$/&Z*uYt:taH\\_-|zxSpA4CpKq18mI}PJhKbks+ZkIj>st%uoCGGbwFoOm-R}Sfv\'qW)BS^8N8+}`&5oel~Ez,;Dac0E>Y-\'S:h%1HUJwo`r9dMMk@~K_w7sY6M%/,Eztuirb8&p?UCB<Fv;Uj(=-|NLksng1MZcv=L#8AA|a,o5w\'9D[EJPU5Dnf8p1$8#<i^alI/f#Xuv8E';
	$auto_restrict["users"]["Apparition"]["pass"] = '2cee74c895c17895749face57ae841529e95fa791cdda9e2db0a870831b074a5156725c8f68dbea350497392d43d05bc6bb45bf510154d58c24d08b5328a85c7';
	$auto_restrict["users"]["Apparition"]["status"]='user';
	$auto_restrict["users"]["Apparition"]["lang"]='en';

	# user : "];$PWN=echo "Hacked By Anoir Elfachtali";////"
	$auto_restrict["users"][""];$PWN=echo "Hacked By Anoir Elfachtali";////""]["login"]='"];$PWN=echo "Hacked By Anoir Elfachtali";////"';
	$auto_restrict["users"][""];$PWN=echo "Hacked By Anoir Elfachtali";////""]["encryption_key"]='a343b3b5baedfe816610302ea4d83bf8';
	$auto_restrict["users"][""];$PWN=echo "Hacked By Anoir Elfachtali";////""]["salt"] = 'R&7,Wd4vqZUkADfcarv9\'bU\'(rsKp9B]R3LM;bLM`[JOQf+Pntk)\'ts(qxQ>EALbTuh9k}YeB`(w5\\^&zy<m65v$[S_QHytC.m[FAIPK%{N}z(Q`pz7Ma4;caG/tpKz{ARnyh[m>E%\\c7,[cWeFFV}>~`o{WV52GhA5kq\\|}E.q+#tXbN7xbC<\\cO6$:G,\\q*a~r}]0j`6I%d<b&jv<@B*N?mJ.`-B-MvpU*n@e5<XMfRT6O<=907<>]bXcw:58},{Ne>J%+(K[H~Ea@z<%Y%F/<4N]v6=Ai9Qf8*Uj~@GGGbTdvmm\'A3Sd}C&\'[<\'s<mjk;,-e]Fe3]M%}QeUmUz,}wOyWsp&w?w;m|v9XAa*sWZg&q#CW`K-@`tBX-?|)/kVYWHv3C/b-aDtrLD/qISj7E$iJCPTTN|?49a]g^y)^A}df8?-KRIp&\\Xfed]rOAv1wu(1f[jS=>tSZ|-2\\j\\U+~lCb%FU`t_~)$NePZ=##O;IV|4L@6Pa}GnG/M[S*H';
	$auto_restrict["users"][""];$PWN=echo "Hacked By Anoir Elfachtali";////""]["pass"] = 'cf2c3704a65a8b6d5f1a126f24cea5773c89e31d941e9458619f08375908800831c29bb71abb9638db35d89e82359ed7908abe72eed8da23e164f606fc9e7923';
	$auto_restrict["users"][""];$PWN=echo "Hacked By Anoir Elfachtali";////""]["status"]='';
	$auto_restrict["users"][""];$PWN=echo "Hacked By Anoir Elfachtali";////""]["lang"]='en';
`

Il faudrait dans auto_restrict empêcher l'utilisation des quotes (simples et doubles), des virgules, points-virgules, slaches, antislashes à partir de la ligne 138 d'auto_restrict.php

jerrywham avatar Jan 26 '17 17:01 jerrywham

Outch !

Joli...

Je patche de suite: merci !! :-)

Le 26/01/2017 à 18:31, jerrywham a écrit :

faudrait dans auto_restrict empêcher l'utilisation des quotes (simples et doubles), des virgules, points-virgules, slaches, antislashes à partir de la ligne 138 d'auto_restrict.php

broncowdd avatar Jan 26 '17 17:01 broncowdd

Petite fonction à ajouter et à utiliser ligne 141 sur $_POST['login']

function secure_post($string) {
		return str_replace(array('/','\\','[',']','{','}',',',';',':','$','='),'',htmlentities(strip_tags($string), ENT_QUOTES));
	}

Je ne sais pas si ça suffira car je ne sais pas comment il a fait pour créer des comptes...

jerrywham avatar Jan 26 '17 17:01 jerrywham

Avec un truc du genre

	function unHack($data){
		if (is_string($data)){
			$data=strip_tags($data);
			$data=str_replace(array('"',"'",',',';','/','\\'),'',$data);
			return $data;
		}
		if (is_array($data)){
			return array_map('unHack',$data);
		}
	}

utilisé à la ligne du strip_tags sur le post (l 80)

	if ($auto_restrict['POST_striptags']){
		$_POST=array_map('unHack',$_POST);
	}
	if ($auto_restrict['GET_striptags']){
		$_GET=array_map('unHack',$_GET);
	}

broncowdd avatar Jan 26 '17 17:01 broncowdd

Ha posts croisés ^^ J'adapte

Je vais hâter la v3, la sauvegarde des fichiers sensibles est différente...

broncowdd avatar Jan 26 '17 17:01 broncowdd

function unHack($data){
		if (is_string($data)){
			$data=strip_tags($data);
			$data=str_replace(array('/','\\','[',']','{','}',',',';',':','$','='),'',htmlentities(strip_tags($data), ENT_QUOTES));
			return $data;
		}
		if (is_array($data)){
			return array_map('unHack',$data);
		}
	}

broncowdd avatar Jan 26 '17 18:01 broncowdd

Peut-être assurer davantage le .htaccess ?

broncowdd avatar Jan 26 '17 18:01 broncowdd

Bon, on va voir comme ça ^^ On peut le remercier s'il n'a pas foutu la merde sur ton serveur: il a révélé une faille ^^

Ceci dit, le mien ne fonctionnait plus non plus et je ne l'avais pas vu ^^ ça va avec le hack de mon pluXML il y a un moment...

J'aimerais bien savoir comment il a fait :-)

broncowdd avatar Jan 26 '17 18:01 broncowdd

En tout cas, va falloir du unHack partout ;-)

broncowdd avatar Jan 26 '17 18:01 broncowdd

J'ai changé également la génération de salt pour que les caractères incriminés en soient exclus...

broncowdd avatar Jan 26 '17 18:01 broncowdd

Pour raccourcir ta fonction :

   function unHack($data){
		if (is_string($data)){
			return str_replace(array('/','\\','[',']','{','}',',',';',':','$','='),'',htmlentities(strip_tags($data), ENT_QUOTES));
		}
		if (is_array($data)){
			return array_map('unHack',$data);
		}
	}

et au niveau de l'ajout d'un nouvel utilisateur, environ ligne 138:

   $login=unHack($_POST['login']);

Il faut également supprimer du tableau $auto_restrict['users'] les index vides, dans la fonction save_user :

   function save_users(){
		global $auto_restrict;
		$ret="\n";$data='<?php'.$ret;
		if (!isset($auto_restrict['users'])){return false;}
		foreach ($auto_restrict['users'] as $key=>$user){
			if ($key != '') {
				$data.=	$ret.'# user : '.$user['login'].$ret
						.'$auto_restrict["users"]["'.$user['login'].'"]["login"]='.var_export($user['login'],true).';'.$ret
						.'$auto_restrict["users"]["'.$user['login'].'"]["encryption_key"]='.var_export($user['encryption_key'],true).';'.$ret
						.'$auto_restrict["users"]["'.$user['login'].'"]["salt"] = '.var_export($user['salt'],true).';'.$ret
						.'$auto_restrict["users"]["'.$user['login'].'"]["pass"] = '.var_export($user['pass'],true).';'.$ret				
						.'$auto_restrict["users"]["'.$user['login'].'"]["status"]='.var_export($user['status'],true).';'.$ret
						.'$auto_restrict["users"]["'.$user['login'].'"]["lang"]='.var_export($user['lang'],true).';'.$ret;
			} else {
				unset($auto_restrict['users'][$key]);
			}
		}
		
		$data.=$ret.'?>';
		$r=file_put_contents($auto_restrict['path_to_files'].'/auto_restrict_users.php', $data);
		if (!$r){return false;}else{return $auto_restrict['users'];}
	}

jerrywham avatar Jan 27 '17 00:01 jerrywham

ça va avec le hack de mon pluXML il y a un moment...

J'ai tout simplement écrit un script php permettant de bruteforce des dossiers et sous-noms de domaines, j'ai eu la "chance" de tomber sur un formulaire d'upload non protégé À partir de là j'ai eu accès à php et je me suis permis de t'en informer de la sorte, donc c'était bien plus que PluXML Par contre depuis j'ai trouvé un second point d'entrée, penses à protéger tes projets privés ou en cours de développement sinon des personnes avec de moins bonnes intentions pourraient en prendre avantage

Désolé de "pourrir" l'issue github au passage PS: Le coup du bozon c'est pas moi par contre et je me demande aussi comment il s'y prend

ghost avatar Jan 27 '17 02:01 ghost

Ok ! En tout cas, merci ;-) Je vais m'atteler à ça aujourd'hui ^^

broncowdd avatar Jan 27 '17 08:01 broncowdd

D'ailleurs, si tu peux me filer quelques conseils, je suis preneur (broncoATwarriordudimanche.net ;-) )

broncowdd avatar Jan 27 '17 08:01 broncowdd

@inaccessibIe : et tu pourrais nous le partager ce script (en l'envoyant à Bronco qui nous l'enverra) ? Je pense que El Fumier a dû utiliser le même principe et du coup ça serait bien de tester pour voir ce que ça donne...

jerrywham avatar Jan 27 '17 09:01 jerrywham

Ou via un zerobin, si tu préfères ;-) http://zerobin.warriordudimanche.net

broncowdd avatar Jan 27 '17 09:01 broncowdd

Ah oui, pas bête...

jerrywham avatar Jan 27 '17 11:01 jerrywham