Introduction
Dans les articles précédents, nous avons discuté des fonctions d’impression, des chaînes de format et des vulnérabilités de chaînes de format. Cet article donne un aperçu de la façon dont les vulnérabilités de chaînes de format peuvent être exploitées. Dans cet article, nous allons commencer par résoudre un défi simple pour fuir un secret de la mémoire. Dans le prochain article, nous discuterons d’un autre exemple, où nous enchaînerons une vulnérabilité de chaîne de format et une vulnérabilité de débordement de tampon pour créer un meilleur impact.
Comment les vulnérabilités de chaîne de format peuvent-elles être exploitées?
Comme mentionné dans l’article précédent, voici quelques-unes des attaques possibles en utilisant des vulnérabilités de chaîne de format.
- Secrets qui fuient
- Déni de service
- Adresses mémoire qui fuient
- Écrasement des adresses mémoire
Dans cet article, discutons des deux premiers éléments.
Fuite de secrets de la pile
Voici le programme vulnérable que nous utiliserons pour comprendre l’approche consistant à exploiter une vulnérabilité de chaîne de format simple pour pouvoir lire les données de la mémoire.
# inclure < stdio.h >
int main(int argc, char*argv) {
char*secret = »[email protected] »;
printf(argv);
}
Comme nous pouvons le remarquer, le programme est vulnérable à la vulnérabilité des chaînes de format car la fonction printf reçoit les entrées de l’utilisateur et les imprime. Il convient de noter qu’aucun spécificateur de format n’est utilisé dans la fonction printf, ce qui rend le programme vulnérable.
Lançons le programme à l’aide de gdb, vérifions le désassemblage de la fonction principale et configurons un point d’arrêt à l’adresse de l’appel printf.
g gdb./ vulnerable
gef➤ disass main
Vidage du code assembleur pour la fonction main:
0x0000000000401136 < +0 >: endbr64
0x00000000040113a < +4 >: push rbp
0x00000000040113b < +5 >: mov rbp, rsp
0x000000000040113e < +8 >: sub rsp,0x20
0x0000000000401142 <+12>: mov DWORD PTR ,edi
0x0000000000401145 <+15>: mov QWORD PTR ,rsi
0x0000000000401149 <+19>: lea rax, # 0x402004
0x0000000000401150 <+26>: mov QWORD PTR ,rax
0x0000000000401154 <+30>: mov rax,QWORD (Read more…)