16 PhasesIntrusion - 5SOA
16 PhasesIntrusion - 5SOA
16 PhasesIntrusion - 5SOA
d’intrusion
ECOLE
ECOLE IT
IT –– 5SOA
5SOA -- Année
Année Académique
Académique 2023-2024
2023-2024 –– ©
© Tous
Tous droits
droits réservés
réservés
Résumé
• Prise d’empreinte
• Phase d’exploitation
• Post exploitation
• Masquer les traces
L’infrastructure mutualisée : les sites internet sont hébergés sur un serveur sécurisé avec d’autres clients.
Correspond bien aux sites marchands à faible trafic.
L’infrastructure semi-distribuée : les sites internet sont hébergés sur des serveurs web dédiés connecté à un
pare-feu dédié. Correspond aux sites ou infrastructures à moyen ou fort trafic.
L’infrastructure distribuée : l’hébergement des sites est dispatché sur plusieurs serveurs pour maximiser les
performances : des load-balancer qui dirigent les requêtes et gèrent la charges des serveurs ; des serveurs qui
gèrent uniquement la partie web (Apache / PHP) ; des serveurs de base de données ; des serveurs de fichiers
(jusqu’à plusieurs Téraoctet de stockage) ; des serveurs spécifiques selon vos besoins. Correspond aux sites ou
infrastructures à fort trafic.
Navigateur web : chaque navigateur est différent, il faut donc que le code soit compatible avec le navigateur utilisé
par vos clients.
Serveur DNS : le serveur DNS permet de transformer un nom de domaine en adresse IP.
Load balancer et Reverse Proxy : l’utilisation d’un load balancer permettra de répartir les requêtes entre les
différents serveurs d'applications.
Serveur d’application : le serveur d’application va exécuter le code applicatif (java, js, php, C#, ...). Très souvent
plusieurs instances d'une application seront déployées sur différents serveurs d’applications.
Base de données : C'est ici qu'on va stocker les données de l’application, soit de façon simple (une base de donnée
sur un serveur), soit de façon plus compliquée en utilisant un cluster de base de données.
ECOLE IT – 5SOA - Année Académique 2023-2024 – © Tous droits réservés
Fonctionnement d’une application web
Requête http
Utilisateur
Serveur d’application
Serveur web
Cache
Invention
de HTTP par 1989 1991 1996 1999 2014 2015 2018
Tim
Berners-Lee
Le protocole HTTP est basé sur le modèle client-serveur ;
Le client, généralement un navigateur web, envoie une requête au serveur, qui héberge
les ressources demandées ;
Le serveur traite ensuite la requête et renvoie une réponse au client avec les données
demandées.
Requête HTTP
« Retourne moi le document /index.html »
Réponse HTTP
Utilisation Description
Navigation Web Chargement de pages Web dans un navigateur
Transfert de fichiers Upload/Download de fichiers tels que des images, des vidéo ou des documents
Services Web Fourniture d’interfaces RESTful ou SOAP afin de permettre aux applications de
communiquer via le réseau
API Web Accès à des données distantes, des services, des réseaux sociaux, etc...
Communication IoT Parfois utilisé pour la communication entre appareils IoT et serveurs
• Les codes d’erreur HTTP, également appelés codes de statut HTTP, sont des codes numériques envoyés
• par un serveur HTTP à un client HTTP pour indiquer le résultat du traitement de la requête HTTP ;
Un cookie est un petit fichier stocké par un serveur dans le client d’un utilisateur et associé
à un domaine web. Ce fichier est automatiquement renvoyé lors de contacts ultérieurs avec
le même domaine.
Une URL (Uniform Resource Locator) est un format de nommage universel pour désigner
une ressource sur Internet. Il s'agit d'une chaîne de caractères ASCII imprimables qui se
décompose en cinq parties :
• Contexte :
Nativement, le protocole HTTP n’est pas sécurisé. Les données sont transmises en
texte brut. Cela expose les informations aux risques d'interception ou de modification
pendant le transit. Si on souhaite sécuriser le protocole HTTP, il est nécessaire d’utiliser
le protocole HTTPS (Hyper Text Transfer Protocol Secure)
• HTTPS :
HTTPS ajoute une couche de chiffrement TLS, à l’aide d’un certificat TLS, pour les
données échangées entre le client et le serveur Web. A ce jour les versions de TLS
préconisées par l’ANSSI sont les versions TLS v1.2 et v1.3
• Header HSTS :
Le header HSTS (HTTP Strict Transport Security) est un mécanisme qui permet à un
serveur Web de déclarer à un client Web qu’il doit interagir avec lui en utilisant une
connexion sécurisée (tel que HTTPS)
Wappalyzer
Op stem
rks
Sy
WAF
era
wo
s.io
tin
me
nsy
g
Fra
Ce
p0f
es
Cr
W
ic ap
aw
ha
rv
Se Nm
tw
lin
Cv
af
g
e p
ers de
tai ku
Coo ead ls.c s loo
kies H om N
Err Ha
eur og kra
sH eL wle
IP TT hiv r
P
@ Arc
So
Bu
ur
rp
eb
ie
Su
ph
es
tw
Extension de
ite
ra
ha
H
Walw00f
TM
g
W
rto
fichiers
L/
Ca
JS
Outils
Outil
Outil
Outil
Outil
Outil
Outil
• Exemple : https://censys.io
Outil
Outil
Outil
Serveur Cookie
Apache Apache=...
IIS ASPSESSIONID...
Java JSESSIONID
PHP PHPSESSID-
Outil
• Utilisation avec succès d’une vulnérabilité ou d’une faille de sécurité pour pénétrer un SI :
Code malveillant (injections, webshells...);
Exploits pour des vulnérabilités logicielles (CVE, scripts);
Techniques d’ingénierie sociale pour obtenir des accès non autorisés.
• Les attaques XSSi exploitent des vulnérabilités générées dynamiquement dans les
• pages web d’une application ;
• Une vulnérabilité apparaît lorsqu’un point d’injection n’est pas sécurisé (i.e. lorsqu’un
• paramètre d’URL ou un champ de formulaire web n’est pas filtré) ;
• Elles permettent à un attaquant d’injecter du code javascript, HTML... dans les pages
• web qui seront consultées par d’autres utilisateurs à travers des requêtes « légitimes » ;
XSS réfléchie Le code malveillant est inclus dans l'URL ou les paramètres d'une requête HTTP.
Lorsque la cible clique sur un lien ou soumet un formulaire avec les paramètres infectés,
le code malveillant est renvoyé par le serveur et exécuté dans le navigateur de la
victime. Contrairement au XSS stocké, le code réfléchi n'est pas persistant et dépend de
l'action immédiate de la victime.
XSS stockée Dans ce type d'injection, le code malveillant est stocké sur le serveur, généralement
dans une base de données ou un autre emplacement de stockage persistant. Lorsque
d'autres utilisateurs consultent la page qui affiche le contenu infecté, le code malveillant
est renvoyé directement par le serveur et s'exécute dans leurs navigateurs.
Blind XSS Cette attaque se produit sans que l'attaquant puisse voir directement les résultats de
son injection de code malveillant. Cela signifie que l'attaquant ne peut pas observer
immédiatement les effets de son attaque en examinant la page web ou en interagissant
avec elle. Néanmoins, les résultats de l'attaque peuvent être récupérés par l'attaquant
ultérieurement, souvent à travers un canal de communication différent.
DOM-based XSS Ce type d'injection XSS exploite des vulnérabilités dans le DOM (Document Object
Model) du navigateur. Le code malveillant est généralement inséré dans les scripts
JavaScript directement sur la page web et ne passe pas par le serveur. Lorsque le script
est exécuté, le code malveillant modifie le DOM et peut entraîner des conséquences
malveillantes.
2 Bonjour
La victime clique sur
le
Interne Message important de votre lien malicieux
t 7 3 banque. Cliquez sur le
Lien : <A 4
HREF=https://bank.com...
L’attaquant récupère
les codes d’accès
Envoi d’un email bancaire de la
Victim
avec un lien victime e
malicieux La victime saisit les Le serveur envoi une page à
1 info
Avant de valider
Profil client :
La victime pour saisir son
profil
6
Nom
Age 5
Adresse
Id Serveur
Attaquan Mot de bank.co
passe
t m
• Dans cet exemple un attaquant forge un e-mail contenant un script malicieux et l’envoi à la victime :
• <A HREF=https://bank.com/registration?clientId=<script>code malicieux</script>>Cliquer ici</A>
• Si la victime clique sur le lien, l’URL invoque le site bank.com avec le code malicieux ;
• Le site légitime bank.com retourne une page web à la victime incluant le code malicieux qui est exécuté sur le poste de la victime.
1
stockée
dans une page web d’une webapp légitime
Attaquan Serveu
t r
légitime
1 Bonjour
La victime clique sur
le
Interne Message important. Cliquez sur lien malicieux
t 2 le lien : <A
HREF=https://legitime.com...
Victim
Envoi d’un email
avec un lien e Le code
malicieux Le serveur envoi une page à
malicieux
5 s’exécute la victime avec le code
malicieux
Base de WebAp
données p
• Cette vulnérabilité reste possible par l’absence de filtrage du champs Login ainsi que
• l’affichage du login saisi sur la page web après validation.
Le langage SQL (Structured Query Language), est un langage de programmation conçu pour
gérer et manipuler des bases de données relationnelles. Il offre une interface standardisée
permettant aux utilisateurs de communiquer avec les systèmes de gestion de bases de
données (SGBD) tels que MySQL, PostgreSQL, Microsoft SQL Server, Oracle, et d'autres.
Définition de la structure des données dans une base de données. Cela inclut la création
et la gestion de tables, d'index, de contraintes, de vues et d'autres objets de base de données ;
Définir et gérer les droits d'accès aux données et aux fonctionnalités de la base de données ;
Prise en charge les transactions qui permettent d'assurer la cohérence et l'intégrité des données,
même en cas d'échec d'une opération.
L'injection SQL (SQLi) est une technique visant à exploiter les failles de sécurité
inhérentes aux entrées non validées afin de faire passer des commandes SQL
à travers une application web pour qu'elles soient exécutées par une base de
données ;
Un pentester utilise différentes techniques d’injection pour tester une application
web afin de découvrir des SQLi ;
Les tests SQLi réalisés par un pentester peuvent être manuels et/ou automatisés ;
Une SQLi est bien une faille applicative web et non une vulnérabilité issue d’un
serveur d’une base de données ou d’un serveur web.
En 2012, 97 % des violations de données étaient dues à des injections SQL.
Aujourd’hui, ce chiffre reste élevé, mais il est beaucoup plus facile à gérer ;
En 2023, les injections SQL restent l’une des attaques les plus courantes sur le web.
Rien qu’en 2022, 1162 vulnérabilités liées aux injections SQL ont été ajoutées à la
base de données de sécurité CVE ;
La bonne nouvelle, c’est que les injections SQL ne sont plus aussi répandues
qu’auparavant. La plupart des applications ont évolué pour se protéger contre
les attaques SQL.
Le fléau persistant des attaques Des failles par injection SQL Vulnérabilité d’injection SQL
par injection SQL et XSS ciblant des entreprises découverte dans plugin de formulaires
(LMI - 18 Juillet 2022) françaises aux enchères de contact pour WordPress
(LMI - 5 Mai 2021) (Guide Wordpress – 3 Novembre 2023)
PrestaShop vulnérable à Une faille critique met à mal La sécurité des WAF cassée par
une attaque de type injection SQL la sécurité de Magento des chercheurs en sécurité chinois
(KookiApps – 30 Mars 2023) (LMI – 1 Avril 2019) (LMI – 16 Mai 2022)
Références :
https://www.lemondeinformatique.fr/actualites/lire-le-fleau-persistant-des-attaques-par-injection-sql-et-xss-87320.html
https://www.lemondeinformatique.fr/actualites/lire-des-failles-par-injection-sql-ciblant-des-entreprises-francaises-aux-encheres-82834.html
https://www.guide-wordpress.fr/news-wordpress/vulnerabilite-dinjection-sql-decouverte-dans-le-populaire-plugin-fluent-forms-constructeur-de-formulaires-de-contact-pour-wordpress/
https://www.kookiapps.fr/faille-de-securite-prestashop/
https://www.lemondeinformatique.fr/actualites/lire-une-faille-critique-met-a-mal-la-securite-de-magento-74843.html
https://www.lemondeinformatique.fr/actualites/lire-la-securite-des-waf-cassee-par-des-chercheurs-en-securite-chinois-86777.html
Requête http
SELECT Count(*) FROM Users WHERE UserName=’texy45’ or 1=1 --’ AND Password=’leonardovinci’
SELECT Count(*) FROM Users WHERE UserName=’texy45’ or 1=1 --’ AND Password=’leonardovinci’
Requête SQL exécutée Code en commentaires et donc
non exécuté
Le hacker est authentifié !!!
Compromission de l’intégrité des Un attaquant peut modifier le contenu d’une base de données,
données d’une base de données insérer des données malveillantes dans les pages web
SQLi classique: implique l'insertion de requêtes SQL malveillantes directement
dans les champs d'entrée, exploitant ainsi les vulnérabilités de l'application ;
Les attaquants exploitent les vulnérabilités sans obtenir directement les résultats
de la requête, mais en discernant les réponses par des techniques telles que les
erreurs de la base de données ou les retards temporels ;
• Timing Based SQLi : réalise une injection SQL en utilisant le temps de réponse
• du serveur web à une requête normale.
• Grâce à l’injection SQL ‘ or 1=1 -- , un message d’erreur SQL est retourné par le serveur de base de données ;
• On apprend que le type de serveur bdd est MySQL ;
• On identifie également un point d’injection SQL à travers le paramètre id ;
• L’erreur SQL dévoile également la structure de la bdd avec les tables pmw_info et pmw_infoclass.
Chaque méthode de pentest SQLi a ses forces et ses faiblesses ;
Un test SQLi manuel reste complexe et long, mais il s'agit d'une méthode complète
pour évaluer la cible par rapport à toutes les vulnérabilités possibles en matière
d'injection de code SQL ;
Un test SQLi automatisé prend moins de temps, mais ne peut évaluer la cible que
sur la base de vulnérabilités SQLi classiques ;
Il est conseillé de réaliser des tests SQLi manuels et automatisés sur la cible.
• Avant de pouvoir attaquer une cible, il est nécessaire d’identifier une cible ;
• Pour acquérir une cible, il est possible d’utiliser différentes techniques dont celle faisant
• appel au Google Hacking ;
• A partir d’une utilisation de différentes commandes avancées, il est possible d’obtenir une
• liste de sites web répondant à des critères spécifiques de sélection.
inurl:index.php?id=
inurl:article.php?ID=
inurl:pageid=
inurl:
Lister tous les points d'entrée à partir desquels l'application construit des instructions
SQL au niveau du back-end à partir des données fournies par l'utilisateur ;
La plupart des points d’entrée pour les SQLi sont :
Les formulaires d’authentification ;
Les paramètres passés dans les URLs HTTP GET et POST ;
Les champs texte libres des formulaires web (commentaires, adresses,…) ;
Pages web liées à un compte financier ou à un compte de commerce électronique ;
Valeurs d'entrée des formulaires web ;
Cookies, Host, Referer, User-Agent ;
...
• Exécuter la commande ci-dessous afin d’identifier les points d’injection SQL pour une requête GET :
sqlmap -u <url>
PHP 5.3.29
Apache
MySQL ≥ 5.0
Base de données
Base de données
Base de données
De manière générale, il faut filtrer (sécuriser) l’ensemble des informations que le serveur
reçoit avant qu’elles ne soient interprétées par le moteur d’exécution du serveur de base
de données ;
Utiliser les requêtes SQL préparées (PHP: prepare; JAVA: PreparedStatement ) ;
L’ANSSI mentionne qu’il faut toujours filtrer côté client en complément du côté back-end;
Pour filtrer les données en entrée, utiliser des expressions régulières (regex) ;
Le développeur ne doit pas « réinventer la roue » ! Il doit utiliser des frameworks pour ses
développements (Python : Django ; PHP : Symfony ; Drupal ; Wordpress ; Ruby on Rails) ;
Penser à utiliser les préconisations contre les SQLi présentes dans le WSTG v4.2 de
l’OWASP.
Une attaque CSRF (Cross-Site Request Forgery) est une attaque de sécurité qui exploite la
confiance entre un utilisateur et un site web auquel il est authentifié. L'attaque CSRF vise à
effectuer des actions non autorisées CRUD (création, modification, suppression) sur un site web
en utilisant les informations d'authentification de l'utilisateur légitime, sans que ce dernier en soit
conscient.
Attaquant
L’attaquant souhaite réaliser un transfert bancaire pour son compte en se faisant passer pour la victime
Tous les paramètres de requête doivent être prévisibles. Les requêtes contiennent des
paramètres dont l’attaquant peut déterminer ou deviner les valeurs (cf. token anti-csrf dont la
valeur est imprévisible)
L’application cible doit contenir une fonctionnalité intéressante et/ou critique pour un
attaquant. Plusieurs cas possibles : des fonctionnalités liées à des niveaux de droits élevés,
des actions qui modifieront des données spécifiées par l’utilisateur, etc.
Implémenter des jetons CSRF pour prévenir les attaques : les jetons CSRF sont des valeurs
uniques générées aléatoirement côté serveur et envoyées au client.
Elles permettent de renforcer la sécurité d’une application en rendant difficile (voire impossible)
pour un attaquant de les deviner et donc d’exploiter une vulnérabilité CSRF.
On peut imaginer un jeton CSRF comme « une session dans une session applicative »
L'injection de commande du système d'exploitation permet à un hacker
d'exécuter des commandes du système d'exploitation sur le serveur qui exécute
une application, et généralement de compromettre complètement l'application et
ses données.
Souvent, un attaquant peut tirer parti d'une vulnérabilité liée à l'injection de
commandes pour compromettre d'autres parties de l'infrastructure d'hébergement et
exploiter les relations de confiance pour faire pivoter l'attaque vers d'autres
systèmes au sein de l'organisation.
Hypothèses :
Dans cet exemple, une application d'achat permet à l'utilisateur de savoir si un article est en
stock dans un magasin particulier. Cette information est accessible via une URL:
https://insecure-website.com/stockStatus?productID=381&storeID=29
Pour fournir les informations sur les stocks, l'application doit interroger divers systèmes
existants. Pour des raisons historiques, la fonctionnalité est mise en œuvre en faisant appel à
une commande shell avec les identifiants du produit et du magasin comme arguments :
stockreport.pl 381 29
Cette commande affiche l'état des stocks de l'article spécifié, qui est renvoyé à l'utilisateur.
L'application web n'implémente aucune défense contre l'injection de commande, de sorte qu'un
attaquant peut soumettre l'entrée suivante pour exécuter une commande arbitraire : && echo
aiwefwlguh &&
Résultats :
Si cette entrée est soumise dans le paramètre productID, la commande exécutée par
l'application est la suivante : stockreport.pl && echo aiwefwlguh && 29
La commande echo permet à la chaîne de caractères fournie d'être répercutée dans la
sortie. C'est un moyen utile de tester certains types d'injection de commandes du système
d'exploitation. Le caractère & est un séparateur de commandes de l'interpréteur de
commandes. Dans cet exemple, il provoque l'exécution de trois commandes distinctes, l'une
après l'autre. La sortie renvoyée à l'utilisateur est la suivante :
Error - productID was not provided
aiwefwlguh
29: command not found
Après avoir identifié une vulnérabilité d'injection de commande, il est utile d'exécuter
quelques commandes initiales pour obtenir des informations sur le système.
Une injection de commande ne pourra être exécuté que si l’utilisateur sous lequel
« tourne » la webapp a les droits suffisants ;
Ci-dessous quelques commandes utiles sur les plateformes Linux et Windows :
Nom de la requête
Exécution de la requête
1) A la création d’une requête on doit nommer cette dernière (par exemple : <nom requête>) ;
2) Si la requête est exécutée, un fichier SQL est généré à partir de cette requête. Ce fichier
prend pour nom exec_<n° d’ordre>_<nom requête>.sql
ls -l
Bien que la plupart des exemples concernent des scripts PHP vulnérables, il convient de
garder à l'esprit que ce phénomène est également courant dans d'autres technologies,
telles que JSP, ASP, etc. d'autres.
Cette vulnérabilité survient, par exemple, lorsqu'une page reçoit, en entrée, le chemin
du fichier qui doit être inclus et que cette entrée n'est pas correctement analysée, ce
qui permet d'injecter des caractères de traversée de répertoire (tels que point-point-
oblique).
Cela peut conduire à l'affichage du contenu du fichier, mais en fonction de la gravité, cela
peut également conduire à :
l'exécution de code sur le serveur web ;
l'exécution de code côté client, tel que JavaScript, qui peut conduire à d'autres
attaques telles que le cross site scripting (XSS) ;
le déni de service (DoS) ;
la divulgation d'informations sensibles.
Remédiation :
Éviter de transmettre des données d’entrée soumises par l’utilisateurà un système de
fichier ;
Maintenir une liste de fichiers autorisés qui peuvent être inclus par la page et utiliser un
identifiant pour accéder au fichier ;
Ce type d'outil est souvent utilisé dans le cadre d'attaques visant à compromettre des
sites web, des serveurs web ou d'autres systèmes en exploitant des vulnérabilités de
sécurité.
Si le serveur est configuré pour exécuter du code, il peut être possible d'obtenir
l'exécution de commandes sur le serveur en téléchargeant un fichier connu sous le nom
de web shell, qui permet d'exécuter du code arbitraire ou des commandes du système
d'exploitation.
Remédiation :
-Charger l'interpréteur de commandes avec un nom généré de manière aléatoire
-Protéger le shell par un mot de passe
-Mettre en place des restrictions basées sur l'IP sur l'interpréteur de commandes
-Interdire certains suffixes de fichiers exécutables (php, jsp, aspx,...)
Si la méthode HTTP PUT n'est pas autorisée pour l'URL de base ou la requête, il faut
essayer d'autres chemins dans le système.
NOTE: lors d’une campagne de pentests, après avoir réussi à télécharger un webshell, il
est « normal » de le supprimer ou de s’assurer que l'équipe de sécurité de la cible est au
courant et qu'elle supprime le composant rapidement après votre PoC.
ECOLE IT – 5SOA - Année Académique 2023-2024 – © Tous droits réservés
Les phases
d’intrusion
Post-exploitation
Chevaux de Troie,
Exécution Créer ou maintenir un accès
Spywares, Backdoors,
d’applications distant
Keyloggers
-L'attaquant effectue une attaque par escalade des privilèges qui tire parti des
défauts de conception, des erreurs de programmation, des bogues et des oublis
de configuration dans le système d'exploitation et l'application logicielle pour
obtenir un accès administratif au réseau et à ses applications associées ;
-Le piratage de DLL consiste à insérer du code malveillant dans une application pour
infecter le chargement des DLL (Dynamic Link Library) ;
-Lorsque qu’attaquant introduit un fichier infecté sur votre ordinateur, ce fichier est
exécuté au lancement de l’application vulnérable au piratage de DLL.
-Un rootkit est un programme qui dissimule sa présence ainsi que les activités
malveillantes de l'attaquant, lui accordant un accès total au serveur ;
-L'attaquant peut utiliser la stéganographie pour cacher des messages tels que
la liste des serveurs compromis, le code source de l'outil de piratage, des plans
pour de futures attaques, etc...
• Objectif : rendre plus difficile la détection de l’intrusion et prolonger l’accès non autorisé.
Obtention
d'un accès Masque des traces
administrateur
Utilisateur cible
Les attaquants utilisent les techniques suivantes pour masquer leurs traces sur le
système cible :
-Désactiver l'audit
-Effacer les logs
-Manipuler des logs
www.ecole-it.com