Annonce

Réduire
Aucune annonce.

LFI php://filter + Connexion Mysql + Dump Database

Réduire
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #16
    Envoyé par _42_ Voir le message
    Personnellement, je trouve ton code très minimaliste, voire trop ... J'explique !

    Déjà, ta première ligne ne sécurise rien - strictement rien - et n'est intéressante que, et si seulement si, tous tes noms de scripts PHP sont écrits en minuscules.
    C'est un prédicat de base, certes intéressant, mais qui dans certains contextes, est faux, voire nul et non advenu.

    La deuxième ligne de code est, elle, plus intéressante ... mais au lieu de la fonction isset(), personnellement j'utilise !empty() ; ce que je ne comprends pas, par contre, c'est ton pattern de recherche dans la fonction preg_match ... étant donné que tu mets tout en minuscule, précédemment, il serait plutôt d'acabit de l'écrire ainsi : [a-z0-9], étant donné que tu n'auras jamais de lettre majuscule !

    Rien à redire sur l'usage de file_exists, bien au-contraire, même si personnellement, je préfère utiliser la fonction require(), voire require_once()

    Pour en revenir, à ta première ligne de code qui n'est en rien sécurisé, je partage ce bout de code que j'ai intégré dans mes anciens codes PHP - parce que, j'avoue cela commence à faire quelque temps, que je ne code plus PHP :

    Code:
    <?php
    function securiseSuperGlobals() {
    
    		// securise superglobals arrays...
    		//if( !empty( $GLOBALS ) )	$this->securiseVariables( $GLOBALS );
    		if( !empty( $_COOKIE ) )	$this->securiseVariables( $_COOKIE );
    		if( !empty( $_ENV ) )	$this->securiseVariables( $_ENV );
    		if( !empty( $_FILES ) ) 	$this->securiseVariables($_FILES);
    		if( !empty( $_GET ) ) 	$this->securiseVariables($_GET);
    		if( !empty( $_POST ) ) 	$this->securiseVariables($_POST);
    		if( !empty( $_REQUEST ) ) 	unset($_REQUEST);
    		if( !empty( $_SERVER ) ) 	$this->securiseVariables($_SERVER);
    		if( !empty( $_SESSION ) ) 	$this->securiseVariables($_SESSION);
    
    	}
    
        /*
         * @purpose: Securise variables
         *
         * */
    	function securiseVariables($array) {
    
            if(!empty($array) && is_array($array)) {
    
            	foreach($array as $key => $value) {
    
            		# Si c'est un tableau, récursion de la fonction, sinon filtre tags
                	if(is_array($value)) {
                    	$this->securiseVariables($array[$key]);
                	}
                // on peut très bien préférer l'usage de la fonction htmlentities(), par exemple, au lieu de strip_tags()...
                elseif(is_bool($value)) $array[$key] = filter_var(strip_tags($value), FILTER_VALIDATE_BOOLEAN);
                elseif(is_int($value)) $array[$key] = filter_var(strip_tags($value), FILTER_VALIDATE_INT);
                elseif(is_string($value)) $array[$key] = filter_var(strip_tags($value), FILTER_SANITIZE_STRING);
    
            	}
            	unset($key, $value);
    
            }
    
    	}
    
    securiseSuperGlobals();
    
    if( !empty( $page ) ) {
    	file_exists( "pages/$page.php" ) && require_once( "pages/$page.php" );
    		}
    else {
            require_once "pages/include.php";
        }
    ?>
    Sachant que normalement, actuellement PHP convertit le type de la valeur obtenue automatiquement ... quelque soit la variable et sa valeur obtenue, dans les contextes des tableaux superglobaux.

    Comme on le lit, dans le code securiseVariables() - ci-dessus -, l'usage immodéré des filtres PHP est fait - laissons faire à PHP ce qu'il sait mieux faire que nos propres mimines, voire notre cerval :
    https://secure.php.net/manual/fr/fun...filter-var.php
    Et, on peut assurément faire mieux.

    Personnellement, avant l'usage de la fonction file_exists(), je m'assurerais aussi que le fichier appelé est bien un fichier, et surtout qu'il appartient bien au propriétaire des scripts PHP hébergés - vérification par exemple avec getOwner(), dans le cadre de l'usage des fonctions SPL. Ça me semble un strict minimal !

    Allez zou ... bon code, à tous.
    Je t'invite à relire mon second commentaire.Ce n'est pas MON code , mais des sources trouver sur le net.
    Sinon, on débat de la faille et de ces possibilités futur d'exploitation, car honnêtement ce tutoriel n'est pas complet pour moi, il s'arrête sur la première marche d'un escalier à franchir avec plusieurs pas, ou on reste dans la critique de "bout de code"?
    Merci de la correction, fort utile pour ma part

    Commentaire


    • #17
      très joli tutoriels merçi

      Commentaire


      • #18
        Envoyé par Jajusa Voir le message
        J'ai énormément de serveur sous contrôles, je n'en profite pas, bien au contraire,je corrige les failles moi même.
        J'en garde un accès dans le but de tester des choses, des nouvelles vulnérabilités, car réellement beaucoup de serveur ne sont jamais maintenu niveau sécurité, 0 patch, 0 update rien, voir même abandonné.
        C'est un peu comme le commerce, tu achète , puis y a pas de SAV
        Je gagne ma vie honnêtement, et je vie ma passion dans la même vision.
        et tout lemonde acquiesce quel forum de white hat... elle est ou la difference avec le black hat la??? le mec ne previent pas les admins et s'en sert pour ces tests perso... noraml quoi les mecs payent un hebergement pour que monsieur fasse joujou... vla le niveau...

        Commentaire


        • #19
          Hello rl1k

          Dans le message que tu cites Jajusa décrit en comportement white (correction des failles, pas de recherche de gains) mais plutôt très très borderline je le concède. La question a déjà été abordé par Sakarov plus tôt dans le thread, (as-tu lu la totalité du thread avant d'en tirer des conclusions ?), je suis toujours en phase avec ses propos.

          Jajusa est libre de faire ce qu'il souhaite en dehors du forum, et puis, entre nous, soyons honnêtes, on a preque tous eu des travers à un moment donné. Même toi lorsque tu abordes l'élévation de privilèges sur Linux et d'ajout des clés ssh de la "victime" (Je t'enverrai le lien en MP si tu le souhaites, mais je penses que tu sais exactement de quel article je parle), arrêtons de se foutre de la gueule du monde mon cher rl1k. Et de surcroit, tu te permets de remettre en cause toute la ligne de ce forum à partir d'un seul petit message.

          Quoi qu'il en soit, ceci ne change rien en la qualité de son papier, et les moyens de défense proposés. Et c'est en cela qu'on retrouve la démarche white : enseigner, et proposer des contremesures.

          En revanche, as-tu réellement créé un compte pour pousser une petite geulante sur un tuto d'il y a 3 ans ?


          Suivre Hackademics: Twitter, Google+, Facebook.

          Commentaire

          Chargement...
          X