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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿como evito bugs usando argv y memcpy?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿como evito bugs usando argv y memcpy?  (Leído 2,817 veces)
otroWeyMas.nasm

Desconectado Desconectado

Mensajes: 27


Ver Perfil
¿como evito bugs usando argv y memcpy?
« en: 16 Abril 2022, 19:46 pm »

Hola, ¿como estan?.


Bueno, estoy haciendo un programa con sockets y estoy tratando de usar memcpy, al parecer creo ya estoy comprendiendo más la utilidad, pero se me ocurrio tratar de ver si hay un bug, coloque las clásicas A's, ya que he visto retos de como explotar errores usando memcpy y efectivamente, me aparecio el fallo de segmento.

Obviamente hice la exploración con un debugger y adivinen.

Código:
0x7fffffffdb2c:	0x00000002	0x00000000	0x0000e800	0x00000000
0x7fffffffdb3c: 0x00000000 0x03000105 0x000000e8 0x00000000
0x7fffffffdb4c: 0x00000000 0x41414141 0x41414141 0x41414141
0x7fffffffdb5c: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffdb6c: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffdb7c: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffdb8c: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffdb9c: 0x41414141 0x41414141 0x41414141 0x41414141

Y ok, ya encontré un error en mi programa y seguro con un poco de imaginación consiguiría un "SIGTRAP". Pero lo que me interesa saber es como evitar ese problema.

¿Qué me aconsejan para evitar ese bug?, ¿utilizar memcpy_s?, ¿nunca usar argv en un memcpy?, pero entonces donde coloco el parametro de argv para que no perjudique a memcpy.

Como seguridad ¿como evito ese tipo de bugs y de que otra forma segura lo puedo hacer?.

Saludos.


EDITADO

--------------------------------------------------------------------------------------

Acabo de observar algo, se que esto es para la zona de exploits, sin embargo, me interesa más la programación de seguridad, solo lo coloco como dato extra por si alguien me puede explicar.

Ok, mientras esperaba se me ocurrió hacer el sigtrap, sin embargo, no lo lograba y me recordé que estoy usando un sistema de 64 bits, y los datos mostrados por el debugger son de double word.

Lo modifique a g para verlo en formato de 8 bytes y me di cuenta que lo que yo pensaba que era el jump del ret, pues resulta que no se sobreescribe del todo.
Código:
0x4548530042424242

Llegue a pensar en un GOT a memcpy, pero viendolo así como se los coloco, no sé, aun soy muy ignorante en muchas cosas. ¿Pero creen que sea el método one byte (creo así se le llama)?. Sé que debe ser 1 byte, pero no se si también así funcione.

No lo he intentado, porque aun no lo entiendo del todo el one byte... ¿pero creen que sirva ese método?, o creen que simplemente sea un falso positivo en mi programa, ya que si aumento la sobreescritura, ya no me aparece ningun mensaje de error.

Repito, esto lo pongo como detalle que para mi es interesante, y talvez podría ser util para ayudarme con la duda mejor.

Por cierto, si se preguntan que hice... este es la parte del problema
Código:
char datos = (char)strlen(argv[1]);  <-- esto lo reutilizo después.
memcpy(buffersend+6,argv[1],  datos)



« Última modificación: 17 Abril 2022, 02:56 am por otroWeyMas.nasm » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ¿como evito bugs usando argv y memcpy?
« Respuesta #1 en: 17 Abril 2022, 02:24 am »

Pon un poco más de código y lo que usas en la línea de comandos para llamar al programa.

¿Porque usas char aqui?
Código:
char datos = (char)strlen(argv[1]);

¿Estas tan falto de memoria?


En línea

otroWeyMas.nasm

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: ¿como evito bugs usando argv y memcpy?
« Respuesta #2 en: 17 Abril 2022, 02:56 am »

Jajajaja, lo siento, me diste la respuesta con tu pregunta.

Se me olvido quitarle el char, estaba tan concentrado en tratar de proteger memcpy que no puse atención a eso,ya lo puse como int y ya no me sale el problema.

Solucionado.

Igual, si me pueden dar consejos para proteger memcpy cuando la cantidad de bytes a copiar es variable, se los agradecería, porque eso lo utilicé para una url, como pueden variar, pues decidí utilizar un espacio tan grande memoria. Por eso me preocupaba el overflow, porque facilmente puede entrar cualquier shell.



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como evito SQL Inyection? « 1 2 »
PHP
Skeletron 11 5,076 Último mensaje 8 Diciembre 2009, 22:25 pm
por Skeletron
Uso de los HOIC/LOIC -Cómo evito que se me encuentre-
Redes
PseudoTrue 0 2,445 Último mensaje 5 Julio 2012, 04:29 am
por PseudoTrue
¿como evito que sea vivible el serial de un Crackme?
Ingeniería Inversa
xivan25 5 2,834 Último mensaje 30 Marzo 2013, 23:16 pm
por MCKSys Argentina
¿Cómo evito mostrar columnas repetidas?
Bases de Datos
DanteInfernum 9 5,756 Último mensaje 1 Octubre 2013, 18:20 pm
por DanteInfernum
[Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Desarrollo Web
Leguim 5 3,303 Último mensaje 21 Agosto 2021, 01:12 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines