Comment exploiter les vulnérabilités de chaînes de format

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…)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.