adf 2009 - cesarcesar.resinfo.org/cours-prive/adf-012009/adf_tools_2009.pdf · 2013-09-13 · 1....

Post on 17-Apr-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ADF 2009 Outils de recherche de vulnérabilités

Magali Contensin contensin@ibdml.univ-mrs.fr

Thierry Dostes tdostes@ifr88.cnrs-mrs.fr

Maurice Libes maurice.libes@univmed.fr

Kai Poutrain kai.poutrain@lif.univ-mrs.fr

Plan

1. Google Hacking

2. Prise d’empreinte

3. Forger des requêtes

4. Audit de configuration PHP

5. Audit de code

6. Scanner de vulnérabilités

1. Google Hacking� Opérateurs de recherche avancée

Opérateur Recherche

intitle:mot mot dans titre (élément HTML title).

allintitle: liste_de_mots mots dans titre (l’ordre ne compte pas)

inurl:mot mot dans l’URL de la page

allinurl: liste_de_mots mots dans l’URL de la page (ignore la ponctuation .. /)

intext:mot mot dans le corps du texte de la page (élément HTML body)

inanchor:site ou mot mot ou domaine dans les liens de la page (élément HTML A)

filetype:type un type de document (xls, pdf, doc, …)

site:domaine mot mot pour le nom de domaine du site indiqué.

site:cnrs.univ-mrs.fr

1. Google Hacking� Opérateurs de recherche avancée

Caractère Signification

+expr Prendre en compte un mot exclus automatiquement (et, de, …)

-expr -intitle:php = supprimer les pages qui ont php dans le titre

~expr mot et synonymes

* un mot : ex "un * DVD" => un lecteur DVD

"x y" Recherche la phrase exacte

Recherche par défaut = AND entre tous les termes Opérateurs AND, OR

�Consulter sans laisser de trace sur le serveur

1. Google Hacking�Serveurs HTTP

intitle:"index of" intext:"Apache/2*" intext:"server at"

intitle:"index of" intext:"Microsoft.IIS/" intext:"server at"

1. Google Hacking� Informations sur le système

"output produced by syswatch""output produced by syswatch"

1. Google Hacking�Présence d’applications

inurl:awstats -intitle:awstats

1. Google Hacking� Listing de répertoires

intitle:Index -inurl:index intranet

1. Google Hacking� Erreurs MySQL

mysql error -intitle:error -intitle:php -forum -forums -intitle:mysql

1. Google Hacking� Erreurs MySQL

mysql error -intitle:error -intitle:php -forum -forums -intitle:mysql

1. Google Hacking� Informations confidentielles

"not for distribution" confidential

filetype:ctt msn liste de contacts msn

inurl:ws_ftp.ini intext:uid mots de passe wsftp

[pbi.u.vipex.net]

HOST=pbi. u.vipex.net

UID=root

PWD=V62C340CBEBBC57D5876CBCA9C5372E40A6A87BAFB06D796B76

PASVMODE=0

TIMEOFFSET=0

DIR="/usr/"

http://www.thedmgroup.com/

root:ad7HPlneWG74M:0:0:System Administrator:/:noshell

steve:PkLENJODCap46:2805:100:Steve Dreska:/usr/home/steve:mail,10

chris:c.LEWz7/HV9mQ:2805:100:Chris Bregman:/usr/home/chris:mail,10

(inurl:passwd.bak OR inurl:passwd.old) intext:root

Plan

1. Google Hacking

2. Prise d’empreinte

3. Forger des requêtes

4. Audit de configuration PHP

5. Audit de code

6. Scanner de vulnérabilités

2. Prise d’empreinte� Recherche du langage de script

� extensions des fichiers (.jsp, .asp, .php)� cookies (JSESSIONID, ASPSESSIONID, PHPSESSID)

�messages d’erreur pour le site (google hacking)� présence d’applications (awstats, phpmyadmin, …)� présence d’applications (awstats, phpmyadmin, …)

� easter eggs PHP?=PHPE9568F34-D428-11d2-A769-00AA001ACF42?=PHPE9568F35-D428-11d2-A769-00AA001ACF42?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

2. Prise d’empreinte� Recherche du système (Windows/Unix)

� sensibilité à la casse dans l’URL� structure des répertoires et noms

� applications (langage utilisé)

� informations données par le serveur web ou les scripts� informations données par le serveur web ou les scripts

2. Prise d’empreinte� Recherche du serveur web

� informations données par des scripts (google hacking)

� informations données par le serveur

� informations données par netcrafthttp://toolbar.netcraft.com/site_report?url=http://...

2. Prise d’empreintehttp://toolbar.netcraft.com/site_report?url=http://...

2. Prise d’empreinte�Recherche du serveur web

� différences : ●lexicales (ponctuation, phrases)●syntaxiques (ordre des champs, valeurs listées)●sémantiques (interprétation différente)●sémantiques (interprétation différente)

Requête telnet port 80 type de test Apache/2.0.x IIS/5

GET / HTTP/5.0 erreur protocole 400 Bad Request 200 OK

GET / xxx/1.0 erreur protocole 200 OK 400 Bad Request

GOT / HTTP/1.0 erreur méthode Allow:GET,HEAD,...

501 Method Not Implemented

501 Not Implemented

DELETE / HTTP/1.0 méthode interdite 405 Method Not Allowed 403 Forbidden

GET /xxx HTTP/1.0 fichier inexistant 404 Not Found 404 Object Not Found

HEAD / HTTP/1.0 ordre des champs Date:

Server:

Server:

Date:

OPTIONS * HTTP/1.1 méthodes supportées Allow:GET,HEAD,POST,... Public: OPTIONS, TRACE,…

GET / HTTP/1.0 fichier par défaut Test Page for Apache Installation Welcome to IIS 5.0

2. Prise d’empreintehttprint Présentation (1)

Catégorie Outil de fingerprinting

Public ASR

Editeur http://www.net-square.com/httprint

Licence Gratuit pour une utilisation non commerciale

FonctionnalitésPrise d’empreinte d’un serveur web

OS Linux, Windows, MacOSX

2. Prise d’empreintehttprint Installation (2)

Durée 5 mn

Procédure � Télécharger httprint 301: (released on 22/12/05)

http://www.net-square.com/httprint/#downloads

� Décompresser l’archive� Décompresser l’archive

httprint Tests (3)

Exécuter Windows GUI Linux/MacOSX commande

httprint -h <host> -s signatures.txt

httprint Résultats (4)

Sortie HTML, CSV, XML

2. Prise d’empreinte

2. Prise d’empreintehttprint Conclusion (5)

+

� Rapide à installer et tester� Résultats clairs� Base de signatures facile à mettre à jour (copier le résultat obtenu pour un serveur connu, coller dans le fichier texte)fichier texte)

-� Traces dans les logs

� Base de signatures plus maintenue

2. Prise d’empreintehttprecon Présentation (1)

Catégorie Outil de fingerprinting

Public ASR

Editeurhttprecon projecthttp://www.computec.ch/projekte/httprecon

Licence GPL

FonctionnalitésPrise d’empreinte d’un serveur web (analyse de banière, status code, ordre en-tête)

OS Windows

2. Prise d’empreintehttprecon Installation (2)

Durée 5 mn

Procédure � Télécharger httprecon 5.3 : (released on 17/01/09)

http://www.computec.ch/projekte/httprecon/?s=downloadhttp://www.computec.ch/projekte/httprecon/?s=download

� Décompresser l’archive

2. Prise d’empreintehttprecon Tests (3)

Exécuter Windows GUI : entrer port&serveur cliquer sur Analyze

Procédure � 9 tests :� GET existing GET / HTTP/1.1� GET long request GET /uuu…uuu HTTP/1.1� GET non existing GET /kI6jM4.html HTTP/1.1� GET non existing GET /kI6jM4.html HTTP/1.1� GET wrong protocol GET / HTTP/9.8�HEAD existing HEAD / HTTP/1.1� Options common OPTIONS / HTTP/1.1� Delete existing DELETE / HTTP/1.1� Test method TEST / HTTP/1.1� Attach Request

GET /etc/passwd?format=%%%&xss=\"><script>alert('xss');</script>&traversal=../../&sql='%20OR%201; HTTP/1.1

Configurable menu Configuration > Edit settings

2. Prise d’empreintehttprecon Résultats (4)

Sortie HTML, texte, interface windows

Plan

1. Google Hacking

2. Prise d’empreinte

3. Forger des requêtes

4. Audit de configuration PHP

5. Audit de code

6. Scanner de vulnérabilités

3. Altération des données� Modification de la query string

� Ajout de données� Suppression de données� Valeurs inattendues

article.php?id=25&action=voirarticle.php?id=25&action=voir

� Modification d’un formulaire (GET/POST)

� Enregistrement du formulaire sur le disque� Changer attribut action�Modification (ajout/suppression de champs, valeurs)� Envoi du formulaire

3. Altération des données� Forger la requête : telnet port 80

� En-tête : cookies, referer, user-agent, ...� Corps : données

$ telnet www.resa_vacances.fr 80

Trying 199.199.99.99...Trying 199.199.99.99...

Connected to www.resa-vacances (199.199.99.99).

Escape character is '^]'.

POST /reservation.php HTTP/1.1

Host: www.vacances.fr

Cookie: lang=fr;id=214535E1FA

User-Agent: Firefox

Content-Type: application/x-www-form-urlencoded

Content-Length: 11

lieu=venise

3. Altération des données� Tamper Data

�Modification avant envoi :●En-tête : cookie, referer, user-agent, ...●Corps : données

�Rejouer des requêtes�Rejouer des requêtes

3. Altération des données� Tamper Data

3. Altération des données� Tamper Data

http://gecko.test.fr/traitement/ident.php

� Tamper Data

3. Altération des donnéesdonnées

En-tête HTTP

3. Altération des données� Tamper Data

3. Altération des données� Tamper Data

3. Altération des données� Tamper Data

Plan

1. Google Hacking

2. Prise d’empreinte

3. Forger des requêtes

4. Audit de configuration PHP

5. Audit de code

6. Scanner de vulnérabilités

4. Audit de configuration PHP

PHPSecInfo Présentation (1)

Catégorie Outil d’audit de configuration

Public ASR

Editeur http://phpsec.org

Licence NewBSD

Fonctionnalités - Test des valeurs de directives PHP- conseils de paramétrage pour la sécurité

Langage Ecrit en PHP, audit PHP 5.2.x et antérieur

4. Audit de configuration PHP

PHPSecInfo Installation (2)

Durée 5 mn

Procédure � Télécharger phpsecinfo version 0.2.1 (2007)

http://phpsec.org/projects/phpsecinfohttp://phpsec.org/projects/phpsecinfo

� Décompresser l’archive

�Mesures de sécurité :

o renommer le répertoire (par ex : audit_tool)

omettre des restrictions d’accès (.htaccess)

� Placer le répertoire dans le site web

4. Audit de configuration PHP

PHPSecInfo Tests (3)

Exécuter Entrer l’URL du script principal :http://…/audit_tool/index.php

Tests réalisés � CoreTests réalisés � Coreo Directives : allow_url_fopen, allow_url_include, display_errors, expose_php, file_uploads, magic_quotes_gpc, memory_limit, open_basedir, post_max_size, register_globals, upload_max_filesize, upload_tmp_diro Autres tests : user_id, group_id

�Curl : file_support�Directive CGI : force_redirect�Directives de session : save_path, use_trans_sid

4. Audit de configuration PHP

PHPSecInfo Résultats (4)

Sortie HTML

Format Tableaux contenant Format Tableaux contenant plusieurs sections :� tests exécutés

o Coreo Sessiono Curlo CGI

� tests non exécutés� résumé

4. Audit de configuration PHP

PHPSecInfo Résultats (5)

Section Tests exécutés

Infos Code (rouge/warning, orange/notice, vert/pass), message, lien

4. Audit de configuration PHP

PHPSecInfo Résultats (6)

Section Tests non exécutés

Infos Message indiquant pourquoi test non éxecuté, lien hypertexte

4. Audit de configuration PHP

PHPSecInfo Résultats (7)

Section Résumé

Infos Nombre de warning, notice et pass

4. Audit de configuration PHP

PHPSecInfo Conclusion (8)

+

� Rapide à installer et tester� Résultats clairs (codes couleur, messages, liens hypertextes)� Conseils

� Identifie des problèmes potentiels, certains réglages

-

� Identifie des problèmes potentiels, certains réglages déconseillés peuvent être nécessaires à l’environnement de production (file_uploads, upload_max_filesize)

� Réglages de sécurité ignorés (use_only_cookies, disable_functions)

!� Régler correctement le php.ini ne remplace pas les bonnes pratiques de programmation

Plan

1. Google Hacking

2. Prise d’empreinte

3. Forger des requêtes

4. Audit de configuration PHP

5. Audit de code

6. Scanner de vulnérabilités

RATS Présentation (1)

Catégorie Outil d’audit de code

Nom Rough Auditing Tool for Security

Public Développeurs

5. Audit de code

Public Développeurs

EditeurSecure Software Inc. racheté par

http://www.fortify.com/security-resources/rats.jsp

Licence GNU GPL

Fonctionnalités Recherche les fonctions dangereuses dans le code

Langage Ecrit en C, audit : C, C++, Perl, Python, PHP

RATS Installation (2)

Durée 5-10 mn

Procédure � Télécharger rats-2.1

http://www.fortify.com/servlet/downloads/public/rats-2.1.tar.gz

5. Audit de code

� Décompresser l’archive

� Compiler les sources C (.exe pour windows sur le site)

o ./configure; make; make install

o nécessite le parser XML expat

http://expat.sourceforge.net

RATS Tests (3)

Exécuter rats -l php -w 3 repertoire >output.txt

Options -l language-d base_vulnerabilite.xml-x-R

Définit le langage du code à analyserCharger la base indiquéeNe pas charger les bases par défautAnalyse non récursive

5. Audit de code

-R-a nom_fonction-w 1|2|3--html--xml-h

Analyse non récursiveAjouter la fonction dans la rechercheNiveau d’alerte (1=high, 2=medium, 3=low)

Sortie HTMLSortie XMLListe des options

Tests réalisés

Recherche les noms de fonctions potentiellementdangereuses définies dans la base de données des vulnerabilities : mail, eval, highlight_file, show_source, system, passthru, fopen, opendir, exec, readfile,...Recherche les opérateurs backtick

5. Audit de codeRATS Résultats (4)

Sortie Texte (défaut), HTML, XML

Format Pour chaque vulnérabilité affiche :� liste des fichiers concernés (chemin + numéro de ligne),� niveau de la vulnérabilité : high, medium, low,�message décrivant la vulnérabilité.�message décrivant la vulnérabilité.

/var/www/scripts/injection_cmd.php:11: High:

system

Argument 1 to this function call should be

checked to ensure that it does

not come from an untrusted source without

first verifying that it contains

nothing dangerous.

1. <?php

11. echo system($_GET['cmd']);

...

18. echo `$cmd`;

19. ?>

/var/www/scripts/injection_cmd.php:18: Medium: backtick

The backtick will act just like an call to exec(), so care

should be exercised

that the string being backtick evaluated does not come from an

untrusted source.

RATS Conclusion (5)

+

� Permet d’identifier rapidement les scripts dans lesquels desfonctions potentiellement dangereuses ou l’opérateur backticksont utilisés.� Un message indique en quoi la fonction est dangereuse.� Extension de la base des vulnérabilités facile (rats-php.xml).

5. Audit de code

� Extension de la base des vulnérabilités facile (rats-php.xml).

-

� Beaucoup de faux positifs, c’est l’équivalent d’un grep sur un nom de fonction

exec('ls –la') génère une alerte

� Ne détecte pas : XSS, injections de code, commande (il faudrait ajouter require et include mais augmenterait les faux positifs)

Présentation (1)

Catégorie Outil d’audit de code

Nom Spike PHP Security Audit Tool

5. Audit de code

Public Développeurs

Editeur Spike Source Inc.

Licence Open Source License version 2.1 http://www.spikesource.com/license.html

Fonctionnalités Recherche les fonctions dangereuses dans le code

Langage Ecrit en PHP 4 (basé sur RATS), audit PHP

Installation (2)

Durée 5 mn

Procédure � Télécharger la version 0.27 (août 2007)

http://developer.spikesource.com/frs/download.php/136/spike_phpS

ecAudit_0.27.zip

5. Audit de code

ecAudit_0.27.zip

� Décompresser l’archive

� fichier principal : run.php

(à exécuter en ligne de commande)

� base des vulnérabilités : vuln_db.xml

Tests (3)

Exécuterphp -d allow_call_time_pass_reference=on chemin_script_run.php --src chemin_code_php --format text--outdir chemin_rep_rapport

Options -d directive=valeur--src chemin

Supprime un warning PHPChemin du fichier/répertoire à analyser

5. Audit de code

--src chemin--format text|html--outdir chemin--exclude chemin

Chemin du fichier/répertoire à analyserFormat du rapport généréChemin du répertoire du rapportNe pas analyser le fichier/répertoire

Tests réalisés

Recherche les noms de fonctions potentiellementdangereuses définies dans la base de données des vulnerabilities : mail, eval, highlight_file, show_source, system, passthru, fopen, opendir, exec, readfile,..

5. Audit de codeRésultats (4)

SortieFichier texte output.txt dans le répertoire Spike (défaut)HTML

Format Pour chaque fichier scanné affiche :� nom du fichier,� résultat (aucun problème ou liste des vulnérabilités).

Analyzing file: /var/www/scripts/session.php . . . . . .

There are no errors that I can find in file:

/var/www/scripts_vulnerables/sessions/session.php

Analyzing file: /var/www/scripts/extract.php . . . . . .

These are function calls that need extra cautions:

C. 1

/var/www/scripts/extract.php: 2, MEDIUM: extract

Context: extract($_REQUEST);

Do not use extract() on untrusted data, like user-input ($_GET, $_POST,

$_REQUEST). If you do, for example, if you want to run old code that relies on

register_globals temporarily, make sure you use one of the non-overwriting

extract_type values such as EXTR_SKIP and be aware that you should extract in

the same order that's defined in variables_order within the php.ini

� résultat (aucun problème ou liste des vulnérabilités).

Conclusion (5)

+

� Permet d’identifier rapidement les scripts danslesquels des fonctions potentiellement dangereuses sontutilisées.� Un message indique en quoi la fonction est dangereuse.� Extension de la base des vulnérabilités facile (fichier

5. Audit de code

� Extension de la base des vulnérabilités facile (fichier xml)� Simple à installer et utiliser� Fonctionne avec PHP5

-

� Beaucoup de faux positifs = grep sur un nom de fonction

system('ls –la') génère une alerte� Ne détecte pas : opérateur backtick, XSS, injections de code, commande (il faudrait ajouter require et includemais augmenterait les faux positifs)

PHP Sec Scan Présentation (1)

Catégorie Outil d’audit de code

Nom PHP Security Scanner

Public Développeurs

5. Audit de code

Public Développeurs

Editeur PHP Security Scanner Development Team

Licence GPL

FonctionnalitésRecherche des motifs dangereux dans le code :- Fonctions avec variables- Failles d’inclusion (code et commandes)

Langage Ecrit en PHP, audit PHP

Installation (2)

Durée 20 mn (si MySQL, Apache et PHP installés)

Procédure � Télécharger securityscanner version 1.0.2 (juin 2007)http://sourceforge.net/project/showfiles.php?group_id=141049

� Décompresser l’archive :bin = outils d’analyse du codeinterface = consultation des résultats de l’analyse

5. Audit de code

interface = consultation des résultats de l’analyse3dPartyLib = bibliothèques pour l’interface

� Créer un répertoire security_scanner (serveur web)� Placer dans ce répertoire : interface, 3dPartyLib� Créer la base mysql et la peupler (db_generate.sql)�Mettre les informations de connexion à la base pour l’analyseur et l’interface (bin/config.php, interface/lib/config.php)� Tester dans le navigateur la page d’accueil (interface/),elle devrait afficher :"No results in the database. You should use the executable first."

Tests (3)

Exécuter php security_scan.php repertoire_scripts etiquette

Tests réalisés Recherche des motifs contenant des fonctionspotentiellement dangereuses qui utilisent des variables.

5. Audit de code

potentiellement dangereuses qui utilisent des variables.

Les fonctions sont définies dans la table problem de la base mysql : exec, passthru, system, include, include_once, require, require_once, fopen, readfile, file, phpinfo, eval, …

5. Audit de codeRésultats (4)

SortieDonnées stockées dans la base -> interface PHP de consultation

Format Pour chaque fichier contenant une vulnérabilité :� lien vers le fichier, � numéro de ligne,� code vulnérable + message.� code vulnérable + message.

Conclusion (5)

+

� Ecrit en PHP

� Permet d’identifier rapidement les scripts danslesquels des fonctions potentiellement dangereusescontiennent des variables et affiche une explication avecdes conseils.

5. Audit de code

des conseils.

� Détecte les failles d’inclusion

-

� Faux positifs : <?php $cmd = 'ls –la' ; system($cmd) ?>

� Ne détecte pas : XSS, opérateur backtick, injections SQL

� Utilise une base de données pour stocker les réponses et les vulnérabilités.

Présentation (1)

Catégorie Outil d’audit de code

Nom Pixy

5. Audit de code

Public Développeurs

Editeur Secure Systems Lab (Vienna University of Technology)

Licence GPL

FonctionnalitésXSSInjections SQL

Langage Ecrit en Java, audit code PHP non objet

Installation (2)

Durée 5 mn (si Java JRE installé)

Procédure � Télécharger Pixy version 3.0.3 (juillet 2007)http://pixybox.seclab.tuwien.ac.at/pixy/download.php

� Décompresser l’archive

5. Audit de code

� Décompresser l’archive

Exécuter

À la console :- linux : run-all.pl nom_fichier.php > resultat_scan.txt- windows : run-all.bat nom_fichier.php > resultat_scan.txt

Ou depuis l’IDE Eclipse (cf. doc/eclipse-usage.txt)

Tests (3)

Tests XSS Analyse les données envoyées vers le navigateur avec echo, printet printf. Détecte une vulnérabilité si la donnée contient :

� un tableau prédéfini parmi $_GET, $_POST, $_REQUEST, $_COOKIE :echo $_GET['nom'];

� certaines cases du tableau prédéfini $_SERVER

5. Audit de code

� certaines cases du tableau prédéfini $_SERVER (le fichier config/harmless_server_vars.txt donne la liste des données non dangereuses)echo $_SERVER['HTTP_USER_AGENT'];

� une variable qui a reçu une entrée utilisateur dans un script/fichier inclus :$nom = "ADF2008";

echo $nom; // aucune vulnerabilite detectee

$nom = $_GET['nom'];

$chaine = "Formation $nom" ;

echo $chaine; // vulnerabilite detectee

� une variable qui n’a pas été définie dans le script (dangereux si register_globals a la valeur on : <?php echo $nom; ?>

5. Audit de codeRésultats (4)

Sortie Texte, graphe de dépendances

*****************XSS Analysis BEGIN*****************

Fichier def.php1. <?php

2. $nom = $_GET['nom']; *****************Number of sinks: 1

XSS Analysis Output--------------------Vulnerability detected!- unconditional

- /var/www/scripts/test_xss.php:4- Graph: xss1

Total Vuln Count: 1*****************XSS Analysis END*****************

2. $nom = $_GET['nom'];

3. ?>

Fichier test_xss.php

1. <?php

2. require 'def.php';

3. $chaine = "Bonjour $nom";

4. echo $chaine;

5. ?>

5. Audit de codeRésultats (5)

Sortie Texte, graphe de dépendances

*****************XSS Analysis BEGIN*****************

Fichier test_globals.php

1. <?php *****************Number of sinks: 1

XSS Analysis Output--------------------Vulnerability detected!- conditional on register_globals=on

- /var/www/scripts/test_globals.php:2- Graph: xss1

Total Vuln Count: 1*****************XSS Analysis END****************

1. <?php

2. echo $nom;

3. ?>

5. Audit de codeRésultats (6) (6)

Sortie Texte, graphe de dépendances

Fichier test_fonctions.php1. <?php

2. function test($ch){

*****************XSS Analysis BEGIN*****************2. function test($ch){

3. return strtolower($ch);

4. }

5. $ch1 = test("essai");

6. $ch2 = test($_GET['nom']);

7. echo $ch1;

8. echo $ch2;

9. echo htmlentities($ch2);

10.?>

*****************Number of sinks: 2

XSS Analysis Output--------------------Vulnerability detected!- unconditional- /var/www/scripts/test_fonctions.php:8- Graph: xss2

Total Vuln Count: 1

*****************XSS Analysis END*****************

Tests (7)

Tests SQL 3 niveaux pour les données :

� untainted : aucun danger, données non malicieuses

5. Audit de code

� weakly tainted : danger faible – les valeurs sont protégées mais elles peuvent être dangereuses si elles ne sont pas utilisées dans des quotes :

$id = addslashes($_GET['id']); // injection si "1 OR 1=2"

$pwd = addslashes($_GET['pwd']);

mysql_query("SELECT * FROM mytable WHERE id=$id AND pwd='$pwd'");

� strongly tainted :danger, même si les données sont placées entre quote.

5. Audit de codeRésultats (8) (8)

Sortie Texte, graphe de dépendances

*****************SQL Analysis BEGIN*****************

Fichier def.php1. <?php

2. require 'cnx.inc.php';*****************Number of sinks: 1

SQL Analysis Output--------------------directly tainted!- /var/www/scripts/test_sql.php:6- Graphs: sql1- unconditional

Total Vuln Count: 1*****************SQL Analysis END*****************

2. require 'cnx.inc.php';

3. $login = $_GET['login'];

4. $password = $_GET['password'];

5. $requete = "SELECT * FROM user

WHERE login='$login' AND

password='$password'";

6. $res = mysql_query($requete);

7. ?>

Conclusion (9)

+

� Identifie des vulnérabilités en tenant compte des variables,fichiers inclus et appels de fonctions (diminue le nombre de fauxpositifs),� Si la donnée est protégée par un htmlentities ou cast, n’indiquepas de vulnérabilité (même si protection réalisée dans unefonction),

5. Audit de code

fonction),� Tient compte de l’ordre des instructions<?php $nom = 'ADF'; echo $nom; $nom = $_GET['nom']; echo $nom; ?>

� Permet d’ajouter facilement des modèles de fonctions.

-

� Impossible de vérifier des scripts objet� Scanne un fichier et ses fichiers inclus (pas tout le projet),� Pas de vulnérabilité trouvée pour $_SESSION,� Ne prend pas en compte le fait qu’une donnée a été validée :if (is_numeric($_GET['nb1'])){ echo $_GET['nb1']; } // faux positif

echo (int)$_GET['nb2']; // pas de detection

$nb = (is_numeric($_GET['nb3'])) ? $_GET['nb3'] : 0;

echo $nb; // faux positif

Plan

1. Google Hacking

2. Prise d’empreinte

3. Forger des requêtes

4. Audit de configuration PHP

5. Audit de code

6. Scanner de vulnérabilités

6. Scanner de vulnérabilités : WebScarab

WebScarab Présentation (1)

Catégorie Scanner de vulnérabilités web

Nom WebScarab

Public Développeurs, Administrateurs

6. Scanner de vulnérabilités

Public Développeurs, Administrateurs

Editeur http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project

Licence GNU GPL

FonctionnalitésProxy, Spider, Fuzzer, Détection XSS, Injections SQLOutil Interactif

WebScarab Installation (2)

Durée 5-10 mn

Procédure � Télécharger l’archive (Linux)

� Télécharger et lancer l’installeur (MacOS/Windows)

6. Scanner de vulnérabilités

� Télécharger et lancer l’installeur (MacOS/Windows)

http://www.owasp.org/index.php/Category:OWASP_WebScarab_Pro

ject#Download

WebScarab Tests (3)

Usage (Linux) java -jar ./webscarab-selfcontained-[numbers].jar

6. Scanner de vulnérabilités

6. Scanner de vulnérabilitésWebScarab Fonctionnalités (4)

Proxy Observation du trafic HTTP et HTTPS

Manual intercept

modification des requêtes/réponses à la volée

BeanShell exécution de commandes complexes (java)

Reveal hidden rend visible les champs cachés des formulaires dans le Reveal hidden fields

rend visible les champs cachés des formulaires dans le navigateur

Bandwidth simulator

analyse du fonctionnement du site avec une bande passante donnée

Manual requestPermet d'éditer et de rejouer des anciennes requêtes, ou d'en créer de nouvelles

SessionID analysis

collecte et analyse des identifiants de session pour en déduire leur qualité (-> BurpSuite)

6. Scanner de vulnérabilitésWebScarab Fonctionnalités (4)

Parameter fuzzer

substitution automatisée de valeurs pour tester les failles de type XSS et injections SQL, la recherche de fichiers « cachés »

Search recherches dans les requêtes/réponses (BeanShell)

Compare calcule une valeur de "distance" entre deux réponsesCompare calcule une valeur de "distance" entre deux réponses

XSS/CRLFanalyse pour la recherche de vulnérabilitées XSS/CRLF

Spider permet de naviguer dans l'arborescence du site

->Demo

6. Scanner de vulnérabilitésWebScarab Analyse du Session ID (4)

6. Scanner de vulnérabilitésWebScarab Analyse du Session ID (4)

6. Scanner de vulnérabilitésWebScarab Analyse du Session ID : BurpSuite (4)

WebScarab Conclusion (5)

+� Fonctionnalités nombreuses� Analyse de la qualité du SessionID

6. Scanner de vulnérabilités

-

� Peu intuitif� Documentation quasi-inexistante� Nécessite un minimum d’expertise dans le domaine� Fonctionnalités avancées en beanshell

WebScarab Liens (6)

�http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project

Vidéos de démos :�http://yehg.net/lab/pr0js/training/webscarab.php

6. Scanner de vulnérabilités

Tutoriels :�http://travisaltman.com/webscarab-tutorial-part-1-learning-the-basics/�http://travisaltman.com/webscarab-tutorial-part-2-sessiond-id-analysis/�http://travisaltman.com/webscarab-tutorial-part-3-fuzzing/

BurpSuite (pour l’analyse plus poussée du sessionID notamment)�http://portswigger.net/suite/

6. Scanner de vulnérabilités : NIKTO

NIKTO Présentation (1)

Catégorie Scanner de vulnérabilités web

Nom Nikto

Public Administrateurs

6. Scanner de vulnérabilités

Public Administrateurs

Editeur http://www.cirt.net/nikto2

Licence GNU GPL

FonctionnalitésRecherche de vulnérabilités (failles connues sur les CMS par exemple)

NIKTO Installation (2)

Durée 5 mn

Procédure � Télécharger Nikto et décompresser l’archive :

6. Scanner de vulnérabilités

# wget http://www.cirt.net/nikto/nikto-current.tar.gz

# tar -zxvf nikto-current.tar.gz

# cd nikto

NIKTO Installation : Debian (2)

Durée 5 mn

Procédure Sur Debian, le paquet nikto fait partie de la section non-free. Ilfaut donc l’ajouter dans le fichier de déclaration des sources(/etc/apt/sources.list) :

6. Scanner de vulnérabilités

deb http://ftp.fr.debian.org/debian/ lenny main non-free

deb-src http://ftp.fr.debian.org/debian/ lenny main non-free

deb http://security.debian.org/ lenny/updates main non-free

deb-src http://security.debian.org/ lenny/updates main non-free

Installation du paquet :

# apt-get install nikto

NIKTO Tests (3)

Tests de base : perl nikto.pl -h 192.168.0.1

Tests sur port différent : perl nikto.pl -h 192.168.0.1 -p 443

Tests sur URL : perl nikto.pl -h https://192.168.0.1:443/

Tests SSL : perl nikto.pl -h 192.168.0.1 -p 443 -ssl

Tests x ports : perl nikto.pl -h 192.168.0.1 -p 80,88,443

6. Scanner de vulnérabilités

Exécuter

Tests x ports : perl nikto.pl -h 192.168.0.1 -p 80,88,443

Scans de cibles multiples : perl nikto.pl -h fichier.txt

----- Contenu de fichier.txt :----

192.168.0.1:80

192.168.0.2,80

192.168.0.3

192.168.0.1,80,443

192.168.0.1:80:443

localhost:8888

Attention impossible de placer des URLs dans ce fichier !

NIKTO Tests (3)

Options-V-U

Affiche la version des bases/pluginsMet à jour la base des signatures/plugins

-Tuning permet de préciser quels tests faire ou ne pas faire (option “x”) :0 - File Upload1 - Interesting File / Seen in logs (nombreux faux positifs)2 - Misconfiguration / Default File

6. Scanner de vulnérabilités

2 - Misconfiguration / Default File3 - Information Disclosure4 - Injection (XSS/Script/HTML)5 - Remote File Retrieval - Inside Web Root6 - Denial of Service7 - Remote File Retrieval - Server Wide8 - Command Execution / Remote Shell9 - SQL Injectiona - Authentication Bypassb - Software Identificationg - Generic (Don't rely on banner)

Ex : perl nikto.pl -h monsite.com -T1x

NIKTO Tests (3)

Options-Mutate spécifie une technique de mutation. Permet d’ajouter des tests

supplémentaires1 - Test all files with all root directories2 - Guess for password file names3 - Enumerate user names via Apache (/~user type requests)4 - Enumerate user names via cgiwrap

6. Scanner de vulnérabilités

4 - Enumerate user names via cgiwrap

(/cgi-bin/cgiwrap/~user type requests)

Tests

réalisés

Recherche de failles sur la base des vulnérabilités déclarées dans l’OSVDB (The Open Source Vulnerability Database)

NIKTO Tests (3)

Etape préliminaire : récupérer l’arborescence du site (crawler/spider, directory brutforcer).

Méthone manuelle : list-url.py ou list-url2.py (disponibles sur

6. Scanner de vulnérabilités

Exécuter

Méthone manuelle : list-url.py ou list-url2.py (disponibles sur

le CD BackTrack3)

$ list-urls2.py -l www.monsite.fr

http://site.externe.fr

http://autre.site.externe.fr

mespages/web

mondossier/index.html

$ perl nikto.pl -h http://www.monsite.fr/ mespages/web/

NIKTO Tests (3)

Semi-automatique : HarvestMan

$ wget http://harvestman-crawler.googlecode.com/files/HarvestMan-

2.0.3alpha12102008.tar.gz

$ tar -zxvf HarvestMan-2.0.3alpha12102008.tar.gz

$ cd HarvestMan-2.0.3alpha12102008

$ (sudo) python setup.py install

6. Scanner de vulnérabilités

Exécuter

$ (sudo) python setup.py install

$ harvestman --simulate http://192.168.1.14 2&1>DVL_URLS.txt

$ egrep -e ".*Downloading file for url.*\/$" DVL_URLS.txt | awk

'{print "perl nikto.pl -T 1x -h",$6," >> niktoscanDVL.txt"}' >

scanDVL.sh

Extrait du fichier scanDVL.sh (à exécuter ensuite) :

perl nikto.pl -T 1x -h http://192.168.1.14/ >> niktoscanDVL.txt

perl nikto.pl -T 1x -h http://192.168.1.14/phpmyadmin/ >> niktoscanDVL.txt

perl nikto.pl -T 1x -h http://192.168.1.14/manual/ >> niktoscanDVL.txt

perl nikto.pl -T 1x -h http://192.168.1.14/webexploitation_package_02/ >>

niktoscanDVL.txt

perl nikto.pl -T 1x -h http://192.168.1.14/webexploitation_package_01/ >>

niktoscanDVL.txt

6. Scanner de vulnérabilitésNIKTO Résultats (4)

Sortie Texte (console)

##### TEST 1 : DVL

- Nikto v2.03/2.04

---------------------------------------------------------------------------

+ Target IP: 192.168.1.241

+ Target Hostname: 192.168.1.241

+ Target Port: 80

+ Start Time: 2009-01-22 22:33:53

---------------------------------------------------------------------------

+ Server: Apache/1.3.37 (Unix) PHP/4.4.4

- Allowed HTTP Methods: GET, HEAD, OPTIONS, TRACE

+ OSVDB-877: HTTP method ('Allow' Header): 'TRACE' is typically only used for debugging

and should be disabled. This message does not mean it is vulnerable to XST.

+ Apache/1.3.37 appears to be outdated (current is at least Apache/2.2.10). Apache

1.3.41 and 2.0.63 are also current.

+ PHP/4.4.4 appears to be outdated (current is at least 5.2.6)

6. Scanner de vulnérabilitésNIKTO Résultats (4)

Sortie Texte (console)

+ OSVDB-0: GET /./ : Appending '/./' to a directory allows indexing

+ OSVDB-0: GET /%2e/ : Weblogic allows source code or directory listing, upgrade to v6.0 SP1 or higher.

http://www.securityfocus.com/bid/2513.

+ OSVDB-877: TRACK / : TRACK option ('TRACE' alias) appears to allow XSS or credential theft. See

http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf for details

+ OSVDB-877: TRACE / : TRACE option appears to allow XSS or credential theft. See

http://www.cgisecurity.com/whitehat-mirror/WhitePaper_screen.pdf for details

+ OSVDB-119: GET /?PageServices : The remote server may allow directory listings through Web Publisher by

forcing the server to show all files via 'open directory browsing'. Web Publisher should be disabled.

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-1999-0269.

+ OSVDB-119: GET /?wp-cs-dump : The remote server may allow directory listings through Web Publisher by

forcing the server to show all files via 'open directory browsing'. Web Publisher should be disabled.

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-1999-0269.

+ OSVDB-3092: GET /info/ : This might be interesting...

+ OSVDB-3092: GET /phpmyadmin/ : phpMyAdmin is for managing MySQL databases, and should be protected or

limited to authorized hosts.

+ OSVDB-3092: GET /manual/ : Web server manual found.

+ OSVDB-3268: GET /icons/ : Directory indexing is enabled: /icons

+ OSVDB-3268: GET /manual/images/ : Directory indexing is enabled: /manual/images

+ OSVDB-3233: GET /icons/README : Apache default file found.

+ 3577 items checked: 16 item(s) reported on remote host

+ End Time: 2009-01-22 22:34:29 (36 seconds)

---------------------------------------------------------------------------

+ 1 host(s) tested

Test Options: -Cgidirs all -host 192.168.1.241 -output nikto-DVL

---------------------------------------------------------------------------

NIKTO Conclusion (5)

+

� Détecte bien les phpinfo.php et cie� Détecte bien les répertoires navigables� Détecte (parfois) les CMS installés� Peut mettre à jour des défauts de réglages du serveur web

6. Scanner de vulnérabilités

-� Pas de spider/crawler (à voir la version windows ?)� Nombreux faux positifs� Détecte seulement les failles connues

NIKTO Liens (6)

� http://www.cirt.net/nikto2

6. Scanner de vulnérabilités

Liste des mots de passe par défaut :

�http://www.cirt.net/passwords

6. Scanner de vulnérabilités : DirBuster

DirBuster Présentation (1)

Catégorie Scanner de vulnérabilités web

Nom DirBuster

Public Administrateurs

6. Scanner de vulnérabilités

Public Administrateurs

Editeurhttp://www.owasp.org/index.php/Category:OWASP_DirBuster_Project

LicenceLGPL (application) + Creative Commons (listings de répertoires)

FonctionnalitésSpider+Fuzzer, recherche de répertoires/fichiers « cachés » par une méthode de force brute.

DirBuster Installation (2)

Durée 5 mn

Procédure Ecrit en java, existe en versions :

Linux (tar.bz2), MacOS (.dmg) et Windows (installeur)

6. Scanner de vulnérabilités

Linux (tar.bz2), MacOS (.dmg) et Windows (installeur)

� Télécharger et décompacter l’archive / lancer

l’installeur.

DriBuster Tests (3)

Exécuter java -jar DirBuster-0.12.jar -H -u http://monsite.com

Options-H-l <Word list to use>-g-e <File Extention list>-t <Number of Threads>

Headless mode (no gui).List based brute force word list.Only use GET requests.File Extention list eg asp,aspx. (php)Number of connection threads to use (10)

6. Scanner de vulnérabilités

-t <Number of Threads>-s <Start point>-R-r <location>

Number of connection threads to use (10)Start point of the scan (/)Don't be recursive.File to save report to.

Tests réalisés

Recherche de répertoires cachés à partir de diverses listes (9 différentes) :

6. Scanner de vulnérabilitésDirBuster Résultats (4)

Sortie TexteTest sur la distrib DVL :

DirBuster 0.12 - Report

http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project

Report produced on Thu Jan 22 17:53:33 CET 2009

--------------------------------

http://192.168.1.241:80

--------------------------------

Directories found during testing:

Dirs found with a 200 response:

/

/icons/

/info/

/beef/

/manual/

/manual/

/unicornscan/

/webexploitation_package_01/

/phpmyadmin/

/webexploitation_package_02/

6. Scanner de vulnérabilitésDirBuster Résultats (4)

/olate/

/manual/misc/

/manual/mod/

/manual/programs/

/manual/howto/

/manual/vhosts/

/manual/images/

/phpmyadmin//phpmyadmin/

/beef/

/olate/

/icons/small/

/info/index/

/info/full/

/info/warez/

/info/12/

/info/2006/

/info/news/

/info/crack/

[...]

et 39326 similaires avant interruption manuelle du scan. Cet exemple montre une limitation de ce type d’outil : il suffit que le serveur réponde avec un 200 sur toutes les URL du type http://monserveur.com/repertoire/* pour que tous les essais de l’outil soient (faux) positifs.

DirBuster Conclusion (5)

+

� Peut servir de spider à Nikto/WebShag� Listes construites à partir d’une collecte sur internet de noms de répertoires et de fichiers utilisés par les développeurs.

6. Scanner de vulnérabilités

développeurs.

-� Attention à la config du serveur : Nombreux faux positifs

DirBuster Liens (6)

� http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project

6. Scanner de vulnérabilités

6. Scanner de vulnérabilités : Wapiti

WAPITI Présentation (1)

Catégorie Scanner de vulnérabilités web

Nom Wapiti

Public Administrateurs, (développeurs)

6. Scanner de vulnérabilités

Public Administrateurs, (développeurs)

Editeur http://wapiti.sourceforge.net

Licence GNU GPL

FonctionnalitésScans de type “boîte noire”, fuzzer. File includes, Injections SQL, LDAP, XSS, etc;

WAPITI Installation (2)

Durée 5-10 mn

Procédure � Installation de wapiti :

télécharger wapiti-1.1.6 (28 Jan 2007)

6. Scanner de vulnérabilités

télécharger wapiti-1.1.6 (28 Jan 2007) http://sourceforge.net/project/showfiles.php?group_id=168625&package_id=191974&release_id=482116

tar -zxvf wapiti-1.1.6.tar.gzcd wapiti-1.1.6

Procédure similaire pour wapiti-2.0.0-beta

WAPITI Installation (2)

Durée 5-10 mn

Procédure � lswww (l’aspirateur des pages) a du mal a fonctionner avec des

pages HTML malformées. Pour permettre à lswww de

6. Scanner de vulnérabilités

pages HTML malformées. Pour permettre à lswww de

fonctionner correctement il faut installer :

Tidy - http://tidy.sourceforge.net/ctypes - http://starship.python.net/crew/theller/ctypes/uTidyLib - http://utidylib.berlios.de/

WAPITI Installation (2)

Durée Encore 5-10 mn… si tout va bien…

Procédure # yum install tidy

# wget http://ovh.dl.sourceforge.net/sourceforge/ctypes/ctypes-1.0.2.tar.gz# tar -zxvf ctypes-1.0.2.tar.gz

6. Scanner de vulnérabilités

# tar -zxvf ctypes-1.0.2.tar.gz # cd ctypes-1.0.2# python setup.py build# python setup.py test# python setup.py install# cd ..# wget http://download.berlios.de/utidylib/uTidylib-0.2.zip# unzip uTidylib-0.2.zip# cd uTidylib-0.2# python setup.py install

WAPITI Tests (3)

Exécuter python wapiti.py http://mon-site.com/repertoire/ [options]

Options-a <login%password>--auth <login%password>-c <cookie_file>--cookie <cookie_file>

Set credentials for HTTP authentication

To use a cookie

Set the name of the report file. If the

6. Scanner de vulnérabilités

-o <output> (v2.0.0-beta)--output <output_file>

Set the name of the report file. If the selected report type is "html", this parameter must be a directory

Tests réalisés

-File Handling Errors (Inclusions locales et distantes : include/require, fopen, readfile...)- Injections dans des bases de données (PHP/JSP/ASP SQL -Injections Injections XPath)- XSS (Cross Site Scripting)-Injections LDAP-Détection d’exécutions de commandes (eval(), system(), passtru()...)-Injection CRLF

6. Scanner de vulnérabilitésWAPITI Résultats (4)

Sortie Texte (console), HTML (2.0.0-b), XML (2.0.0-b)

http://192.168.1.16/webexploitation_package_02/nabopoll/templates/compact/{SURVEY_URL}: HTTP Error 404: Not Found

http://192.168.1.16/webexploitation_package_02/nabopoll/templates/compact/{SURVEY_RESULTS}: HTTP Error 404: Not Found

http://192.168.1.16/webexploitation_package_02/phpBB2_2_0_12/emailto:no.one@domain.adr: HTTP Error 404: Not Found

http://192.168.1.16/webexploitation_package_02/phpBB2_2_0_13/emailto:no.one@domain.adr: HTTP Error 404: Not Found

Attacking urls (GET)...Attacking urls (GET)...

-----------------------

XSS () in http://192.168.1.16/info.php

Evil url: http://192.168.1.16/info.php?=<script>alert('a5bgvz4yjh')</script>

XSS (email) in http://192.168.1.16/webexploitation_package_01/exploitme001/reset.php

Evil url:

http://192.168.1.16/webexploitation_package_01/exploitme001/reset.php?email=<script>alert('lfaea5icxm')</script>&user=D

umbUser

XSS () in http://192.168.1.16/webexploitation_package_01/info.php

Evil url: http://192.168.1.16/webexploitation_package_01/info.php?=<script>alert('qhnoefnpv1')</script>

[…]

Attacking forms (POST)...

-------------------------

Found XSS in http://192.168.1.16/webexploitation_package_01/exploitme005/buy.php

with params = item=%3Cscript%3Ealert%28%27amsbj2xn3y%27%29%3C%2Fscript%3E&quantity=on

coming from http://192.168.1.16/webexploitation_package_01/exploitme005/

MySQL Injection in http://192.168.1.16/webexploitation_package_02/cyphor/index.php

with params = login=%BF%27%22%28&f_cookies=1&submit=Login&pass=on

coming from http://192.168.1.16/webexploitation_package_02/cyphor/

[…]

Upload scripts found :

----------------------

http://192.168.1.16/webexploitation_package_01/exploitme003/upload.php.

6. Scanner de vulnérabilitésWAPITI Résultats (4)

Sortie Format HTML : v 2.2.0-beta

6. Scanner de vulnérabilitésWAPITI Résultats (4)

Sortie Format HTML : v 2.2.0-beta

6. Scanner de vulnérabilitésWAPITI Résultats (4)

Sortie Format HTML : v 2.2.0-beta

6. Scanner de vulnérabilitésWAPITI Résultats (4)

Sortie Format HTML : v 2.2.0-beta

WAPITI Conclusion (5)

+

� Ne repose pas sur une base de connaissances� Spider intégré, détections de failles multiples� Nouvelle méthode de scan XSS dans la v2.0.0-beta qui a détecté un XSS dans un wiki� Nouveau spider dans la v2.0.0-beta

6. Scanner de vulnérabilités

� Nouveau spider dans la v2.0.0-beta� Résultats concis (pas hyper verbeux)

-

� Bugs dans v2.0.0-beta, mais meilleure détection que la v1.1.6 => il faut utiliser les deux versions !� L’option -a n’est pas fonctionnelle dans la 1.1.6� Il faut savoir interpréter les résultats (faux positifs ?)� Ne fonctionne qu’avec du code html propre…� Installation de libtidy et uTidylib pénible sous certains systèmes (la version 1.1.6 est sur BackTrack 3)

WAPITI Liens (6)

� http://wapiti.sourceforge.net/�http://devloop.lyua.org/blog/index.php?2008/03/01/499-playing-with-beautiful-soup

6. Scanner de vulnérabilités

+

soup�http://wapiti.sourceforge.net/�http://devloop.lyua.org/blog/index.php?2006/04/26/246-howto-faire-fonctionner-efficacement-lswww�http://devloop.lyua.org/blog/index.php?2007/01/28/390-wapiti-116�http://devloop.lyua.org/blog/index.php?2008/09/15/530-wapiti-117-alpha�http://devloop.lyua.org/blog/index.php?2008/10/11/534-wapiti-2-0-0-beta

6. Scanner de vulnérabilités : SQLiX

SQLiX Présentation (1)

Catégorie Scanner de vulnérabilités web

Nom SQLiX

Public Administrateurs, (développeurs)

6. Scanner de vulnérabilités

Public Administrateurs, (développeurs)

Editeur http://www.scrt.ch/pages_en/outils.html

Licence GNU GPL

FonctionnalitésInjections SQL

SQLiX Installation (2)

Durée 5-10 mn et plus…

Procédure Nécessite le module Perl WWW::CheckSite::Spider

# perl -MCPAN -e shell

6. Scanner de vulnérabilités

# perl -MCPAN -e shell

cpan> install WWW::CheckSite::Spider

Instalation de SQLiX :

télécharger SQLiX_v1.0.tar.gzhttp://cedri.cc/tools/SQLiX_v1.0.tar.gz

$ tar -zxvf SQLiX_v1.0.tar.gz

$ cd SQLiX_v1.0

Présent sur les cds live BackTrack 3 et DVL (Damn Vulnerable Linux)

SQLiX Tests (3)

Exécuter perl SQLiX.pl -crawl="http://localhost/" -all -v 2

Target

specification

-url [URL] Scan a given URL.

Example: -url="http://target.com/index.php?id=1"

--post_content [CONTENT] Add a content to the current [URL] and

change the HTTP method to POST

-file [FILE_NAME]Scan a list of URI provided via a flat file.

6. Scanner de vulnérabilités

-file [FILE_NAME]Scan a list of URI provided via a flat file.

Example: -file="./crawling"

-crawl [ROOT_URL]Scan a web site from the given root URL.

Example: -crawl="http://target.com/"

Injection vectors

-referer Use HTTP referer as a potential injection vector.

-agent Use HTTP User agent as a potential injection vector.

-cookie [COOKIE] Use the cookie as a potential injection vector.

Cookie value has to be specified and the injection area

tagged as "--INJECT_HERE--".

Example: -cookie="userID=--INJECT_HERE--"

SQLiX Tests (3)

Injection

methods

-all Use all the injection methods.

-method_taggy Use MS-SQL "verbose" error messages method.

-method_error Use conditional error messages injection method.

-method_blind Use all blind injection methods.

-method_blind_integer Use integer blind injection method.

-method_blind_string Use string blind injection method.

-method_blind_statement Use statement blind injection method.

6. Scanner de vulnérabilités

-method_blind_statement Use statement blind injection method.

-method_blind_comment Use MySQL comment blind injection

method.

Attack modules

-exploit Exploit the found injection to extract information.

by default the version of the database will be retrieved

-function [function] Used with exploit to retrieve a given

function value.

Example: -function="system_user"

Example: -function="(select password from user_table)"

6. Scanner de vulnérabilitésSQLiX Résultats (4)

Sortie Texte

SQLiX_v1.0 # perl SQLiX.pl -crawl http://localhost/ -all -v 2 -exploit

======================================================

-- SQLiX --

? Copyright 2006 Cedric COCHIN, All Rights Reserved.

======================================================

Analysing URI obtained by crawling [http://localhost/]

http://localhost/

http://localhost/webexploitation_package_02/

http://localhost/webexploitation_package_02/wordpress/

http://localhost/webexploitation_package_02/wordpress/wp-login.php

http://localhost/webexploitation_package_02/wordpress/wp-login.php?action=lostpassword

[+] working on action

[+] Method: MS-SQL error message

[+] Method: SQL error message

[+] Method: MySQL comment injection

[+] Method: SQL Blind Statement Injection

[+] Method: SQL Blind String Injection

http://localhost/webexploitation_package_02/wordpress/?m=200706

[+] working on m

[+] Method: MS-SQL error message

[+] Method: SQL error message

[+] Method: MySQL comment injection

[+] Method: SQL Blind Integer Injection

[+] Method: SQL Blind Statement Injection

[+] Method: SQL Blind String Injection

6. Scanner de vulnérabilitésSQLiX Résultats (4)

http://localhost/webexploitation_package_02/wordpress/?cat=1

[+] working on cat

[+] Method: MS-SQL error message

[+] Method: SQL error message

[FOUND] Match found INPUT:['] - "You have an error in your

SQL syntax"

[INFO] Error with quote[INFO] Error with quote

[INFO] Current function: version()

[INFO] length: 255

[FOUND] SQL error message

Travail sur les différents champs de l’url et détection de faux positifs :

http://localhost/webexploitation_package_02/phpnuke7.8/modules.php?name=Web_Links&l_op=

TopRated&ratenum=10&ratetype=percent

[+] working on ratenum

[+] Method: MS-SQL error message

[+] Method: SQL error message

[+] Method: MySQL comment injection

[+] Method: SQL Blind Integer Injection

[FOUND] Blind SQL Injection: Integer based

[FOUND] Blind SQL Injection: Integer based with quotes

[ERROR] both methods can't be true simultanesly

6. Scanner de vulnérabilitésSQLiX Résultats (4)

RESULTS:

The variable [cat] from [http://localhost/webexploitation_package_02/wordpress/

?cat=1] is vulnerable to SQL Injection [Error message (') - MySQL].

The variable [month] from [http://localhost/webexploitation_package_02/

phpnuke7.4/modules.php?name=Statistics&op=DailyStats&year=2009&month=1&date=31]

is vulnerable to SQL Injection [Statement with quotes - ].

The variable [sectionid] from [http://localhost/webexploitation_package_02/

joomla107/index.php?option=com_content&task=category&sectionid=1&id=1&Itemid=2]

is vulnerable to SQL Injection [Comment without quotes - MySQL].

The variable [feedid] from [http://localhost/webexploitation_package_02/

joomla107/index.php?option=com_newsfeeds&task=view&feedid=6&Itemid=7]

is vulnerable to SQL Injection [Comment with quotes - MySQL].

SQLiX Conclusion (5)

+

� Outil complet pour les tests d’injection� Spider intégré�Méthode de détection de faux positifs

6. Scanner de vulnérabilités

-

Fonctionne bien sur GETPOST….???Documentation inexistante

SQLiX Liens (6)

6. Scanner de vulnérabilités

�http://www.owasp.org/index.php/Category:OWASP_SQLiX_Project

6. Scanner de vulnérabilités : WebShag

WebShag Présentation (1)

Catégorie Scanner de vulnérabilités web

Nom WebShag

Public Administrateurs

6. Scanner de vulnérabilités

Public Administrateurs

Editeur http://www.scrt.ch/pages_en/outils.html

Licence GNU GPL

FonctionnalitésCrawler, Fuzzer, Détection de vulnérabilités

WebShag Installation (2)

Durée 5-10 mn

Procédure � télécharger l’outil et décompacter l’archive :http://www.scrt.ch/outils/webshag/ws100_linux.tar.gz

6. Scanner de vulnérabilités

# tar -zxvf ws100_linux.tar.gz

WebShag Installation (2)

6. Scanner de vulnérabilités

INITIALISATION :

$ python config_linux.py

This script will setup all the required webshag parameters.

Detecting Nmap port scanner... Not Found!

Nmap location (blank if not installed):

Nmap not found. Port scan module will not be functional.

Valid Live Search AppID (blank if none):

Domain information module will not be functional.

Patching source code to setup config file location... Done!

Setting up path to file fuzzer lists... Done!

Setting up path to URL database files... Done!

Setting up path to (IDS) proxies list... Done!

Writing changes to configuration file... Done!

Thanks for your interest in webshag! It is now ready to be used!

If you move webshag folder, run this script again to reconfigure.

Enjoy! For more information please visit www.scrt.ch

WebShag Installation (2)

6. Scanner de vulnérabilités

MISE A JOUR DES BASES :

$ python webshag.py -U

Update of Nikto database successful!

Update of SCRT database successful!Update of SCRT database successful!

WebShag Tests (3)

Usage webshag.py [-U | -C [options] target(s)]

6. Scanner de vulnérabilités

Options:

-C Use the Command Line Interface (CLI) mode

-U Update the URL scanner databases and exit

-m MODULE *CLI only* Use MODULE [pscan|info|spider|uscan|fuzz].

(default: uscan)(default: uscan)

-p PORT *CLI only* Set target port to PORT. For modules uscan and

fuzz PORT can be a list of ports [port1,port2,...].

(default: 80)

-r ROOT *CLI only* Set root directory to ROOT. For modules uscan and

fuzz ROOT can be a list of directories [/root1/,/root2/,...]. (default: /)

-k SKIP *CLI (uscan) only* Set a false positive detection string

-s SERVER *CLI (uscan) only* Bypass server detection and force server as SERVER

-i SPIDER_INIT *CLI (spider) only* Set spider initial crawling page (default: /)

-n FUZZ_MODE *CLI (fuzz) only* Choose the fuzzing mode [list|gen]. (default: list)

-e FUZZ_EXT *CLI (fuzz / list) only* Set a default extension to append to all

filenames. (default: .html)

-g FUZZ_GEN *CLI (fuzz / gen) only* Set the filename generator

expression. Refer to documentation for syntax reference. (default: )

-x *CLI only* Export a report summarizing results.

-o OUTPUT *CLI only* Set the format of the exported report. [xml|html|txt].

(default: html)

-f OUTPUT_FILE *CLI only* Write report to FILE. (default: webshag_report.html)

WebShag Tests (3)

Usage Module spider

6. Scanner de vulnérabilités

localhost:SCRT Webshag adm1n$ ./webshag.py -C -m spider -i /ADF localhost

~~~~~~~~~~~~~~~~~~~~~~~~~~ ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% webshag 1.00

% Module: spider

% Host: localhost% Host: localhost

% Port: 80

% Root: /ADF

~~~~~~~~~~~~~~~~~~~~~~~~~~ ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

localhost / 80

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% [ I ] % /ADF/TPs/

% [ I ] % /ADF/scripts_vulnerables/

% [ I ] % /ADF/scripts_vulnerables/XSS/

[…]

% [ I ] % /ADF/TPs/ex3_vol_session/bad_www/

% [ I ] % /ADF/TPs/ex3_vol_session/gentil/

% [ M ] % you@example.com

% [ M ] % toto@xxx.yyy.fr

% [ I ] % /ADF/scripts_vulnerables/XSS/cookie/

% [ I ] % /ADF/scripts_vulnerables/XSS/fichier/

~~~~~~~~~~~~~~~~~~~~~~~~~~ ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Liens internes : ‘’% [ I ] %’’

grep, awk => uscan

WebShag Tests (3)

Usage Module uscan

6. Scanner de vulnérabilités

#python webshag.py -C -m uscan -r/~user/moncms www.mon.serveur.a.moi.com

~~~~~~~~~~~~~~~~~~~~~~~~~~ ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% webshag 1.00

% Module: uscan

% Host(s): www.mon.serveur.a.moi.com% Host(s): www.mon.serveur.a.moi.com

% Port(s): 80

% Root(s): /~user/moncms/

~~~~~~~~~~~~~~~~~~~~~~~~~~ ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

www.mon.serveur.a.moi.com / 80

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

% BANNER % Apache => apache

% INFO % FP(/~user/moncms/) => 200#text/html#c95db01c3a17545aced464c9df9fc1bd#…

% INFO % FP(/~user/moncms/OLgcREvt) => 404#text/html#a502f41af02329906a36b4e46…

% INFO % FP(/~user/moncms/index.php) => 200#text/html#8ec1c744dd883c80b717ef79…

% INFO % /~user/moncms/robots.txt found. It might be interesting to have a look

inside.

% 200 % /~user/moncms/install/

% DESC % This might be interesting...

% 200 % /~user/moncms/install/install.php

% DESC % Install file found.

% 200 % /~user/moncms/INSTALL.txt

WebShag Tests (3)

Usage Module uscan

6. Scanner de vulnérabilités

% DESC % Default file found.

% 200 % /~user/moncms/UPGRADE.txt

% DESC % Default file found.

% 200 % /~user/moncms/install.php

% DESC % Drupal install.php file found.% DESC % Drupal install.php file found.

% 200 % /~user/moncms/LICENSE.txt

% DESC % License file found may identify site software.

% 200 % /~user/moncms/install.php

% DESC % install.php file found.

% 200 % /~user/moncms/CHANGELOG.txt

% DESC % A changelog was found.

% 200 % /~user/moncms/INSTALL.mysql.txt

% DESC % Drupal installation file found.

% 200 % /~user/moncms/INSTALL.pgsql.txt

% DESC % Drupal installation file found.

% 200 % /~user/moncms/update.php

% DESC % Drupal's update.php was found.

% 200 % /~user/moncms/xmlrpc.php

% DESC % xmlrpc.php was found.

6. Scanner de vulnérabilitésWebShag Résultats (4)

Sortie Texte (console), HTML (2.0.0-b), XML (2.0.0-b)

http://192.168.1.16/webexploitation_package_02/nabopoll/templates/compact/{SURVEY_URL}: HTTP Error 404: Not Found

http://192.168.1.16/webexploitation_package_02/nabopoll/templates/compact/{SURVEY_RESULTS}: HTTP Error 404: Not Found

http://192.168.1.16/webexploitation_package_02/phpBB2_2_0_12/emailto:no.one@domain.adr: HTTP Error 404: Not Found

http://192.168.1.16/webexploitation_package_02/phpBB2_2_0_13/emailto:no.one@domain.adr: HTTP Error 404: Not Found

Attacking urls (GET)...Attacking urls (GET)...

-----------------------

XSS () in http://192.168.1.16/info.php

Evil url: http://192.168.1.16/info.php?=<script>alert('a5bgvz4yjh')</script>

XSS (email) in http://192.168.1.16/webexploitation_package_01/exploitme001/reset.php

Evil url:

http://192.168.1.16/webexploitation_package_01/exploitme001/reset.php?email=<script>alert('lfaea5icxm')</script>&user=D

umbUser

XSS () in http://192.168.1.16/webexploitation_package_01/info.php

Evil url: http://192.168.1.16/webexploitation_package_01/info.php?=<script>alert('qhnoefnpv1')</script>

[…]

Attacking forms (POST)...

-------------------------

Found XSS in http://192.168.1.16/webexploitation_package_01/exploitme005/buy.php

with params = item=%3Cscript%3Ealert%28%27amsbj2xn3y%27%29%3C%2Fscript%3E&quantity=on

coming from http://192.168.1.16/webexploitation_package_01/exploitme005/

MySQL Injection in http://192.168.1.16/webexploitation_package_02/cyphor/index.php

with params = login=%BF%27%22%28&f_cookies=1&submit=Login&pass=on

coming from http://192.168.1.16/webexploitation_package_02/cyphor/

[…]

Upload scripts found :

----------------------

http://192.168.1.16/webexploitation_package_01/exploitme003/upload.php.

WebShag Conclusion (5)

+

� Spider « intégré » !!!!� Intégragion spider, scanner (Nikto), fuzzer (DirBuster)� Utilise un mécanisme de prise d’empreinte pour réduire le nombre de faux positifs� interface graphique

6. Scanner de vulnérabilités

� interface graphique� Sur cas réels a rapporté des choses intéressantes :-)

-

� Repose sur des bases de connaissances� Génère beaucoup de traces dans les logs� Certaines options non disponibles en CLI

WebShag Liens (6)

6. Scanner de vulnérabilités

+� http://www.scrt.ch/pages_en/outils.html

Méthodologie (5)

� Spider (list-urls.py, HarvestMan)� Recherche de contenu caché (Dirbuster)� Recherche de vulnérabilités connues (Nikto, WebShag)

6. Synthèse

� Recherche de vulnérabilités connues (Nikto, WebShag)� Scanner-Fuzzer automatique (wapiti)� Injections SQL (SQLiX)� Investigation ciblée (WebScarab)

CONCLUSIONS (5)

�Résultats obtenus sur cas réels mitigés pour les outilsautomatiques�Ne dispense pas d’une bonne expertise (exploitation desrésultats)� Pas d’outils miracle !

6. Synthèse

� Pas d’outils miracle !� Il faut comprendre les failles pour être capable de les« tester » automatiquement via ces outils.� Outils expérimentaux, peu documentés� Combiner plusieurs outils + analyse interactive� ATTENTION : Tests sur serveur en Prod = DANGER !!!

top related