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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Buscando Overflow. 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! :)
2  Programación / Programación C/C++ / Overflow como ariete al Kernel. en: 6 Enero 2017, 07:16 am
Buenas noches compañeros.
Estaba trasteando en un "programa" que hice en C -cuyo codigo dejo en el sub-foro de C puesto que tengo un problema con el overflow y la entrada de datos- con la intención de hacerlo vulnerable y estudiar dichas vulnerabilidades a ver si conseguía un overflow -y a ver QUE conseguía através del overflow-, y buscando que me diera una salida que había conseguido antes -que jamás salió- y entre la frustración y el enojo empezé a ejecutar el programa en la terminal una y otra y otra vez hasta que en una de esas tantas veces me pasó que se me detuvo la pc como por 20 segundos y luego me salió esto:

Citar
Eterno_Aprendiz@Exp:~/.3ternum$ ./control2 aaaaaaaaaaaaaaaaaaaaa
^[[Aa   a
Strlen buffer: 4
Strlen argv: 21
Sizeof Buffer: 2
Sizeof argv:4
Buffer: 0xbfc74eae
Violación de segmento
Eterno_Aprendiz@Exp:~/.3ternum$
Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501202] CPU: 0 PID: 600 Comm: Xorg Not tainted 3.16.0-4-686-pae #1 Debian 3.16.36-1+deb8u2

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501206] Hardware name: Intel Corporation Intel powered classmate PC/Intel powered classmate PC, BIOS MPSNB10L.10B.0017.2013.0807.1337 08/07/2013

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501212] task: f6a48010 ti: f270c000 task.ti: f270c000

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501249] Stack:

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501293] Call Trace:

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501906] Code: 66 90 64 8b 15 1c 8b 71 c1 6b d2 3e 8d 04 80 c1 e0 02 f7 e2 8d 42 01 ff 15 70 37 64 c1 5d c3 8d 74 26 00 8d bc 27 00 00 00 00 55 <89> e5 57 56 53 66 66 66 66 90 89 c3 64 8b 3d 10 20 71 c1 8d 76

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501983] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.16.0-4-686-pae #1 Debian 3.16.36-1+deb8u2

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501988] Hardware name: Intel Corporation Intel powered classmate PC/Intel powered classmate PC, BIOS MPSNB10L.10B.0017.2013.0807.1337 08/07/2013

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.501993] task: f70cf560 ti: f70ee000 task.ti: f70ee000

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.502024] Stack:

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.502056] Call Trace:

Message from syslogd@Exp at Jan  5 17:56:06 ...
 kernel:[14579.502090] Code: ae f0 66 90 31 d2 64 a1 18 30 71 c1 89 d1 8d b8 14 e0 ff ff 2d e4 1f 00 00 0f 01 c8 8b 47 08 a8 08 75 08 b1 01 8b 45 ec 0f 01 c9 <64> a1 18 30 71 c1 8d 90 14 e0 ff ff f0 80 a0 1e e0 ff ff df 0f

¿Es normal? ¿Puede ser una vulnerabilidad? Por si importa, ejecuto el codigo desde Linux, 32 bits y la arquitectura de mi procesador es i686.
3  Programación / Programación C/C++ / 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.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines