Faille XSS pour pro :(

gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011 - 19 mai 2007 à 16:51
 Snowboarder69 - 22 mai 2007 à 19:59
Bonjour, en esperant trouver qq qui puise m'aider a combler ma faille XSS

voila la faille de type index.php ?>'><ScRiPt%20%0a%0d>alert(1687822802)%3B</ScRiPt>.

passe chez moi j ai essayer pas mal de truc mais rien a faire
j'apelle mes page comme ceci
index.php?page=login
index.php?page=vente
...
comment faire pour corriger cette faille
a saoir que elle passe de cette facon suivante dans l url:

index.php?lang=%3E'%3E%3CScRiPt%20%0a%0d%3Ealert(1687822802)%3B%3C/ScRiPt%3E

si le mot script est ecrit comme ceci script il ne se passe rien si il devientScRiPt
alors le script s'execute

j ai essayer differents methode sans succes:

htmlspecialchars(stripslashes($_POST));
htmlspecialchars(stripslashes($_GET));

$page = htmlspecialchars($page);
$page=str_replace("%3E","",$page);
htmlentities($host, ENT_QUOTES, 'UTF-8');
//
RemoveXSS($_POST);
RemoveXSS($_GET);
RemoveXSS($pageOK);

si vous avez une solution je prend :) la je suis bloquer et dans la M**

27 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
19 mai 2007 à 17:23
Salut,

Je comprends pas bien... c'est quoi le code de ta page pour que ce script s'exécute.. ?
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
19 mai 2007 à 17:50
[php]
<?php
function RemoveXSS(&$val) {
   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
   // this prevents some character re-spacing such as <java\0script>
   // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
   $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
  
   // straight replacements, the user should never need these since they're normal characters
   // this prevents like
   $search = 'abcdefghijklmnopqrstuvwxyz';
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $search .= '1234567890!@#$%^&*()';
   $search .= '~`";:?+/={}[]-_|\'\\';
   for ($i = 0; $i < strlen($search); $i++) {
      // ;? matches the ;, which is optional
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
  
      // &#x0040 @ search for the hex values
      $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
      // &#00064 @ 0{0,7} matches '0' zero to seven times
      $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
   }
  
   // now the only remaining whitespace attacks are \t, \n, and \r
   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base','ScRiPt');
   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
   $ra = array_merge($ra1, $ra2);
  
   $found = true; // keep replacing as long as the previous round replaced something
   while ($found == true) {
      $val_before = $val;
      for ($i = 0; $i < sizeof($ra); $i++) {
         $pattern = '/';
         for ($j = 0; $j < strlen($ra[$i]); $j++) {
            if ($j > 0) {
               $pattern .= '(';
               $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
               $pattern .= '|(&#0{0,8}([9][10][13]);?)?';
               $pattern .= ')?';
            }
            $pattern .= $ra[$i][$j];
         }
         $pattern .= '/i';
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
         $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
         if ($val_before == $val) {
            // no replacements were made, so exit the loop
            $found = false;
         }
      }
   }
   return $val;
}?>
/php

et pour afficher la page
$pageOK array('site'> 'site.php',
                  'mymenu'=>'mymenu.php',
                  'mydog'=>'mydog.php',
                  'club_v'=>'club_dr.php',
                  'check'=>'wait.php',
                  'support_clientel' => './cgi-bin/ttx/ttx.cgi');

  // On teste que le parametre d'url existe et qu'il est bien autorise
  // -----------------------------------------------------------------
 
$page = htmlspecialchars($page);
$page=str_replace("%3E","",$page);
htmlentities($host, ENT_QUOTES, 'UTF-8');
//
RemoveXSS($_POST);
RemoveXSS($_GET);
RemoveXSS($pageOK);

if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
    //
   
    //
    if(!eregi("http://",'$pageOK')){ //si la page contient http
    RemoveXSS($_GET['page']);
      include($pageOK[$_GET['page']]);
    }

}else{
RemoveXSS($_GET['page']);
      include("chien1.php"); //si erreur retour a cette page
}
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
19 mai 2007 à 18:15
enfin voila tout mon site est sensible a la dite faille si vous avez une solution quelconque je suis preneur tout ce qui se situe apres le ? est sensible a la faille

?<ScRiPt%20%0a%0d>alert(2050041070)%3B</ScRiPt>.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
19 mai 2007 à 18:21
Re,

J'aimerais reproduire ta soit-disant "attaque" chez moi, mais je n'y arrive pas...
T'es sûr que c'est pas plutôt ton serveur qui est mal configuré ?

Tu peux me donner un script php et me dire comment l'appeler dans l'url pour reproduire cette "attaque" ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
19 mai 2007 à 20:16
oui mais bon ca ne m aide pas plus
j ai decouvert cette faille surement connue qui ne fonctionne que si script est ecrit comme ca ScRiPt

un example parmis plein d autres

http://www.supanight.com/page/accueil.php/%3E%22%3E%3C?phpinfo();?%3E

mais je n ai spas de soluce a ce jour si tu peut m aider
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
19 mai 2007 à 21:12
Non mais d'accord, mais ton truc, ça exécute pas du PHP de toute façon. C'est comme si je bloquais les CSS, ça changerait bien l'affichage de la page, quoi.
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
19 mai 2007 à 21:54
non mais ca peut executer du code a toi de changer tu peut faire un alert donc injecter du java script la question est coment empecher ca !!!
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
19 mai 2007 à 22:08
=> URL Rewriting
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
19 mai 2007 à 23:15
oe mais ca regle pas le probleme de securite on doit pouvoir le faire sans url rewirting perso j essaie de trouver la soluce mais bon je retourne mes variables dans tous les sens je ne trouve pas
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
19 mai 2007 à 23:50
Je vois pas où est le problème en fait.
Je te dis que j'arrive pas à reproduire ton "attaque" et toi tu me dis que ça règle pas ton problème... On peut pas avancer...
Prouve moi qu'il s'agit réellement d'une attaque...

Je n'ai pas réussi à exécuter de Javascript avec ton "truc".
Tout ce qu'on peut faire, c'est bloquer le chargement de la feuille CSS et d'images si elles sont appelées avec des URL relatives (puisque tu rajoutes un / dans l'url, pour le navigateur, le chemin n'est plus bon, d'où erreur de recherche des fichiers en question). La belle affaire.

Donne moi :
- un script PHP que tu utilises et qui est sensible à cette "faille" dont tu parles
- l'url que je dois utiliser pour "attaquer" ce script

Evidemment, si ton attaque n'exécute pas de PHP, cest pas une attaque. Si la seule personne pour qui un site est "défacé" est le "pirate", alors il me suffit de bloquer les CSS avec AdBlock+, ou de ne pas exécuter Javascript, ou autre...

J'ai vraiment du mal à comprendre en quoi ton machin est une faille...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 mai 2007 à 09:04
Hello,

urldecode () puis strip_tags () sur ton bin's.
Ceci dit : on TESTE ce qui vient du client avant de s'en servir.
T'attends page=login, page=vente...etc, pas truc=bidule. Si t'as truc, ou bidule...ou plutôt, si t'as pas page ET login, ou page ET vente, etc...tu ne fais RIEN.
C'est la base de la sécurisation d'un code : on utilise que ce que l'on s'attend à utiliser, rien d'autre.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 mai 2007 à 11:18
Salut,

Je n'ai pas tout compris, comme neigedhiver, et que je pas lu ton script (mal aux yeux avec les lignes de codes toutes noires...).

Mais si tu veux vraiment blinder tes scripts, la meilleur methode est celle dite de "la liste banche".

Explication :
Apparement la faille passe dans le paramêtre "lang" de ton script...
Des "lang" imaginables, il n'y en a pas 15 000 ! En gros, et selon ton site : fr, en, it, de, es, pl, cz, ...
Bref, tu listes toutes les possibilités : $langs = array('fr', 'en', 'it', 'de', 'es', 'pl', 'cz');
Et tu vérifies que le paramêtre "lang" en fait parti :

$lang = $langs[ (int) array_search($_GET['lang'], $langs) ];

Et voilà ! si le param n'est pas trouvé dans la liste, il sera par défaut le premier de ta liste [ (int)FALSE ===0 ].

Bien sûr, on ne peut pas toujours faire la liste complète des possibilités... Le peux-tu ?

A+
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
20 mai 2007 à 11:48
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
20 mai 2007 à 15:42
une soluce les gars ???
bon alors pour l interpretation des pages je vais essayer d etre explicite

la ou est le page ok c est dans l index et dans un div
perso j ai essayer pas mal de truc je sais que c es depuis l integration de l ajax
mais bon comment enlever cette faille ???

dans index.php
+----------------------------------------------------------------------+
| include top pour le head +
|///////////////////////////////////////////////////////////////////////
| | | |
| left | $pageOK array('site'> 'site.php',
'members' => 'members.php',
'admin' => 'admin.php',
'view_site' => "$builsite" ,
'ticketadm' => 'reponseadm.php',
'admin_cadeau'=>'admin_parrain_categories.php',
'admin_cadeau_add'=>'admin_cadeau_add.php',
'admin_race_add'=>'admin_race_add.php',
'admin_dog_categories'=>'admin_dog_categories.php',
'alldog_display'=>'alldog_cat.php',
'my_shell'=>'my_shell.php',
'v_vente_de_chien'=>'view_vente_chien.php',
'support_clientel' =>'./cgi-bin/ttx/ttx.cgi');

// On teste que le parametre d'url existe et qu'il est bien autorise
// -----------------------------------------------------------------

if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {

if(!eregi("http://",'$pageOK')){ //si la page contient http
include($pageOK[$_GET['page']]);
}
}else
{
include("chien1.php"); //si erreur retour a cette page
} | |
| | | |
| | | |
| | | |
+------------------------------------------------------------------------
+
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
20 mai 2007 à 15:44
au fait dans le forum comment syntasiser le code ?? c est [code] [php] ???
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 mai 2007 à 16:14
Pour la syntaxe, tu utilise la fonction 'highlight_file' de PHP via une de tes pages de test et tu copie/colle :

<?php
 $pageOK = array('site' => 'site.php',
                  'members' => 'members.php',
  'admin' => 'admin.php',
  'view_site' => "$builsite" ,
  'ticketadm' => 'reponseadm.php',
'admin_cadeau'=>'admin_parrain_categories.php',
  'admin_cadeau_add'=>'admin_cadeau_add.php',
  'admin_race_add'=>'admin_race_add.php',
'admin_dog_categories'=>'admin_dog_categories.php',
  'alldog_display'=>'alldog_cat.php',
  'my_shell'=>'my_shell.php',
  'v_vente_de_chien'=>'view_vente_chien.php',
  'support_clientel' =>'./cgi-bin/ttx/ttx.cgi');

  // On teste que le parametre d'url existe et qu'il est bien autorise
  // -----------------------------------------------------------------

if ( (isset($_GET['page'])) &amp;&amp; (isset($pageOK[$_GET['page']])) ) {

    if(!eregi("http://",'$pageOK')){ //si la page contient http
      include($pageOK[$_GET['page']]);
}
}else
{
      include("chien1.php"); //si erreur retour a cette page
}
?>

Concernant ta faille, tu ne nous as toujours pas donné le code fautif... Je t'aide, c'est par là :
<TD background="images/right_top.png" WIDTH=571 HEIGHT=181 ALT="">
<div class="Style9" style="padding-top:140px;padding-left:0px"><a href='index.php?&lang=>\'><ScRiPt

>alert(1736183224);</ScRiPt>'>.:ACCEUIL:.<a/> __ <a href="journal.php">.:JOURNAL:.<a/>
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 mai 2007 à 16:16
ET ben la colorisation syntaxique n'a pas marchée....
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
20 mai 2007 à 17:48
ben justement je le cherche ce code fautif je ne le trouve pas ...
ca fais la 3 jours que je cherche et impossible de mettre la main desus

en effet la coloration marche pas
donc d apres ce que tu me dit la faille vient du script pour la lang ?
je le mets ici
[php]
<?php

 if ($_GET['lang']=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
  	 include('lang/fr-lang.php');
 $lang='fr';
 $flag="";
   	 } 
   	 
 else if ($_GET['lang']=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
 include('lang/en-lang.php');
 $lang='en';
 $flag="";
} 
else if ($_GET['lang']=='nl') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
 include('lang/nl-lang.php');
 $lang='nl';
 $flag="";
}
  	 
   	 else {// si aucune langue n'est déclarée on inclut le fichier fr-lang.php par défaut
   	 include('lang/fr-lang.php');
 $lang='fr';
 $flag="";
 	 }
 ?>
/php
0
gfpl Messages postés 172 Date d'inscription samedi 11 août 2012 Statut Membre Dernière intervention 9 avril 2011
20 mai 2007 à 17:54
ok j ai essayer ca dal le script decid-lang.php
$carset = array("<", ")", "'");
$lang = str_replace($carset, "", $pageOK);
$_GET['lang']= str_replace($carset, "", $lang);

si vous voyez autre choses ?
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 mai 2007 à 18:00
Salut,

Toujours pas le bon endroit...

Recherche le terme "images/right_top.png" dans tout tes scripts... L'inclusion fautive est juste aprés.
0
Rejoignez-nous