Académique Documents
Professionnel Documents
Culture Documents
SJSU ScholarWorks
Citation recommandée
Halde, Jagdish, "SQL Injection analysis, Detection and Prevention" (2008). Projets de maîtrise. 82.
DOI : https://doi.org/10.31979/etd.mnyq-9gq5
https://scholarworks.sjsu.edu/etd_projects/82
Ce projet de maîtrise vous est proposé en accès libre et gratuit par le service des mémoires de maîtrise et
de la recherche universitaire de SJSU ScholarWorks. Il a été accepté pour inclusion dans les projets de
maîtrise par un administrateur autorisé de SJSU ScholarWorks. Pour plus d'informations, veuillez contacter
scholarworks@sjsu.edu.
Analyse, détection et prévention des injections SQL
Un projet
d'écriture
présenté à
State University
En exécution partielle
Par
Jagdish Halde
Printemps
i
2008
ii
Copyright © 2008
Jagdish Halde
iii
RÉSUMÉ
Les sites web sont dynamiques, statiques et, la plupart du temps, une combinaison
des deux. Les sites web ont besoin d'une protection de leur base de données pour assurer
leur sécurité. Une injection SQL attaque les applications web interactives qui fournissent
des services de base de données. Ces applications prennent en compte les entrées de
l'utilisateur et les utilisent pour créer une requête SQL au moment de l'exécution. Dans
une attaque par injection SQL, un pirate peut insérer une requête SQL malveillante
comme entrée pour effectuer une opération non autorisée sur la base de données. En
utilisant les attaques par injection SQL, un pirate peut récupérer ou modifier des
la confidentialité et la sécurité des sites web qui dépendent totalement des bases de
données. Ce rapport présente une "réingénierie du code" qui protège implicitement les
applications écrites en PHP contre les attaques par injection SQL. Il utilise une approche
originale qui combine l'analyse statique et l'analyse dynamique. [Dans ce rapport, j'ai
mentionné une technique automatisée pour éliminer les vulnérabilités d'injection SQL du
code Java en convertissant les entrées de texte brut reçues des utilisateurs en instructions
préparées. [3]
iv
REMERCIEMENTS
Inc.) pour avoir fourni des informations récentes sur mon sujet.
Ce fut un parcours difficile, mais gratifiant, que je n'aurais pas pu mener à bien
1
Table des matières
1.0 Introduction 5
2
5.0 SQLiX - Scanner d'injection Sql : 26
5.1 SQLiX avant l'amélioration : 26
5.2 Modules Perl utilisés dans SQLiX 27
13.0 Conclusion 57
Références 59
3
Liste des figures
4
14.0. Introduction
Ces dernières années, l'adoption généralisée de l'internet a entraîné des progrès rapides
population à des fins telles que les transactions financières, les activités éducatives et
confidentialité des données de leurs utilisateurs et, après des années de commerce en
ligne sécurisé, ces entreprises sont devenues des experts en matière de sécurité de
l'information. Les systèmes de base de données sur lesquels reposent ces sites web
sécurisés stockent des données non critiques ainsi que des informations sensibles, de
manière à permettre aux propriétaires des informations d'y accéder rapidement tout en
sensibles à partir d'une base de données en générant d'abord une requête qui provoquera
requête à la base de données souhaitée. Une telle approche pour accéder à des
informations privées est appelée injection SQL. Les bases de données étant
préoccuper de l'injection SQL. Bien que les systèmes de base de données actuels soient
peu vulnérables, le Computer Security Institute a découvert que chaque année, environ 50
% des bases de données subissent au moins une faille de sécurité. La perte de revenus
5
associée à ces failles a été estimée à plus de quatre millions de dollars. En outre, des
6
Defence Center" a conclu qu'au moins 92 % des applications web sont susceptibles de
faire l'objet d'une "attaque malveillante" (Ke Wei, M. Muthuprasanna, Suraj Kothari,
2007).
Pour mieux comprendre l'injection SQL, nous devons avoir une bonne compréhension
des types de communications qui ont lieu au cours d'une session typique entre un
typique entre tous les composants d'un système d'application web typique.
Une application web, basée sur le modèle ci-dessus, prend du texte en entrée des
utilisateurs pour extraire des informations d'une base de données. Certaines applications
web supposent que l'entrée est légitime et l'utilisent pour construire des requêtes SQL afin
d'accéder à une base de données. Comme ces applications web ne valident pas les
requêtes des utilisateurs avant de les soumettre pour récupérer des données, elles
deviennent plus sensibles aux attaques par injection SQL. Par exemple, des attaquants, se
7
faisant passer pour des utilisateurs normaux, utilisent un texte d'entrée malveillant
contenant des instructions SQL pour produire des requêtes SQL sur l'application web
8
du côté de l'application web. Une fois traitée par l'application web, la requête
correctifs afin de prévenir les vulnérabilités par injection de code SQL à partir
d'instructions SQL en texte clair. Dans le cadre d'une méthode automatisée, un serveur
les instructions SQL, générera un correctif et l'appliquera. Le processus peut être réalisé
par quelqu'un qui n'a pas d'expertise en matière de sécurité et qui sécurise le code
SQL.
l'ACM, et j'ai recueilli des informations sur des sites web afin d'acquérir des
connaissances suffisantes sur les attaques par injection de code SQL. Voici les articles
dans lesquels j'ai abordé différentes stratégies importantes pour prévenir les attaques par
1. Dans "Using Parse Tree Validation to Prevent SQL Injection Attacks" ACM, j'ai
abordé les techniques de découverte des injections SQL. Cet article couvre également très
bien la validation de l'arbre d'analyse SQL que j'ai mentionnée dans le rapport (Gregory
9
2. Dans "The Essence of Command Injection Attacks in Web Applications" ACM, ils ont
l'IEEE CNF, ils ont abordé brièvement le contexte, l'énoncé SQL et les méthodes de
Attacks", ils ont présenté une méthode originale pour protéger automatiquement les
applications contre les attaques par injection de code SQL. L'approche originale combine
sécuriser les propriétés existantes (Ettore Merlo, Dominic Letarte, Giuliano Antoniol,
2007).
5. Dans "Preventing SQL Injection Attacks in Stored Procedures", ils ont également
proposé une nouvelle approche pour protéger les procédures stockées contre les attaques
et détecter les injections SQL à partir du site (Ke Wei, M. Muthuprasanna, Suraj Kothari,
de l'analyse statique du code de l'application afin d'éliminer les vulnérabilités à l'égard des
attaque. La clé de cette attaque est qu'elle modifie la structure de l'instruction SQL
originale et identifie l'attaque par injection SQL. La méthode est divisée en deux phases,
l'une hors ligne et l'autre en cours d'exécution. Dans la phase hors ligne, les procédures
stockées utilisent un analyseur pour prétraiter et détecter les instructions SQL dans l'appel
toutes les requêtes SQL générées pendant l'exécution et liées à l'entrée de l'utilisateur, et
10
les vérifie par rapport à la structure originale de la requête SQL.
11
après avoir reçu les données de l'utilisateur. Une fois que cette technique détecte les
Il n'est pas nécessaire pour un attaquant de visiter les pages web à l'aide d'un
navigateur pour savoir si l'injection SQL est possible sur le site. En général, les attaquants
construisent un robot d'exploration du web pour collecter toutes les URL disponibles sur
chacune des pages web du site. Le crawler est également utilisé pour insérer des
caractères illégaux dans la chaîne de requête d'une URL et vérifier si le serveur envoie un
résultat d'erreur. Si le serveur envoie un message d'erreur, cela indique clairement que le
méta-caractère spécial illégal sera intégré à la requête SQL et que le site est donc exposé
à une attaque par injection SQL. Par exemple, Microsoft Internet Information Server
guillemet simple non encapsulé est transmis à SQL Server. Le robot d'exploration du web
Un arbre d'analyse n'est rien d'autre que la structure de données construite par le
pouvons vérifier si les deux requêtes sont égales. Lorsqu'un attaquant réussit à injecter du
code SQL dans une requête de base de données, l'arbre d'analyse de la requête SQL
12
prévue et l'arbre d'analyse de la requête de base de données sont comparés.
13
la requête SQL générée après l'entrée de l'attaquant ne correspond pas. La figure suivante
Figure 3 : La même requête SELECT que dans la figure 1, avec l'entrée de l'utilisateur
insérée.
Dans l'arbre d'analyse ci-dessus, la partie fournie par le programmeur est codée en dur et
la partie fournie par l'utilisateur est représentée par un nœud feuille vacant dans l'arbre
d'analyse ci-dessus. Un nœud feuille doit être la valeur d'un littéral et doit se trouver à
l'endroit où se trouve l'espace vacant. La requête SQL pour l'arbre d'analyse ci-dessus est
la suivante.
Les points d'interrogation sont des supports pour les nœuds feuilles d'entrée. [4]
14
2.3 Approche pour SQL CHECK :
<% !
// informations sur la connexion à la base de données
String dbDriver = "com.mysql.jdbc.Driver" ;
String strConn = "jdbc:mysql://"
+ "sport4sale.com/sport" ;
String dbUser = "manager"
;
Chaîne dbPassword = "athltpass" ;
// génère une requête à
envoyer String
sanitizedName =
replace(request.getParameter("name"),"'","''") ;
String sanitizedCardType =
replace(request.getParameter("cardtype"),
"'","''") ;
String query = "SELECT cardnum FROM accounts"
+ " WHERE uname='" + sanitizedName + "'"
+ " AND cardtype=" + sanitizedCardType + "
;"; try { // se connecter à la base de données
et envoyer la requête
java.sql.DriverManager.registerDriver(
(java.sql.Driver)
(Class.forName(dbDriver)).newInstance())) ;
javaq.sql.Connection conn =
java.sql.DriverManager.getConnecion(
strConn, dbUser, dbPassword) ;
java.sql.Statement stmt =
conn.createStatement() ;
java.sql.ResultSet rs =
stmt.executeQuery(query) ;
// génère une sortie html
out.println("<html><body><table>") ;
while(rs.next()) { out.println("<tr> <td>")
; out.println(rs.getString(1)) ;
out.println("</td> </tr>") ;
}if (rs != null) { rs.close() ;
}out.println("</table> </body> </html>") ;
} catch (Exception e)
{ out.println(e.toString()) ; } %>
Figure 4 : Une page JSP pour récupérer les numéros de cartes de crédit.
Les applications web présentent des vulnérabilités d'injection SQL parce qu'elles ne
nettoient pas les entrées qu'elles utilisent pour construire des sorties structurées. Prenons
l'exemple de l'extrait de code illustré à la figure 4. Le code est celui d'une boutique en
ligne. Le site web fournit un champ de saisie permettant à l'utilisateur de conserver les
15
informations relatives à sa carte de crédit, qu'il pourra utiliser lors d'achats ultérieurs.
Remplacer
16
est utilisée pour échapper aux guillemets, de sorte que tout caractère entre guillemets
simple dans l'entrée est considéré comme un caractère littéral et non comme un
empêchant un pirate de terminer la chaîne et d'ajouter du code d'injection SQL. Bien que
cardtype soit une colonne numérique, si un pirate passe 2 OR 1=1" comme type de carte,
tous les numéros de compte de la base de données seront renvoyés et affichés. [5]
Dans cette approche, ils suivent à travers le programme les sous-chaînes reçues de
programme est de bloquer les requêtes dans lesquelles les sous-chaînes d'entrée modifient
la structure syntaxique du reste de la requête. Il utilise les métadonnées pour surveiller les
entrées de l'utilisateur, affichées sous la forme de "_" et "_", pour marquer la fin et le
début de chaque chaîne d'entrée de l'utilisateur. Ces métadonnées font passer la chaîne
par des affectations et des concaténations, de sorte que lorsqu'une requête est prête à être
17
envoyée à la base de données, elle comporte des paires de marqueurs correspondants qui
18
annotée, appelée requête augmentée. Pour construire un analyseur syntaxique pour la
grammaire augmentée et tenter d'analyser chaque requête augmentée, Steve [5] utilise un
comme légitime si elle est analysée avec succès. Dans le cas contraire, elle ne respecte
pas les contraintes syntaxiques et est interprétée comme une attaque par injection SQL.
mentionnant les formes syntaxiques autorisées, elle réside sur le serveur web et exploite
les requêtes générées. Malgré la source de l'entrée, chaque entrée qui doit être passée
dans une requête est augmentée des métacaractères "_" et "_,". Enfin, l'application crée
des requêtes augmentées que SQLCHEKCK tente d'analyser. Si une requête est analysée
avec succès, SQLCHECK envoie les métadonnées à la base de données, sinon la requête
est rejetée.
Cette section donne une brève idée de la vulnérabilité de l'injection SQL et des
attaques d'injection SQL qui y sont liées. La vulnérabilité par injection SQL est la
validation des entrées. Cette validation d'entrée force l'entrée à modifier la structure d'une
suivant montre le code qui contient initialement une instruction SQL en texte brut et qui
produit dynamiquement la requête SQL sur la base d'une variable d'entrée (userISBN).
En outre, sans aucune vérification des entrées, il crée la requête SQL à l'aide de la
19
concaténation de chaînes de caractères.
20
"ResultSet rs = stmt.executeQuery("select
amount from" "books where isbn = '" +
userISBN + "'") ;"
Dans cet exemple, en utilisant des mots-clés connus de l'instruction SQL, l'attaquant
tente malicieusement de mettre à jour les informations sensibles dans les bases de
système ne devrait pas permettre. L'attaquant peut donner les valeurs d'entrée
"appended OR '1'='1 clause" rend toute la clause where toujours vraie et, par conséquent,
la requête ouvre la déclaration SQL pour récupérer et envoyer tous les résultats sans
articulation au lieu du résultat qui était censé être envoyé à l'utilisateur. L'attaque a réussi
grâce à la clause OR '1'='1 qui rend la valeur de la clause where vraie dans toutes les
conditions. [5]
Deux types d'instructions SQL sont utilisés pour prévenir les attaques par injection SQL.
Les instructions qui ont été pré-compilées avec la requête SQL sont appelées
instructions préparées. La requête SQL n'est rien d'autre que la représentation en texte
programmé à la base de données. Les instructions préparées dans les requêtes SQL lient
des variables qui vous permettent d'introduire des données dans les requêtes suivantes. En
Java, la méthode set input est utilisée pour définir une variable de liaison, par exemple
21
setString(index, output) pour une variable de sortie de type String. Les méthodes set
offrent la sécurité supplémentaire de confirmer chaque variable d'entrée par rapport à son
22
L'objectif des instructions préparées est d'accroître la sécurité et l'efficacité. Les
instructions préparées sont conçues pour exécuter la même instruction un certain nombre
de fois lors de la compilation de l'instruction. Cette propriété n'est pas disponible dans les
instructions SQL en texte clair. La fonctionnalité de la fonction préparée est la même que
celle des instructions SQL en texte brut, mais les instructions préparées sont plus
La limite des instructions préparées est qu'elles ne peuvent être créées que si la
l'instruction, ce qui n'est pas possible avec les instructions préparées. Les instructions
préparées sont précompilées, une fois que les instructions sont construites par l'objet
Connexion en Java. Lorsque toutes les entrées sont définies dans l'instruction et que celle-
imposant des contraintes à l'environnement d'exécution afin d'éviter les instructions SQL
malveillantes. Dans cette méthode, la solution proposée consiste à éviter une attaque par
23
instruction SQL personnalisée.
24
de validation, et l'intégration de la déclaration susceptible dans le code de validation.
[9]
Pour obtenir un secret parfait, nous ajoutons l'instruction SQL sécurisée à l'instruction
vulnérable se trouve dans l'état d'une méthode de signature détectable, il n'est pas
instructions, nous devons également modifier l'API. Nous pouvons obtenir le secret sans
redondance dans l'objet, nous devons remplacer complètement les instructions SQL en
texte clair. Dans les cas ci-dessus, nous remplacerons l'appel d'exécution par
SQL) ;
26
L'appel de formation permet de prévenir les attaques par injection SQL en contournant
SQL. De cette manière, nous pouvons atteindre le secret parfait, prévenir la vulnérabilité
La prévention des constructeurs de garde basée sur un modèle est une méthode
efficace pour prévenir les attaques par injection de code SQL. Cette méthode est fondée
situation d'accès à la base de données qui emploierait une attaque par injection SQL. En
données, nous pouvons éviter une attaque par injection SQL. Comme le montre la figure
6, nous instrumentons d'abord la chaîne PHP pour collecter des échantillons de requêtes
ajouter une instruction de sortie avant les appels à l'interface d'application de la base de
Sql_query(... Expression...) ;
Après avoir passé cette expression par une approche automatisée, elle devient :
$string = Expression ;
fRead($file handle ; $string)) ;
$result = sql_query($ string) ;
27
Après avoir exécuté les cas de test fiables pour recueillir les chaînes de texte en clair
fiables, il est facile de créer des protections de modèle à partir d'ensembles d'AST
conduisant à des requêtes légitimes. Il est facile de créer des gardes-modèles à partir
d'ensembles d'AST conduisant à des requêtes légitimes. Les requêtes justifiables sont
analysées par une approche automatisée et les "AST" correspondants sont stockés pour
chaque site d'appel. Pour éviter la généralisation entre les requêtes, les "AST" sont
28
Figure 6 : "Protection automatisée" [13]
29
Les AST sont généralisés par type plutôt que par image, car les constantes, les chaînes
et d'autres types de données sont également stockés dans les AST. D'autre part, les
identificateurs dépendant de l'application, tels que les noms des tables, le nombre de
la requête SQL, ce qui joue un rôle crucial pour empêcher la substitution malveillante des
noms de tables ou de colonnes dans les requêtes valides. Par conséquent, cette méthode
permet un certain nombre de requêtes avec la même structure syntaxique, mais avec des
valeurs de données différentes. À l'aide d'un site d'appel spécial, le gardien de modèle
invoque l'analyseur SQL de la base de données sur laquelle nous travaillons actuellement
et obtient l'AST SQL correspondant. L'"AST" formé est comparé aux "AST" valides
être traitées dans l'interface de programmation de la base de données, et toutes les autres
requêtes sont rejetées. De cette manière, nous empêchons l'accès à la base de données à
En général, les "AST" sont stockés sous forme d'images, mais ils sont stockés sous
forme de chaînes de jetons contenant des types de jetons où les noms de tables et de
champs d'une application sont devenus des mots-clés. Les noms des tables ont été stockés
en tant que types de jetons d'identification dans la configuration locale. Dans la section
Un exemple de requête fiable est présenté ci-dessous. Dans cet exemple, l'appel au
30
"FROM phptb240t posts"
"OÙ"
"Poster_id = 5"
31
Où phptb240 posts est un nom de table locale dépendant de la configuration. L'identifiant
browse:php : 240
"SELECT POST ID"
"FROM SQL ID"
"WHERE"
"POSTER ID OP EQUAL INTEGER LITERAL"
Dans l'exemple ci-dessus, nous pouvons observer que les posts phptb240 sont
discernés comme un identifiant, et que l'identifiant du poster est utilisé comme mot-clé
remplacement des noms de champs par des noms confidentiels, nous devons prévenir les
l'exemple ci-dessus peuvent être accédés dans n'importe quelle configuration locale de
phptb, mais ils ne seront pas remplacés par d'autres champs. Comme dans l'exemple
précédent, la valeur de l'identifiant de l'affiche ne peut être remplacée que par une valeur
entière. Les instructions de requête SQL sensibles peuvent être sécurisées en les
remplaçant par des protections basées sur un modèle qui exécutent les contrôles
d'application de la base de données appropriée pendant que les contrôles sont réussis.
source pour changer l'appel de mySql aux protections basées sur un modèle". La figure 7
32
Figure 7 : Exemple conceptuel de garde de modèle en Java. [13]
l'application contre une attaque par injection de code SQL. La construction de la garde
basée sur un modèle est équivalente à la longueur moyenne des requêtes SQL exécutées
dans le test et au nombre de cas de test. Ettore Merlo, Dominic Letarte et Giuliano
33
qui est très simple et qui a une portée suffisante pour rendre ce modèle plus compliqué
afin d'augmenter la puissance des requêtes d'analyse. Le modèle de garde est bien
meilleur que la forme fixe par méthode de site d'appel. La construction du modèle de
sécurité. Le faible nombre de requêtes légitimes sur un site d'appel affecte également
Stephen Thomas et Laurie Williams ont expliqué en détail les méthodes utilisées pour
1) Analyse statique
Ces techniques sont basées sur les procédures stockées, les auteurs ont utilisé le
graphique de flux de contrôle qui notifie les entrées de l'utilisateur dans l'instruction SQL
dynamique construite. Les graphes de flux de contrôle sont très utiles pour minimiser
l'ensemble des instructions SQL à vérifier. Dans l'analyse du temps d'exécution, nous
accédons aux informations sur les instructions stockées de l'Automate à états finis pour
fausses. [2]
34
procédures stockées qui est utilisé pour extraire le "graphe de flux de contrôle" des
procédures stockées, nous pouvons voir en détail le graphe de contrôle dans la section
35
dans le graphe de flux de contrôle, puis utiliser la méthode de retour en arrière pour
vérifier que toutes les instructions ont participé à la formation de l'instruction SQL dans
le graphe de flux de contrôle. Dans le graphe SQL, les instructions qui dépendent de
l'entrée de l'utilisateur sont filtrées et des drapeaux sont placés dessus pour surveiller leur
états finis, nous comparons l'instruction avec l'instruction SQL créée dynamiquement à
partir des entrées de l'utilisateur avec l'instruction SQL d'origine. L'instruction créée par
sera signalée par un drapeau comme instruction dangereuse et fournira les informations
correspondantes. Plusieurs instructions d'exécution peuvent être possibles pour une seule
et seules les instructions qui acceptent l'entrée de l'utilisateur sont vulnérables à une
attaque par injection SQL. En utilisant le graphe de contrôle SQL, nous essayons
d'optimiser la requête qui doit être traitée dynamiquement afin de fournir une validation.
représentées par des nœuds à l'intérieur d'une limite représentée par un cercle en
pointillés. I1, I2 et I3 sont les trois entrées différentes reçues des utilisateurs, qui se
trouvent à l'extérieur des limites logiques. Supposons qu'un utilisateur saisisse l'entrée I
dans la requête SQL Q et que la relation entre l'entrée I et la requête Q soit représentée
par R. D représente les dépendances dans le diagramme SQL qui lie une requête SQL à
une autre. L'entrée de l'utilisateur "I" acceptée par la requête précédente est transférée à
une autre requête par le biais du lien de dépendance. Dans les requêtes SQL, l'un de ces
nœuds est sélectionné comme requête représentative et est considéré comme le point de
36
départ des autres requêtes. Dans la figure, les liens de dépendance sont représentés par
[1] [2]
37
Figure 8 : Graphique de contrôle SQL [1]
2) Le graphe de contrôle SQL n'inclut pas la requête qui ne prend pas en compte les
données de l'utilisateur.
Dans l'analyse dynamique, la fonction de vérification des attaques par injection SQL
est utilisée pour catégoriser les entrées de l'utilisateur. Dans cette méthode, l'auteur a
utilisé l'identifiant de la "session en cours" pour identifier les données saisies par
39
montre l'automate à états finis qui accepte les entrées de l'utilisateur. Pour vérifier la
légitimité de la déclaration SQL reçue de l'utilisateur, la déclaration SQL avec les entrées
finis. Si les requêtes SQL générées au moment de l'exécution à l'aide des entrées de
l'utilisateur ne satisfont pas à la sémantique des requêtes SQL prévues dans l'automate à
états finis, ces requêtes SQL sont considérées comme une attaque par injection de code
SQL ; dans le cas contraire, ces requêtes sont autorisées à accéder à la base de données.
n'autoriser que les requêtes légitimes à accéder aux bases de données. Grâce à l'utilisation
d'automates à états finis, cette méthode permet d'obtenir un secret parfait pour filtrer les
40
5.0 SQLiX - Sql Injection Scanner :
SQLiX Scanner est disponible sur le site de l'Open Web Application Security Project
(OWASP). L'OWASP est une communauté mondiale libre et ouverte qui se consacre à
l'amélioration de la sécurité des logiciels d'application. SQLiX est codé en Perl, capable
données dorsale. SQLiX utilise divers modules Perl de CPAN - CPAN n'est rien d'autre
que le Comprehensive Perl Archive Network (réseau complet d'archives Perl). Sur
CPAN, vous pouvez trouver un grand nombre de logiciels Perl et leur documentation afin
que n'importe quel codeur puisse utiliser ces bibliothèques et modules Perl dans ses
projets. Nous verrons plus en détail les modules Perl utilisés par SQLiX dans la section
généralement de méta-caractères tels que les guillemets simples et les guillemets doubles.
2) Méthode d'injection aveugle : Dans les méthodes d'injection SQL aveugle, les
applications web qui sont vulnérables à l'injection SQL ne sont pas visibles pour un
attaquant. Ces attaques sont affichées différemment en fonction des résultats d'une
L'URL original :
SQLiX essaie de comparer le contenu html de la requête originale avec les URL suivantes.
41
i) http://localhost/acu/indexacu.php/news.php?id=25%20or%201=1
42
ii) http://localhost/acu/indexacu.php/news.php?id=25%20or%201=0
si l'URL i) fournit le même résultat qu'une requête http 0) et que l'URL ii) ne le fait pas,
le SQLiX conclura qu'une injection SQL est possible sur l'URL donnée.
SQLiX utilise également plusieurs méthodes pour déterminer si le script côté serveur actuel est
2) Injection aveugle basée sur des nombres entiers, des chaînes de caractères ou des
instructions.
SQLiX possède trois API principales qui permettent de construire les différents types
d'attaques SQL. SQLiX.pl est le fichier principal qui gère et invoque ces API sur chaque
URL empilée.
Crawl est la spécification cible qui prend l'URL donnée comme URL principale et
parcourt toutes les pages web et tous les formulaires disponibles sous cette URL. La
Le crawler a besoin du module Perl Spider.pm pour parcourir l'ensemble du site web et
collecter toutes les URL disponibles sur chaque page et les empiler dans un tableau pour
43
Pour collecter les URL des pages et des formulaires, SQLiX utilise le module Perl
Mechaniz.pm. C'est le cœur de l'outil qui joue un rôle crucial dans la collecte des URL
pour la suite du processus. SQLiX utilise le module Checksite.pm pour vérifier et valider
l'URL disponible sur chaque page web du site. Il valide d'abord l'URL, puis l'empile pour
la suite de l'opération d'injection SQL. Le Spider utilise le mécanisme des règles du robot.
Cela signifie qu'il récupère toujours le fichier /robots.txt à la racine du serveur web pour
voir si nous sommes autorisés (en fait "non interdits") à accéder aux pages en tant que
robot. Spider utilise RobotRule.pm pour lire le fichier robot.txt disponible sur le serveur
et, conformément aux règles, il accède aux URL du site. Si le propriétaire du site interdit
l'exploration de certaines URL de son site, il doit inscrire ces URL dans le fichier
robot.txt afin que personne ne puisse explorer ces URL. Cette règle est suivie par tous les
développeurs de crawlers.
SQLiX possède une fonction très intéressante et importante par rapport aux autres
scanners : la possibilité de créer sa propre fonction. Vous pouvez créer votre propre
fonction pour injecter un code malveillant dans la base de données et tester différentes
vulnérabilités. Cette fonction n'est pas disponible dans les autres scanners de vulnérabilité
disponibles sur le marché. De plus, au lieu d'indiquer l'URL principale dans l'interface de
principales que vous souhaitez explorer dans un fichier et appeler ensuite ce fichier.
L'option Exploit est utilisée pour attaquer l'une des vulnérabilités qui ont été trouvées
dans l'attaque par injection et tentera d'extraire des informations. Par défaut, la version de
44
V est l'option utilisée pour afficher le message de débogage et les informations sur les
C:\SQLix\SQLiX_v1.0>
C:\SQLix\SQLiX_v1.0>perl SQLiX.pl -crawl="http://test.acunetix.com" -all -exploit -v=2
======================================================
-- SQLiX --
⌐ Copyright 2006 Cedric COCHIN, tous droits réservés.
======================================================
46
[INFO] longueur : 255
RÉSULTATS :
La variable [artiste] de [http://test.acunetix.com/artists.php?artist=3] est
susceptible de faire l'objet d'une injection SQL [Commentaire sans guillemets -
MySQL].
La variable [artist] de [http://test.acunetix.com/listproducts.php?artist=3] est
vulnérable à l'injection SQL [Message d'erreur (NULL) - MySQL].
La variable [pic] de [http://test.acunetix.com/product.php?pic=7] est vulnérable à
l'injection SQL [Commentaire sans guillemets - MySQL].
La variable [cat] de [http://test.acunetix.com/listproducts.php?cat=4] est
vulnérable à l'injection SQL [Message d'erreur (NULL) - MySQL].
A partir du résultat, vous pouvez vous faire une idée de la manière dont SQLiX collecte
toutes les URL du site web et détecte les URL vulnérables qui sont susceptibles de faire
J'ai réalisé avec succès trois améliorations majeures dans le cadre de ce projet
i) Amélioration du crawler pour qu'il gère la méthode HTTP post et remplisse les formulaires
automatiquement.
iii) Ajout d'un module de détection des attaques de type Cross Site Scripting (XSS).
47
6.2 SQLiX HTTP Post Method et remplir automatiquement le formulaire :
Améliorer le crawler pour qu'il puisse gérer la méthode HTTP Post et remplir les
formulaires disponibles sur la page web est l'une des étapes les plus difficiles et les plus
critiques de mon projet. Cette amélioration a rendu SQLiX plus puissant que le précédent.
6.2.1 Travailler :
Après amélioration, le crawler est capable de traiter les requêtes de la méthode HTTP
disponibles sur la page web en cours. Après avoir détecté les formulaires sur la page Web
actuelle, mon code vérifie le type d'entrée, le nom du type d'entrée et le type de type
d'entrée de chaque champ du formulaire. Dans l'étape suivante, mon code remplit les
données fictives dans chaque champ du formulaire en fonction de leur type. Une fois les
données dans la base de données et génère le contenu. Le contenu n'est rien d'autre que le
lien créé à partir de tous les noms de champs du formulaire et des données fictives
programme principal SQLiX .pl pour créer différentes combinaisons de l'URL d'origine
transféré à la méthode qui injecte toutes les combinaisons d'URL dans la base de données
afin d'obtenir des informations non autorisées. La capacité de SQLiX à injecter un certain
Pour mettre en œuvre ce module, j'ai utilisé les modules Perl CPAN suivants.
49
iii) Html::Form
LWP user agent est le module Perl utilisé pour implémenter l'agent utilisateur. En fait,
UserAgent est une classe dont j'utilise les objets pour envoyer des requêtes web. En
général, une application crée un objet LWP::UserAgent, configure cet objet avec des
paramètres, puis crée une instance de HTTP::Request pour la requête à effectuer. Cette
requête est ensuite transmise à l'une des méthodes de requête de UserAgent. UserAgent
vous répond alors sous la forme d'un objet HTTP::Response. Il existe trois méthodes
pratiques pour envoyer et recevoir des requêtes courantes : GET ( ), POST ( ) et HEAD (
communication soit ressentie comme un style http, cette bibliothèque construit des objets
Cette méthode construit un nouvel objet LWP::UserAgent et le renvoie. Vous devez fournir
des arguments sous forme de paires clé/valeur pour définir l'état initial. Maintenant, $ua
Le module HTML Parser est utilisé pour créer un objet qui reconnaîtra et différenciera
le balisage et le texte brut dans les documents HTML. Les objets de cette classe
d'événements correspondants. Le document que vous devez transmettre peut être transmis
par morceaux arbitraires. Je transmettrai les URL qui sont empilées par le robot
50
et le texte du html. Après avoir empilé toutes les balises dans un tableau local, ce tableau
En général, un formulaire se compose d'un certain nombre de types d'entrées qui ont
généralement des noms et qui peuvent avoir divers attributs et valeurs. L'état d'un
formulaire peut être extrait et appelé à fournir un objet HTTP::Request qui peut être
Un document HTML sera analysé et créera des objets HTML::Form pour chaque élément de
formulaire.
dans ce document à l'aide de la méthode de classe paser(). Si vous appelez cette méthode
dans un contexte scalaire, elle ne renvoie que le premier formulaire, et si elle renvoie une
liste vide, c'est qu'aucun formulaire n'a été trouvé. La variable $base est utilisée comme
Voici le petit extrait que j'ai utilisé pour récupérer le contenu des formulaires.
use LWP::UserAgent
; use HTML::Form ;
my $ua = LWP::UserAgent->new ;
my $response = $ua->get("http://www.tizag.com/htmlT/forms.php") ;
#my $response = $ua->get("http://localhost/form.php") ;
51
my @forms = HTML::Form->parse($response) ;
foreach (@forms)
{
52
my $form = $_ ;
print stdout "Form :" ;
print stdout "\n" ;
my @inputs = $form->inputs ;
foreach (@inputs)
{
my $input = $_ ;
print STDOUT $input->type ;
print " : " , $input->name ;
print stdout "\n" ;
}
print stdout "\n"
; print stdout
"\n" ;
}
SQLiX n'avait pas d'interface graphique ; l'utilisateur devait se souvenir de toutes les
options. Comme il possède une longue liste d'options, il est très encombrant si vous devez
Pour l'option de fichier permettant de spécifier l'URL cible, l'utilisateur peut directement
peut être enregistré dans un fichier spécifié. Vous trouverez ci-dessous des instantanés de
l'application.
53
Figure 10 : Interface graphique avant le début du balayage
54
Figure 11 : Lors de la recherche de l'url racine http://test.acunetix.com.
La capture d'écran ci-dessus montre clairement que le nouvel utilisateur n'a besoin de se
55
Figure 12 : Le résultat de l'analyse s'affiche dans la fenêtre de droite.
56
8.0 Cross Site Scripting (XSS) :
Le Cross Site Scripting est l'une des attaques les plus courantes de la couche
d'application. XSS cible les scripts, qui font partie de la page web et sont exécutés du côté
de Clint au lieu du côté du serveur. Les attaques par scripts intersites peuvent se produire
chaque fois qu'un utilisateur a la possibilité de publier du contenu sur un site web de
confiance. Un utilisateur malveillant peut créer un script côté client, qui exécute une
activité telle que l'envoi de toutes les informations sensibles disponibles dans le
que l'entrée n'est pas vérifiée, il sera chargé et exécuté par chaque utilisateur visitant le
site web. L'attaquant peut effectuer différents types d'attaques à l'aide de XSS. Par
exemple, il peut exécuter un contrôle "Active X" à partir de sites considérés comme
dignes de confiance. L'attaquant peut également soumettre le script XSS qui attire
L'attaquant insère le script sur le site web et lorsqu'un utilisateur attiré clique sur le lien,
le script est exécuté et envoie les informations de connexion du site ciblé dans le script.
L'attaquant doit maintenant se rendre sur le site ciblé pour récupérer les informations de
connexion. [17]
57
8.1 Type de XSS :
i) XSS non permanent : pour les attaques XSS non permanentes, l'utilisateur doit
visiter un lien qui attire son attention et qui est conçu avec un code malveillant. Lors
de la visite de ces liens, le code inséré dans l'URL sera imprimé et exécuté sur le
ii) XSS permanent : ce type de XSS, également appelé vulnérabilité stockée, est plus
dangereux que le XSS non permanent. Dans le cas d'un XSS permanent, les
un sujet particulier et que le script malveillant est récupéré sur le serveur, il est
8.2 Ce que j'ai fait dans SQLiX pour détecter les vulnérabilités XSS :
Pour détecter le XSS à partir du site web donné, j'ai ajouté les deux fonctions suivantes
à SQLiX :
i) SET XSS
58
La fonction SET XSS est utilisée pour prendre la pile d'URLs dans la mémoire tampon et
la transmettre à la fonction Attack XSS. Il s'agit d'une fonction importante qui utilise la
charge utile et tente différentes attaques sur la liste d'URL. Si l'un des cas de test de la
Le script utilise la bibliothèque Web spider pour vérifier les règles mentionnées ci-dessous.
Le script analyse les pages web et recherche des scripts et des formulaires dans lesquels il
Attaque XSS :
def attackXSS(self,page,dict) :
si dict=={} :
err=""
payload="<script>var SQLiX_"
payload+=page.encode("hex_codec")
payload+="_"
payload+="QUERYSTRING".encode("hex_codec")
payload+="=new Boolean();</script>" url=page+"
? "+payload
if url not in self.attackedGET :
essayer :
si self.verbose==2 :
print "+"+url
req = urllib2.Request(url)
u = urllib2.urlopen(req)
data=u.read()
except (urllib2.URLError,socket.timeout),e
: if hasattr(e, 'code') :
59
data=""
else :
retour
si data.find(payload)>=0 :
{
print "XSS (QUERY_STRING) dans",page
print "\tEvil url :",url
}
d'autre part :
si u.code==500 :
print "500 HTTP Error code with"
print "\tEvil url :",url
self.attackedGET.append(url)
for k in dict.keys() :
err=""
tmp=dict.copy()
payload="<script>var SQLiX_"
payload+=page.encode("hex_codec")
payload+="_"
payload+=k.encode("hex_codec")
payload+="=new Boolean();</script>"
tmp[k]=payload
if data.find(payload)>=0
: if self.color==0 :
print "XSS ("+k+") in",page
print "\tEvil url :",url
d'autre part :
print "XSS",":",url.replace(k+"=","\033[0;31m"+k+"\033[0;0m=")
else:
si u.code==500 :
print "500 HTTP Error code with"
print "\tEvil url :",url
self.attackedGET.append(url)
Dans l'extrait ci-dessus, la fonction AttackXss utilise l'ensemble de la charge utile pour
vérifier les scripts disponibles dans la base de données donnée et les associer à l'URL
donnée. La charge utile applique différentes opérations de test spécifiées dans la charge
utile. Nous ne vérifions que les XSS normaux et les XSS permanents. Il existe également
différents types de XSS qui peuvent être détectés en améliorant la charge utile.
60
9.0 Autres scanners d'injection SQL commerciaux et open source :
informationnelle. Acunetix est utilisé pour détecter différents types de vulnérabilités web,
i) Injection SQL
v) Redirection d'URL
L'injection SQL et les scans de scripts intersites relèvent du type de gravité élevée, car ils
sont considérés comme les attaques les plus dangereuses en matière de sécurité sur le
web. Les autres attaques sont classées en fonction de leur gravité pour les services web.
Bien que ce scanner effectue un peu plus d'analyses, il est très lent par rapport aux autres
outils disponibles sur le marché et il est également plus lent que SQLiX.
9.2 SQLmap :
Sqlmap est un scanner d'injection SQL construit en Python. L'objectif de cet outil est
de détecter les vulnérabilités d'injection SQL et de tirer profit de ces vulnérabilités sur les
applications web. Sqlmap détecte d'abord l'ensemble de la boucle dans votre site et utilise
ensuite une variété d'options pour effectuer une gestion extensive de la base de données,
session du SGBD et la base de données, lire un fichier spécifique sur la base de données
du SGBD.
61
le système de fichiers, etc. SQLmap est un peu plus rapide qu'acunetix web scanner mais
toujours plus lent que SQLiX, et il fait également très peu d'injection d'url dans la base de
données par rapport à SQLiX. Cet outil n'a pas non plus d'interface graphique.
9.3 Wapiti :
bibliothèque Python appelée lswww, qui permet d'explorer chaque page d'un site web
donné. Wapiti nous permet d'inspecter la sécurité de notre site web. Cet outil utilise
également la bibliothèque html Tidy pour nettoyer les pages html qui ne sont pas bien
formatées. Cette bibliothèque aide beaucoup à extraire des informations des pages web
html mal codées. En fait, il s'agit d'une analyse de boîte noire. Wapiti analyse toutes les
pages Web disponibles sur votre site et tente de trouver des scripts et des formulaires
dans lesquels il peut injecter des données afin de vérifier combien de types d'attaques sont
possibles sur le point d'injection sélectionné. Wapiti peut détecter les injections SQL et
XSS (Cross Site Scripting). Wapiti possède l'une des meilleures caractéristiques : il est
ligne de commande. Comme cet outil n'a pas d'interface GUI, j'aimerais vous donner ici
Utilisation :
62
Vous pouvez également utiliser un joker (*)
Exemple : -x "http://localhost/acu/indexacu.php/?page=*&module=test"
ou -x http://server/base/admin/* pour exclure un répertoire.
-p <url_proxy>
--proxy <url_proxy>
Pour spécifier un proxy
Exemple : -p http://proxy:port/
-c <fichier_cookie>
--cookie <fichier_cookie>
Pour utiliser un cookie
-t <timeout>
--timeout <timeout>
Pour fixer le délai d'attente (en secondes)
-a <login%password>
--auth <login%password>
Définir les informations d'identification
pour l'authentification HTTP Ne
fonctionne pas avec Python 2.4
-r <nom_du_paramètre>
--remove <nom_du_paramètre>
Supprimer un paramètre des URL
-m <module>
--module <module>
Utiliser un ensemble prédéfini d'options
d'analyse/d'attaque GET_ALL : utiliser
uniquement les requêtes GET (pas de POST)
GET_XSS : attaques XSS uniquement avec la
méthode HTTP GET
POST_XSS : uniquement les attaques XSS avec la méthode HTTP POST
-u souligné
Utiliser des couleurs pour mettre en évidence les paramètres de vulnérabilité dans les résultats
9.4 Paros :
Paros est utilisé pour évaluer la sécurité des applications web. Paros est écrit en Java, et
les gens utilisent généralement cet outil pour évaluer la sécurité de leurs sites web et des
applications qu'ils fournissent sur le site web. Il est gratuit et, grâce à Paros, vous pouvez
exploiter et modifier toutes les données HTTP et HTTPS entre le client et le serveur, ainsi
que les champs de formulaire et les cookies. En bref, les fonctionnalités du scanner sont
les suivantes.
configuration du serveur. Cette fonction a été ajoutée parce que certains chemins d'URL
63
ne peuvent pas être reconnus et trouvés par le robot d'exploration. Les autres scanners
64
fonctionnalité Paros navigue sur le site et reconstruit la hiérarchie du site. Actuellement,
journal, qui est créé lorsque toutes les requêtes HTTP et les réponses passent par Paros.
9.5 Pixy :
Pixy est le deuxième outil que j'ai trouvé sur le web et qui est écrit en Java. Pixy
effectue des analyses automatiques pour PHP 4 afin de détecter les injections SQL et les
attaques XSS. L'inconvénient majeur de Pixy est qu'il ne fonctionne que pour PHP 4 et
pas pour OOPHP 5. Pixy prend un fichier PHP entier en entrée et produit un rapport qui
Lors de l'analyse de l'injection SQL, Pixy divise les résultats en trois catégories : non
d'autre que la liste des points du programme dont dépend la valeur des variables.
65
Exécution UDF(utilis Non. de
Non. ateur Base de
Outils Temps type Langue GUI
d' définir la données
(minutes) d'attaq
injections fonction)
ues
SQLiX 2-3 300 OUI 2 Mon Perl Oui
SQL,
Oracle,
PSQL.
MSsql,
MS
Accès
Acunitix 25-30 NON 5 Tous ------- Oui
ci-dessus
Sqlmap 4-5 41 NON 3 Mon Python No
SQL, n
Oracle,
PSQL.
MSsql
Wapiti 7-8 XSS 90 NON 2 Sauf Python No
n
SQL 40 PSQL
Paros 8-10 40 NON 2 -- Java Oui
Pixy 4-5 -- NON 2 -- Java Oui
66
Temps
Outils d'exécution Site
(Procès-verbal)
SQLiX 2-3 http://jagdishhalde.hostrator.com/indexacu.php
Acunitix 10-20
Sqlmap 4-5
Wapiti 7-8
Paros 8-10
Pixy 4-5
Figure 14 : Cas de test pour http://jagdishhalde.hostrator.com/indexacu.php
Temps
Outils d'exécution Site
(Procès-verbal)
SQLiX 4-6 http://test.acunetix.com
Acunitix 25-30
Sqlmap 7-8
Wapiti 9-10
Paros 4-6
Pixy 25-30
Figure 15 : Cas de test pour http://test.acunetix.com
67
Temps
Outils d'exécution Site
(Procès-verbal)
SQLiX 2-3 http://www.jeffgaroutte.com
Acunitix 8-10
Sqlmap 4-5
Wapiti 7-8
Paros 8-10
Pixy 4-5
Exécution
Outils Temps Site
(minutes)
SQLiX 3-4 http://abhishek1984.zxq.net
Acunitix 10-12
Sqlmap 4-5
Wapiti 7-8
Paros 8-10
Pixy 4-5
68
Temps
Outils d'exécution Site
(Procès-verbal)
SQLiX 180- .... http://inderweb.com
Acunitix 90-120
Sqlmap 4-5/ Erreur
Wapiti N/A
Paros N/A
Pixy N/A
Temps
Outils d'exécution Site
(Procès-verbal)
SQLiX 180 - .... http://www.surfindia.com
Acunitix 90-120/
ERREUR
Sqlmap N/A
Wapiti N/A
Paros N/A
Pixy N/A
69
10.0 Voir les graphiques :
Voici les quatre graphiques que j'ai créés à partir de l'analyse des performances de SQLiX.
70
Figure 20 : graphiques de visualisation
71
11.0 Site de test de la vulnérabilité du Web SQLiX :
J'ai construit un site web qui est utilisé pour tester SQLiX. Ce site web fournit également
des informations sur les attaques de base par injection SQL. J'ai créé deux partitions sur
la page web principale, l'une fournit les composants disponibles sur le site et l'autre est
utilisée pour montrer le back-end du site. L'intention principale de cette structure est que
le troisième utilisateur puisse facilement voir comment l'outil SQLiX injecte les
héberger, il faut d'abord enregistrer le nom de domaine et télécharger tous les fichiers
frontaux ainsi que les scripts du serveur. J'importe également les schémas de base de
données et les données créées sur l'hôte local. Voici le lien pour le site web hébergé :
http://jagdishhalde.hostrator.com/indexacu.php
ho
72
Figure 21 : Site de vulnérabilité de SQLiX Web avec page d'accueil du site source de
SQLiX.
73
Figure 22 : Site de vulnérabilité de SQLiX Web avec la page d'accueil et le tableau
d'information de l'utilisateur final.
À partir de cette partition de la page web, on peut facilement voir le nombre d'injections
effectuées par SQLiX dans la base de données. Lors de l'analyse de cette page web
particulière, les entrées injectées liées à la base de données sont affichées sur le côté droit.
74
Figure 23 : Site web de vulnérabilité SQLiX montrant les attaques de base par injection
SQL.
Cette page web donne un aperçu des attaques de base par injection SQL. Il y a quatre cas
que j'ai essayé de démontrer ici. Comment l'injection SQL se produit et quelles sont les
précautions à prendre lors de la construction d'un site web.
75
12.0 Cas de test
Voici deux sites web sur lesquels je fais fonctionner ma version améliorée de SQLiX-
1) http://test.acunetix.com
2) http://abhishek1984.zxq.net
Les captures d'écran suivantes montrent la différence entre l'analyse de chaque formulaire
du site web qui utilise la méthode http Post. La méthode http post n'est pas implémentée
76
Figure 25 : Cas de test pour le balayage de http://test.acunetix.com avec
résultat
77
Figure 26 : Cas de test pour l'analyse de http://abhishek1984.zxq.net à l'aide de SQLiX
amélioré La capture d'écran ci-dessus montre clairement que SQLiX amélioré recherche des
formulaires et y injecte une injection SQL. Il utilise "PPPP" comme données fictives à insérer
dans chacun des champs du formulaire. Par conséquent, la version améliorée de SQLiX
effectue plus d'injections et tente de récupérer plus de données que la version originale de
SQLiX.
78
13.0 Conclusion
La plupart des applications web utilisent une couche intermédiaire pour accepter une
intermédiaire. Pour violer la sécurité de la base de données, les pirates utilisent souvent
de la couche intermédiaire en remodelant les requêtes SQL. Il est possible que l'attaquant
sont utilisées pour éviter les attaques par injection SQL au niveau de l'application, mais
aucune solution réalisable n'est encore disponible. Cet article couvre les techniques les
plus puissantes utilisées pour la prévention des injections SQL. Mes recherches m'ont
d'enregistrement des attaques par injection SQL dans les procédures stockées sont
SQLiX est l'un des meilleurs scanners de sécurité web pour trouver les vulnérabilités
d'injection SQL sur le site web, bien qu'il ne soit pas suffisant pour énumérer d'autres
types d'attaques web possibles. Il est très efficace en termes de vitesse, d'insertion du
nombre d'injections et d'injection de votre propre fonction. Vous pouvez juxtaposer les
cas de test représentés ci-dessus. J'ai amélioré cet outil en le dotant d'une interface
toutes les combinaisons d'attaques sans avoir à se souvenir de toutes les options, et la
79
méthode HTTP POST augmente le nombre d'injections dans la base de données.
80
14.0 Travaux futurs :
Dans le cadre de travaux futurs, nous souhaitons évaluer les méthodes en utilisant
différents scripts d'applications web du domaine public afin d'atteindre une grande
précision dans les approches de prévention des injections SQL. L'intégration de SQLiX
avec nikto HTTP scanner, HTTP scanning proxies, et avec metasploit aidera à détecter
Références
3. Merlo, Ettore, Letarte, Dominic, Antoniol & Giuliano. (21 mars 2007). Automated
Protection of PHP Applications Against SQL-injection Attacks (Protection automatisée
des applications PHP contre les attaques par injection SQL). Software Maintenance and
Reengineering, 11th European Conference IEEE CNF. Consulté le 9 novembre 2007 sur
http://ieeexplore.ieee.org
4. Wassermann Gary, Zhendong Su. (2007, juin). Sound and precise analysis of web
applications for injection vulnerabilities. ACM SIGPLAN conference on Programming
language design and implementation PLDI, 42 (6). Consulté le 7 novembre 2007 à
l'adresse suivante : http://portal.acm.org
5. Friedl's Steve Unixwiz.net Tech Tips. (2007). SQL Injection Attacks by Example
(Attaques d'injection SQL par l'exemple). Consulté le 1er novembre 2007 à l'adresse
suivante : http://www.unixwiz.net/techtips/sql-injection.html
81
7. Institut de technologie du Massachusetts. Sécurité des applications Web - Camp de
sécurité du MIT. Consulté le 1er novembre 2007 à l'adresse
http://groups.csmail.mit.edu/pag/reading- group/wasserman07injection.pdf
11. William G.J. Halfond et Alessandro Orso. College of Computing Georgia Institute of
Technology. Preventing SQL Injection Attacks Using AMNESIA (Prévention des
attaques par injection SQL à l'aide d'AMNESIA). Consulté le 28 mai 2007 à l'adresse
suivante : http://portal.acm.org
12. José Fonseca, Marco Vieira, Henrique Madeira. CISUC, Université de Coimbra
Département d'ingénierie informatique 3030 Coimbra - Portugal. Online Detection of
Malicious Data Access Using DBMS Auditing (Détection en ligne de l'accès malveillant
aux données à l'aide de l'audit du SGBD). Consulté le 20 mars 2008 sur le site
http://portal.acm.org
13. Frank S. Rietta 10630 Greenock Way Duluth, Georgia 30097. Application Layer
Intrusion Detection for SQL Injection (Détection d'intrusion au niveau de la couche
d'application pour l'injection SQL). Récupéré le 12 mars 2006 sur http://portal.acm.org
14. Martin Bravenboer, Eelco Dolstra, Eelco Visser, Université de technologie de Delft,
Pays-Bas. Preventing Injection Attacks with Syntax Embeddings A Host and Guest
Language Independent Approach. Consulté le 3 octobre 2007 sur le site
http://portal.acm.org
15. Yuji Kosuga, Kenji Kono, Miyuki Hanaoka Département des sciences de
l'information et de l'informatique Université de Keio. Sania : Syntactic and Semantic
Analysis for Automated Testing against SQL Injection. Consulté le 12 novembre 2007
sur le site de l'IEEE Computer Society. http://ieeexplore.ieee.org
16. Benjamin Livshits et U' lfar Erlingsson. Microsoft Research. Utilisation de cadres
de construction d'applications Web pour se protéger contre les attaques par injection de
code. Consulté le 14 juin 2007 sur http://ieeexplore.ieee.org
82
17. José Fonseca CISUC - Institut polytechnique de Guarda, Marco Vieira, Henrique
Madeira DEI/CISUC - Université de Coimbra. Testing and comparing web vulnerability
scanning tools for SQL injection and XSS attacks (Test et comparaison d'outils d'analyse
de la vulnérabilité des sites web pour les attaques par injection SQL et XSS). Consulté le
10 juillet 2007 à l'adresse suivante : http://ieeexplore.ieee.org
18. Hal Berghel. Hijacking the Web Consulté le 2 janvier 2002 sur le site
http://portal.acm.org
19. Engin Kirda, Christopher Kruegel, Giovanni Vigna et Nenad Jovanovic Université
technique de Vienne. Noxes : A Client-Side Solution for Mitigating Cross-Site Scripting
Attacks. Consulté le 5 juin 2006 sur le site http://portal.acm.org
20. http://www.owasp.org/index.php/Category:OWASP_SQLiX_Project
21. http://www.owasp.org/index.php/Category:OWASP_SQLiX_Project
22. http://search.cpan.org/~petdance/www-Mechanize-1.34/lib/www/Mechanize.pm
23. http://wapiti.sourceforge.net/
24. http://sqlmap.sourceforge.net/
25. http://www.acunetix.com/
26. http://en.wikipedia.org/wiki/Cross-site_scripting
27. http://en.wikipedia.org/wiki/SQL_injection
28. http://www.unixwiz.net/techtips/sql-injection.html
29. http://pixybox.seclab.tuwien.ac.at/pixy/index.php
30. http://www.parosproxy.ort/index.shtml
83