Buffer Overflow en web

Iniciado por seus, 10 Diciembre 2019, 10:50 AM

0 Miembros y 1 Visitante están viendo este tema.

seus

He leído y entendido los motivos de esta vulnerabilidad, cuando se inserta un valor con un mayor tamaño al que esta asignado en memoria os bytes restantes se pegan en el espacio de memoria contiguo de la memoria. Actualmente estoy prácticando con webgoat y en la sección buffer overflow pide que muestres los datos de los clientes de un hotel que tienen la habitación VIP y entiendo que hay que insertar más caracteres de los que la memoría asignada puede almacenar pero cual es el motivo por el que esta vulnerabilidad muestra los datos? Si yo hago un envio de multitud de caracteres "a" por ejemplo tendria que ser sobreescritos en la memoria del servidor no? Lo que no entiendo es pq muestra los datos al atacante.


AlbertoBSD

A ver, en web el error que describes suena a un SQL Injection, la unica forma que sea bufferoveflow es que se este utilizando un CGI a un ejecutable con esta vulnerabilidad lo cual es muy POCO comun.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

@XSStringManolo

Es un buffer overflow one-by-one. Si me pasas el código de la vuln te la explico en detalle. Es simplemente un bucle al que se le pasa mal el condicional y se pasa del tamaño.

Puede que también tenga un problema con el caracter null terminator del string.

WHK

Tal como dice AlbertoBSD eso es típico de una inyección SQL, se produce a traves de un desbordamiento de caracteres, pero no es un buffer overflow como tal, ese término se utiliza para otro tipo de vulnerabilidades, aunque tanto un bof como un sqli caen dentro de la categoría de tipo inyección, uno se hace a traves de consultas sql y el otro a la memoria.

En el caso de la inyección SQL un sitio WEB común tiene el lado de código que se ejecuta del lado del navegador WEB, otro código que se ejecuta del lado del servidor y finalmente la base de datos, hay otros componentes y capas adicionales pero con estos tres basta y sobrea para este ejemplo. Supongamos que el código que está del lado del navegador tiene una regla que dice que no puedes poner mas de 10 caracteres de largo, eso lo puedes evador haciendo modificaciones en tu mismo navegador WEB (modificación del DOM), una ves que evades eso y haces un envío de datos al servidor este llega al código que se ejecuta del lado del servidor, si este no controla correctamente la longitud de caracteres enviará tu texto ingresado directo a la base de datos, ahora, acá es donde se pone interesante este tema:

La base de datos contiene tablas, digamos que existe una tabla "usuarios" y esta tabla tiene una columna llamada "nombre" el cual es el nombre de usuario, todas las columnas de tipo texto en SQL deben tener una longitud asignada, digamos que es de 15 caracteres, ¿donde está el problema?, digamos que te registras en el sistema WEB y pones de nombre: "administrador .", como puedes ver, son 16 caracteres, despues del nombre viene un espacio en blanco y un punto, cuando el sistema WEB desea saber si el usuario ya existe o no para no repetirlo va a buscar si ya se encuentra registrado el usuario "administrador .", pero como la columna solo soporta 15 caracteres entonces la validación SQL omite el punto y queda como "administrador".

En Joomla antiguamente tenía una vulnerabilidad donde podías registrar un nuevo usuario con el nombre de "administrador" e instantaneamente tenías privilegios de administrador y esto sucedía porque registraba un nombre de usuario repetido ya que cuando hacias el registro ponias administrador con muchos espacios en blanco y un caracter cualquier al final, como el sistema decia que no existía tal usuario lo registraba pero SQL recortaba los caracteres sobrantes y quedaba como administrador.

Un desbordamiento de memoria o bufer overflow es cuando sobrepasas un espacio reservado en la memoria ram del equipo pudiendo inyectar secuencia de comandos en lenguaje máquina para hacer que el equipo se comporte como el atacante quiera, por ejemplo, lanzando el interprete de comandos a traves de un puerto a modo de backdoor.

Espero que hayas podido salir de la duda.

Saludos.