web-dev-qa-db-fra.com

Cette vulnérabilité de débordement entier est-elle exploitable?

Est-ce que ce débordement a-t-il exploitable et si la réponse est oui, comment puis-je l'exploiter?

char buffer[20];
int len = atoi(argv[1]);
if(len < 20)
  memcpy(buffer,argv[2],len);

Si je définit LEN sur -1 l'application se bloque, car le nombre d'octets à copier est trop long et il y a un segfault. Mais existe-t-il un moyen ou une méthode pour exploiter la vulnérabilité?

3
user126623

oui

Vous n'avez pas besoin d'utiliser -1, toute valeur supérieure à 20 vous permettra de déborder le tampon.

Cela dépendra des instructions suivantes et des mesures d'atténuation définies par le compilateur, mais à partir de ce point, vous pouvez probablement remplacer l'adresse de retour et exécuter un code shell fourni sous la forme du deuxième paramètre.

3
Ángel

C'est dangereux.

Est-ce exploitable? Peut-être. Vous nous avez déjà dit que vous pouviez causer un crash, vous pourrez donc être capable de dous un système en l'écrasant ... en fonction de l'endroit d'ARGV 1 vient de. S'il s'agit d'une valeur codée dur, ou si elle est générée par une application appelante et ne peut jamais être comprise entre 0 et 20, il peut ne pas être exploitable dans le système. Ce serait toujours un mauvais modèle de codage, car un petit changement pourrait le rendre exploitable. Ou si ce n'est jamais exécuté de code, ou si c'est le code qui n'est exécuté que par vous et personne d'autre qui l'exécute, les règles de pare-feu empêchent les valeurs inférieures à 20, etc., il ne serait pas exploitable.

Est-ce exécutable? Peut-être. Nous n'avons pas assez d'informations pour déterminer dans les deux sens. Nous ne savons pas si le compilateur insère des canaries de pile. Nous ne savons pas s'il y a autre code qui contrôle ARGV 1 et le force à être une valeur de sécurité.

Essayez d'utiliser ! Exploitable Si vous utilisez Windows si vous voulez un indice (je ne me souviens pas des outils pour d'autres OSES).

1
atk

Personne ne semble penser à la possibilité que ARGV [1] n'est pas un nombre. Si vous entrez simplement "Ceci" comme premier argument ATOI retourne 0, et vous pouvez également déborder le tampon car 0 <20. Atoi n'est pas un bon choix dans de nombreux aspects. Il est préférable d'utiliser Strtol qui vous permet de détecter des erreurs de saisie.

0
kaidentity