1. Tronquer le contenu de la requête
Si vous souhaitez ignorer les scripts de la requête. Par exemple, pour le traitement ci-dessous, la requête nécessite la condition active=1 mais on peut commenter (--, -- -, -+, #, /*, /**/, // , ;%00…) et ignorez-le. Lors du minage, nous ne savons souvent pas ce que fait le contenu restant de la requête, donc l'utilisation de commentaires dans ce cas est très efficace.
Après commentaire, notre requête devient :
2. Contourner le filtrage des mots clés
un. Commentaires en ligne
Les commentaires en ligne sont utilisés très efficacement pour contourner le filtrage des espaces blancs. Vous pouvez utiliser les caractères suivants pour contourner le filtrage des espaces : /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Par exemple:
Ou contournez le filtrage par mots clés (disponible avec MySql). Dans l'exemple ci-dessous, les mots-clés union et password sont dans la liste noire donc ils ont été bloqués. On peut le contourner en :
b. Remplacer les mots-clés
Lorsqu'on exploite l'injection SQL, nous utilisons souvent des mots-clés tels que : union, select, information_schema... Dans de nombreux cas, les programmeurs remplacent simplement ces mots-clés :
Nous pouvons facilement voir que le code de traitement ci-dessus fait défaut. S'il s'agit simplement d'une correspondance de modèles, le contournement est extrêmement simple. Appliquons la sensibilité à la casse, où les lettres majuscules et minuscules sont interprétées différemment.
Maintenant, au lieu d'utiliser le mot-clé :
select, union…
Nous utiliserons:
SeLEcT, UniOn…
La base de ce contournement est que les systèmes de gestion de bases de données ne font pas de distinction entre les cas et les mots-clés de cas.
Dans certains cas, l'application web filtrera tout ou partie de certains mots-clés (union, select...). Nous contournerons comme suit :
id=1+uniunionon+SeLselectecT+1,2,3-- -
Une fois l’union et la sélection filtrées par l’application Web, nous nous retrouverons avec la requête correcte comme suit :
id=1+union+SeLecT+1,2,3-- -
c. Encodage de caractère
Nous pouvons contourner le moment où WAF (Web Application Firewall) bloque les mots-clés en les codant. De nombreuses applications WAF ne décoderont la requête qu'une seule fois et filtreront les mots-clés de la liste noire, puis encoderons la requête deux fois afin qu'elle puisse être contournée dans ce cas.
3. Contourner les blocages des guillemets simples et doubles
- Regardons un exemple avant d'en savoir plus sur ce contournement.
Dans ce scénario, nous avons une table dans la base de données nommée utilisateurs. La tâche suivante consiste à connaître le nom de la colonne dans le tableau pour obtenir ses informations. Comme dans la requête ci-dessus, nous utilisons la condition : table_name='users'. Mais si les guillemets simples (') et les guillemets doubles (") sont bloqués par WAF, nous ne pouvons plus utiliser « utilisateurs » ou « utilisateurs ». Alors, comment résoudre ce problème ? Le système de base de données intégré nous offre une fonction qui résout très bien ce problème, qui est la fonction CHAR( ) (pour Oracle, c'est CHR()). Par exemple, dans la requête ci-dessus, nous la contournerons en :
Les programmeurs PHP connaissent très bien la fonction addlashes(). La fonction addlashes() a pour effet d'ajouter avant des caractères spéciaux tels que les guillemets simples ('), les guillemets doubles ("), les barres obliques inverses (\), le caractère NUL (octet nul) "\" pour aider le système de gestion de base de données. Existe-t-il pas de difficulté ni de confusion lors de la manipulation des chaînes contenant ces caractères ? Ainsi, lorsque l'on veut injecter dans la requête selon le script : name='someName' ou '1'='1'-- Les résultats ne sont plus ceux attendus.
Cependant, il existe une technique pour contourner la fonction addlashes() afin d'injecter des guillemets simples ('). Cette technique est publique depuis assez longtemps et sa mise en œuvre est assez difficile car elle est liée au style de codage appliqué au site Web.
4. Contournez l'erreur "Mélange illégal de classement pour l'opération UNION"
Dans certains systèmes de gestion (généralement trouvés dans MySql), lorsque les bases de données et les tables ont été définies sur collation, lors de l'utilisation du mot-clé UNION, l'erreur « mélange illégal de collation pour l'opération UNION » sera signalée. La définition du classement peut être due à l'intention du concepteur de base de données ou au paramètre par défaut de MySql. En cas d'utilisation de l'union, nous devons nous assurer que la condition de sélection de valeur dans chaque champ doit avoir le type de code correspondant défini. À mon avis, cette erreur est assez courante, notamment pour les CMS exécutant Apache MySql. Les gens peuvent en savoir plus sur : http://bugs.mysql.com/bug.php?id=57926.
Dans ce cas, nous pouvons utiliser des moyens de conversion vers le type de codage approprié.
Par exemple dans le cas suivant :
Dans la requête ci-dessus, si le classement de la colonne 1 est défini sur Unicode-UTF8 ou _latin1, par exemple, alors ce qui est sélectionné dans la colonne 2 devra être converti en code correspondant. On peut forcer le style comme suit :
Nous voyons un inconvénient à cette méthode de contournement : il faut savoir que le code collationné est _latin1. Une meilleure façon de le contourner, à mon avis, est d'utiliser les fonctions d'encodage et de décodage hexadécimal et non hexadécimal.
Il existe de nombreuses autres fonctions qui peuvent être utilisées à la place de hex et unhex.