elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Buscando Overflow.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Buscando Overflow.  (Leído 1,755 veces)
Eterno_Aprendiz

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Buscando Overflow.
« en: 6 Enero 2017, 06:02 am »

Buenas noches a todos, compañeros.
Primero que todo, soy nuevo en el foro en calidad de usuario, generalmente vengo en calidad de invitado, espero poder sacar conocimiento de acá y poder aportar en mayor medida en todo aquello que tenga al alcance.
El día de hoy me encuentro acá porque entre tanto investigar no encuentro al respuesta a un problema que tengo. Pasa que estoy iniciandome en todo lo que vendría a ser la programación en C, y pues... Estoy buscando entender las vulnerabilidades en los programas en C, ahorita me encuentro estudiando el buffer overflow, y para practicarlo intento hacer un programa vulnerable.
Bueno, primero que todo, este es mi codigo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main (int argc, char *argv[])
  4. {
  5. char buffer[2];
  6. scanf("%s",&buffer);
  7. printf("Tamaño a rebosar: %i\nTamaño de la entrada: %i\n",sizeof buffer,strlen(buffer));
  8. return 0;
  9. }
Ahora, mi problema es que según mi teoría, si yo asigno un tamaño n a una variable y quiero escribir sobre dicha variable, la variable no puede ser mayor al buffer porque empieza a escribir aquello que sobra en una zona de la memoria aledaña a ella. Pero a mi no me pasa.
Quiero decir, en el codigo anterior se puede observar que si mi objetivo es lograr una sobrecarga al buffer solo nesecito meter un caracter -tomando en cuenta que el segundo char vendría siendo el típico "\0"-, pero yo puedo insertar un caracter, dos, tres, y no es sino hasta el sexto caracter que me salta el overflow. Luego de tocar el programa varias veces me he dado cuenta de que el tamaño que asigne a la variable no devuelve un aviso de sobrecarga sino hasta que se rebasan cuatro caracteres mas de lo que le he asignado al programa. Así pues, si tengo una variable "char n[1]" no muestra sobrecarga sino hasta que ingreso 1+4 caracteres, lo mismo si asigno 2, 3, 4 y basicamente con cualquier número que inserte me sigue el error.
He probado tambien haciendo un strcpy del argv al buffer y no me da resultado, de todas formas sigue manteniendose el fallo.

---------------------------------------------------------------------------
----------------------------- Actualización -----------------------------
---------------------------------------------------------------------------


Por cierto, para experimentar y analizar la variable cree un codigo que vendría siendo este:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(int argc, char *argv[])
  4. {
  5. char buffer[1];
  6. scanf("%s",buffer);
  7. //printf("%s\n",buffer);
  8. printf("%s\n%i\n%i\n%p\n%p\n",buffer,sizeof buffer,strlen(buffer),&buffer,*buffer);
  9. return 0;
  10. }
  11.  
Y considero que es un misterio, este codigo que he puesto si que funciona como espero -apenas escribo un caracter de mas sobrecarga el buffer-, pero solo es así mientras tengo esa ultima salida activa, puesto que cuando comento la linea que contiene la salida con los datos del buffer, me vuelve a lo del caso anterior en el que me saltaba overflow al n+4 caracter y no entiendo.
Como extra, llegué a creer tambien que era problema en la salida de datos -lo llegué a creer por lo expuesto en el anterior parrafo- pero lo descarté puesto de que incluso suprimiendo la salida de datos me sigue con el fallo que comento.
Disculpen las molestias, agradezco cualquier respuesta constructiva.
Sin mas que decir, un saludo, exitos y paz.


« Última modificación: 6 Enero 2017, 06:20 am por Eterno_Aprendiz » En línea

Los límites de mi lenguaje son los límites de mi conocimiento, los límites de mi conocimiento son los límites de mis facultades.
francosmp

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Buscando Overflow.
« Respuesta #1 en: 6 Enero 2017, 20:43 pm »

Hola Eterno_Aprendiz , la verdad no entendi muy bien tu post pero en base al tema de vulnerabilidades hace como 2 años vi un material relacionado en el cual las variables char las definen de tipo puntero y asi te ahorras la necesitad de tener tu estructura estatica y llegar al overflow.
Espero ayude.
Suerte


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Buscando Overflow.
« Respuesta #2 en: 6 Enero 2017, 22:25 pm »

El segmentation fault salta cuando el Sistema Operativo lo detecta y así ocurre. Digo esto, porque es posible que, si bien la memoria no pertenece a esa variable, pertenezca igualmente a tu programa. Luego, están los mecanismos que use el SO para detectar este problema, de los cuales no tengo información.

Por ejemplo, a mi ese programa me tira la violación de acceso al salir del buffer por 13 bytes, mientras que por 12 bytes no tira error.
En línea

Eterno_Aprendiz

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: Buscando Overflow.
« Respuesta #3 en: 6 Enero 2017, 22:45 pm »

Gracias compañeros.
El segmentation fault salta cuando el Sistema Operativo lo detecta y así ocurre. Digo esto, porque es posible que, si bien la memoria no pertenece a esa variable, pertenezca igualmente a tu programa. Luego, están los mecanismos que use el SO para detectar este problema, de los cuales no tengo información.
Estaba empezando a aprender ASM cuestión de empezar a analizar instrucción por instrucción con el gdb y el objdump a ver en que momento y por qué no me detectaba el segmentation fault, pero si es así como dices, entonces mejor no pierdo tanto tiempo y paso directo a la acción, jajaja.  :silbar:
Bueno, de nuevo muchas gracias, saludos, exitos, ¡Paz! :)
En línea

Los límites de mi lenguaje son los límites de mi conocimiento, los límites de mi conocimiento son los límites de mis facultades.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Buscando Overflow.
« Respuesta #4 en: 7 Enero 2017, 01:18 am »

Si quieres aprender más busca sobre el modelo de memoria de un programa [ http://www.geeksforgeeks.org/memory-layout-of-c-program ] y sobre convención de llamadas [ https://en.wikipedia.org/wiki/X86_calling_conventions ].
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Overflow] Error de overflow
Programación Visual Basic
Erik# 5 2,165 Último mensaje 9 Diciembre 2008, 14:45 pm
por Erik#
Buscando Grupo Hacker, o buscando gente noob, avanzada, etc para formar uno? « 1 2 ... 5 6 »
Foro Libre
IanShadow 58 23,616 Último mensaje 1 Febrero 2016, 16:42 pm
por Paul Young
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines