broncowdd / BoZoN

Minimalist Drag & drop file sharing app (version 2.4 build 15)
Other
285 stars 46 forks source link

Je me suis fait hacker le bozon #202

Open jerrywham opened 7 years ago

jerrywham commented 7 years ago

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 commented 7 years ago

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
broncowdd commented 7 years ago

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

jerrywham commented 7 years ago

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...

broncowdd commented 7 years ago

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 commented 7 years ago

Ha posts croisés ^^ J'adapte

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

broncowdd commented 7 years ago
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 commented 7 years ago

Peut-être assurer davantage le .htaccess ?

broncowdd commented 7 years ago

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 commented 7 years ago

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

broncowdd commented 7 years ago

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

jerrywham commented 7 years ago

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'];}
    }
ghost commented 7 years ago

ç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

broncowdd commented 7 years ago

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

broncowdd commented 7 years ago

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

jerrywham commented 7 years ago

@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...

broncowdd commented 7 years ago

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

jerrywham commented 7 years ago

Ah oui, pas bête...