Come utilizzare il servizio fuzz con l'invio di dati errati?

2

Sto leggendo un post su fuzzer in Python, ecco il codice:

# 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()

Ciò che mi ha confuso è il motivo per cui l'invio dei dati con una lunghezza crescente, o qualcosa di simile al codice sopra, causerà il crash del servizio?

    
posta lqhcpsgbl 16.02.2015 - 04:58
fonte

1 risposta

1

Se il server ha un buffer mal implementato da qualche parte, potrebbe causare un arresto anomalo se i dati superano quello che il buffer era inizialmente configurato per aspettarsi. Nei linguaggi di basso livello in C ++, è facile impostare buffer poco definiti in questo modo, e un crash è una buona prova che potrebbe esistere un errore sfruttabile.

link

(da sopra)

 #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
  }

Se l'input effettivo supera 8, ci saranno problemi, anche se non necessariamente un crash. Questo è un argomento ampio, ma la cosa più importante da sapere è che se il servizio si arresta in modo anomalo su grandi valori, è possibile che si tratti di un problema di sicurezza.

    
risposta data 16.02.2015 - 05:33
fonte

Leggi altre domande sui tag