Problema buffer overflow

Iniciado por kr0m_, 27 Agosto 2014, 11:17 AM

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

cpu2

CitarComo puedes ver eax y edx ahora valen 0, ejecuto mi programa con la shellcode del ASM anterior y funciona ok, pero tengo una duda mas, cual es el valor de ecx si no lo sobreescribo? tendrá el valor que dejó la ultima operación que utilizó dicho registro?

Exacto, ecx tiene el mismo valor ya que no lo modificaste, estaria en 0, ya que le hiciste un XOR al principio.

El PUSH que haces a ecx no modifica su valor, simplemente lo coloca en la pila.

Un saludo.

kr0m_

cpu2, creo que no me he explicado correctamente, si ejecuto ciertas intrucciones en ASM pero no toco el registro ecx para nada, que valor tiene este?

cpu2

Hay instrucciones que modifican algunos registros y flags, ya viste MUL, si la instruccion que ejecutas no afecta a ecx su valor estara intacto.

Es eso lo que quieres saber?

Un saludo.

kr0m_

Estará intacto pero que valor tendrá? es decir si se ejecuta un software antes que el mío tendrá el valor que haya podido dejar este software anterior?

cpu2

Cita de: kr0m_ en 29 Agosto 2014, 23:59 PM
Estará intacto pero que valor tendrá? es decir si se ejecuta un software antes que el mío tendrá el valor que haya podido dejar este software anterior?

Si tu estas ejecutando la shellcode, y luego usas el navegador por ejemplo, si los dos estaran usando los mismos registros, pero la CPU tenia una funcion, como para virtualizar los registros o algo asi, tenerlos en memoria, ahora mismo no se, asi que no me hagas caso.

Si quieres saberlo te tocara investigar.

Pero vuelvo a repetirte, el valor sera 0, ya que le hiciste el XOR al principio, y este no cambiara a no ser que escribas en el o alguna instruccion lo use para algo, los demas programas no influyen en su cambio, ya que la CPU tiene esa funcion que ahora no me recuerdo del nombre.

Un saludo.

kr0m_

Muchas gracias por la info, me ha sido de mucha ayuda, buscaré como controla la cpu el uso de los registros según el software que esté utilizándolos, si me queda claro responderé al post.
Sabes si debería de cerrar el post por haber sido resuelto? Es la primera vez que pregunto algo en este foro...

cpu2

Para que lo entiendas mejor, porque ya veo que no lo tienes del todo claro, si tu utilizas tu shellcode/exploit en un programa vulnerable, solo tienes que preocuparte por los registros del progrma vulnerable, no de los demas programas, se entiende?

Los programas usan los mismos registros, pero eso no influye en los demas programas, gracias a esa funcion de la CPU.

CitarSabes si debería de cerrar el post por haber sido resuelto? Es la primera vez que pregunto algo en este foro...

Un usuario normal no puede cerrar un hilo, simplemente cambia el titulo por un resuelto, o un icono de visto.

Un saludo.

kr0m_

Creo que lo tengo claro, cada programa es como si tuvises un "entorno de ejecución" por así decirlo, cada programa puede acceder a los registros de la cpu pero no se interfieren entre ellos.


cpu2

Exacto eso mismo.

Un saludo.

dRak0

#19
Te recomiendo antes de meterte en estos temas  , aprender algo sobre S.O y Assembly para procesadores x86. O ir a la par , es decir , aprender exploiting a la vez. Te va a resolver muchas dudas.

Cosas vitales que te puedo decir rapido es que: Los sistemas operativos Windows, GNU/Linux, usan un modelo de memoria que no utiliza directamente la memoria fisica , sino que crean un espacio virtual , memoria virtual , que varia segun lo permitido por el procesador , con procesadores x86 podes crear un rango de memoria virtual grande pero no mas grande que con los x64.Esa memoria virtual es traducida a memoria fisica.Si la memoria fisica es mas pequeña de lo que se tiene en memoria virtual , se pasa a disco , se guarda en disco , en vez de en memoria fisica.Como esta memoria es virtual , no es directamente la memoria fisica , para darle seguridad al S.O , se decidio que cada proceso, tenga su propia memoria virtual asi otro proceso cualquiera no puede alterar a otro, una "medida de seguridad". Hay S.O(Windows) que te permiten ejecutar un HILO en un proceso remoto , escribir codigo en un proceso remoto , etc.¿Medio tonto , no?

En fin , te expliq algo sobre como administra la memoria estos S.O , acordate q el S.O es el encargado en administrar varias cosas , no solamente la memoria. Te recomiendo enserio leer S.O y Assembly. Cuando avanzes en exploiting , saldras de USERLAND y pasaras a KERNELLAND , donde necesitaras saber un poco mas de lo basico sobre S.O.

Acordate algo importante que muchos olvidan , esto que te explique no vale para todos los S.O , es simplemente el modelo de memoria que decidieron utilizar los creadores de estos OS.

Saludos , y si necesitas algo avisame.