¿Cómo confundir el servicio con el envío de datos erróneos?

2

Estoy leyendo una publicación sobre fuzzer en Python, aquí está el código:

# Import the required modulees the script will leverage
# This lets us use the functions in the modules instead of writing the code from scratch
import sys, socket
from time import sleep

# set first argument given at CLI to 'target' variable
target = sys.argv[1]
# create string of 50 A's '\x41'
buff = '\x41'*50

# loop through sending in a buffer with an increasing length by 50 A's
while True:
  # The "try - except" catches the programs error and takes our defined action
  try:
    # Make a connection to target system on TCP/21
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.settimeout(2)
    s.connect((target,21))
    s.recv(1024)

    print "Sending buffer with length: "+str(len(buff))
    # Send in string 'USER' + the string 'buff'
    s.send("USER "+buff+"\r\n")
    s.close()
    sleep(1)
    # Increase the buff string by 50 A's and then the loop continues
    buff = buff + '\x41'*50

  except: # If we fail to connect to the server, we assume its crashed and print the statement below
    print "[+] Crash occured with buffer length: "+str(len(buff)-50)
    sys.exit()

Lo que me confundió es por qué enviar los datos con una longitud cada vez mayor, o algo así como el código anterior, bloqueará el servicio.

    
pregunta lqhcpsgbl 16.02.2015 - 04:58
fuente

1 respuesta

1

Si el servidor tiene un búfer mal implementado en algún lugar, puede causar un bloqueo si los datos exceden lo que el búfer se configuró inicialmente para esperar. En lenguajes de bajo nivel en C ++, es fácil configurar búferes mal definidos de esta manera, y una falla es una buena evidencia de que podría existir un error explotable.

enlace

(de lo anterior)

 #include <stdio.h>
  int main(int argc, char **argv)
  {
  char buf[8]; // buffer for eight characters
  gets(buf); // read from stdio (sensitive function!)
  printf("%s\n", buf); // print out data stored in buf
  return 0; // 0 as return value
  }

Si la entrada real excede de 8, habrá problemas, aunque no necesariamente un bloqueo. Este es un tema amplio, pero lo más importante que debe saber es que si su servicio falla en valores grandes, es posible que tenga un problema de seguridad.

    
respondido por el baordog 16.02.2015 - 05:33
fuente

Lea otras preguntas en las etiquetas