elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
30 Agosto 2008, 03:10  



+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: sirdarckcat, berz3k)
| | |-+  Usar Buffers libres en un Stack Overflow...¿?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Usar Buffers libres en un Stack Overflow...¿?  (Leído 1262 veces)
-=nITROUs=-

Desconectado Desconectado

Mensajes: 197


....Acción si límite... no hay tope...


Ver Perfil WWW
Usar Buffers libres en un Stack Overflow...¿?
« en: 12 Julio 2004, 04:23 »

Que tal...

Bueno, tengo una duda: En la mayoría de ejemplos sobre STACK OVERFLOWS ponen algo como:

Código:

...
int main(int argc,char **argv){
char buffer[1024];
strcpy(buffer,argv[1]);
}

Lógicamente vemos que pasando los 1024 bytes de buffer, más 8 bytes de alineamiento (si es compilado con las nuevas versiones de GCC , creo q apartir de la 3) y mas 8 bytes de registros a sobreescribir correspondientes ($EBP & $EIP) pues nos da el SEGMENTATION FAULT (SIGSEGV)... o sea, con tan solo 1040 bytes se desborda y podremos poner la shellcode dentro de 1032 bytes (ya que no podemos meter la shellcode en $ebp ni $eip por que en $eip va la direccion de memoria de nuestra shellcode ok).

Ahora mi duda es...

Código:

...
int main(int argc,char **argv){
char foo[12],nitro[8],lame[24],buffer[1024];
strcpy(buffer,argv[1]);
}
 
 
Entonces akí, para "OVERFLOWEAR" xD dicho programa, como en la stack fueron declarados primero dichos arreglos de tipo char, pues tendríamos que sobreeescribir los (1024+8)+(24+8)+(8+8)+(12+8)+(8..estos son los de los registros EBP Y EIP)... todos esos 8s sumados son los bytes de alineamiento ok... entonces tendríamos que meter 1108 bytes para obtener el desborde... Entonces puedo usar todos esos arreglos para meter mi shellcode ??

Y otra más.. como se la dirección donde he almacenado mi shellcode ??

En el texto de DEX
http://www.hakim.ws/textos/stackofdex.txt
Donde dice:
Citar:
Woops!, ya llenamos todo el buffer, ya sabemos que hacer con los 967
bytes restantes, ya sabemos que shellcode usar, pero... QUE DIRECCIONES
VAMOS A PONER?
Bueno, hay una forma de hacerlo sacando la dirección automáticamente de
%esp con una instrucción en ensamblador, que usan muchos exploits
locales:
-----------------------------------------------
void get_esp() {
__asm__("movl %esp, %eax");
}
-------------------------------------------------
 
 

Alguien podría poner alguna url sobre la explicación de dicha función ya que he buscado en google y no encuentro anda parecido :S... o si alguien ha visto un exploit usando esta función (yo si lo he visto por ahi pero no recuerdo que exploit), asi que si alguien tiene algún exploit x ahi, que pastee la url para analizarlo....

salu2...
En línea

®®
Colaborador

Conectado Conectado

Mensajes: 5.141


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #1 en: 12 Julio 2004, 10:09 »

esa funcion pone en eax el valor de esp.
En línea
neo_geno

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #2 en: 14 Julio 2004, 19:15 »

-----------------------------------------------
void get_esp() {
__asm__("movl %esp, %eax");
}
-------------------------------------------------


es muy simple, como ia han dixo, pone eax en esp, pero ¿para qeu lo hace?, o sea, ¿de qeu sirve?, la respuesta es facil, al hacer eso, obtenemos la direccion del puntero de la pila, el qal sera la direccion a la qeu apunte la shellcode.
En línea

LLoramos al nacer pq venimos a parar a este inmenso mundo de dementes.
__________________________________________


El usuario ve cosas y se pregunta el porque, el hacker ve cosas y se pregunta el pq no hacerlo.
®®
Colaborador

Conectado Conectado

Mensajes: 5.141


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #3 en: 15 Julio 2004, 21:30 »

eax en esp no, esp en eax.
En línea
Rentero

Desconectado Desconectado

Mensajes: 1.120

La paciencia es la madre de la ciencia.


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #4 en: 17 Julio 2004, 09:20 »

Haber, Mr. Potato.

Esto dices tu:
Citar
esa funcion pone en eax el valor de esp.

Pero esto dice http://www.hackemate.com.ar/mirrors/karpoff/archivos/CURSOASM.txt
Citar
La funci¢n de la orden MOV es, como su nombre da a entender, "mover" un
 valor. Pongamos un ejemplo:

    MOV AX,BX

    Esta ¢rden en lenguaje ensamblador, copiar  el contenido de BX en AX,
 conservando el valor de BX.

Segun yo entiendo -> tu dices que pone el primero en el segundo y el texto dice que pone el segundo en el primero...

Ahora que estoy aprendiendo ASm, ¿CON CUAL ME QUEDO?
En línea

Rentero

Desconectado Desconectado

Mensajes: 1.120

La paciencia es la madre de la ciencia.


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #5 en: 17 Julio 2004, 09:31 »

Pues Mr. Potato creo que tienes tu razón, lo he mirado en otra pequeña introducción y lo dice como tú, aún así estoy todavia con la duda...

¿Como puede ser eso?
¿Puede ser por lo de ax, bx, etc->16 bit...y eax, ebx, etc-> 32?
P.D: Espero respuestas...
« Última modificación: 17 Julio 2004, 11:03 por neohex » En línea

®®
Colaborador

Conectado Conectado

Mensajes: 5.141


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #6 en: 17 Julio 2004, 13:19 »

vale, partamos de que es un movl y no un mov usea at&t:

En la sintaxis de AT&T el destino de una operacion se pone en el segundo parametro y la origen se pone en el primer parametro. (Al reves que en los Intel).
 
El nombre de los registros es precedido por el caracter porcentaje ("%").
 
Los valores inmediatos han de ser precedidos por el caracter "$".
 
El tamaqo de los operandos se especifica mediante un ultimo caracter de la instruccion:"b" (8-bits) | "w" (16-bits) | "l" (32-bits).

+ info aqui: http://www.publispain.com/supertutoriales/programacion/ensamblador/cursos/1/linasm.htm y en google.
En línea
Rentero

Desconectado Desconectado

Mensajes: 1.120

La paciencia es la madre de la ciencia.


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #7 en: 17 Julio 2004, 22:58 »

Vale, gracias...ya está aclarado.
En línea

-=nITROUs=-

Desconectado Desconectado

Mensajes: 197


....Acción si límite... no hay tope...


Ver Perfil WWW
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #8 en: 18 Julio 2004, 09:59 »

Muy bien...

entonces la funcion get_esp() RETORNA la dirección de %eax y ahi es dond debo apuntar a %eip ya q ahi irán los nops y/o shellcode o me ekivoco?? pero he buscado ejemplos de como lo usan en exploits y aun no encuentro alguno....

y si, lo estuve testeando en FreeBSD y pues tuve q buscar shellcodes (execve("/bin/sh"))para Free BSD x86 y ya la tengo, ahora solamente necesito la MALDITA dirección a apuntar %eip... salu2
En línea

servomac

Desconectado Desconectado

Mensajes: 25


Powered by Debian Sarge & Kernel 2.6.7


Ver Perfil
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #9 en: 19 Julio 2004, 06:33 »

Analiza un poco el nombre de la función ... si se llama get_esp() que es más probable, ¿que devuelva %esp o que devuelva %eax?
En línea

"Se necesita a un ladrón para atrapar a otro ladrón, y eso no lo enseña ningún catedrático." (HVC)
heap

Desconectado Desconectado

Mensajes: 273



Ver Perfil WWW
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #10 en: 19 Julio 2004, 09:39 »

Citar
Entonces puedo usar todos esos arreglos para meter mi shellcode ??
Supongo que la shellcode no tiene mas de 100 bytes, y como el buffer es tan grande pues ahi esta sencillito haz esto mete 200NOPS+Shellcode+ direcciones*(908-shellcode) asi no importa las direcciones igual ocupan memoria y conque se sobreescriban 2 ya esta hecho, antes de hacer el exploit prueba explotarlo por shell.
Citar
otra más.. como se la dirección donde he almacenado mi shellcode ??
No necesitas saber la direccion exacta, para eso estan los NOPS asi eip ira saltando de direccion cada que encuentre un NOP hasta que llega a tu shellcode.

Citar
Woops!, ya llenamos todo el buffer, ya sabemos que hacer con los 967
bytes restantes, ya sabemos que shellcode usar, pero... QUE DIRECCIONES
VAMOS A PONER?
Bien, la funcion que pusiste es util para armar el exploit en c pero para que entiendas bien el proceso usa gdb overflodea el programa con AAAAAA (usa perl para no tener que poner 1000 A) luego haz esto.

(gdb) set $p=0xbffff000
(gdb) while(*$p!=0x41414141)
>set $p=$p+1
>end
(gdb) x/10x $p

Cualquiera de las 3 direcciones que te de te seran utiles, solo arma ahora el exploit por shell y prueba una vez lo tengas, bajate un exploit de BOFS de otro programa y asi adaptas el codigo para tu nuevo exploit, son faciles de explotar y solo hace falta modificar otro exploit cambiandole unos numeritos.

Bueno eso cuando tienes un stack > 50 (grande) pero que pasa si tu stack es de solo 5 bytes ?... bueno te dejo la duda, hay un texto de explotacion de BOFS avanzado, lee la parte de las enviromental variables eso te dara la idea.
Si no me entiendes, pues relee....bye :)
En línea

-=nITROUs=-

Desconectado Desconectado

Mensajes: 197


....Acción si límite... no hay tope...


Ver Perfil WWW
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #11 en: 21 Julio 2004, 05:43 »

Si man, ya he hecho eso de GDB... pero al declarar el puntero a la dirección por ejemplo 0xbffff000 al ini9ciar el while de repente avanza unas direcciones y me dice que NO SE PUEDE acceder A DICHA DIR. DE MEMORIA....

y pues he intentado con muuuuchas direcciones más intentando calcular la direccion más o menos para caerle a un NOP pero no :( por eso lo de usar la funcion de get_esp()...

Otra duda:

En el texto ese de DEX... primero dsd shell mete con perl las direcciones puras AAAA luego puras BBBB y luego puras CCCC y luego veo el core dumped en GDB y ya puedo hacer ese while para encontrar dir. con puros 0x41414141 pero que no se supone que al correr d nuevo el programa con otros argumentos (shellcode & stuff) tomará otra dirección d memoria?? o tmb sobreescribirá las A's q ya habían??

Salu2...

PD: Si we, ya he leido ese texto de ENVIRONMENT VARIABLES (por eso hay q programar seguro y limpiar bien variables d entorno ;) )....

En línea

heap

Desconectado Desconectado

Mensajes: 273



Ver Perfil WWW
Re: Usar Buffers libres en un Stack Overflow...¿?
« Respuesta #12 en: 22 Julio 2004, 11:29 »

Si man, ya he hecho eso de GDB... pero al declarar el puntero a la dirección por ejemplo 0xbffff000 al ini9ciar el while de repente avanza unas direcciones y me dice que NO SE PUEDE acceder A DICHA DIR. DE MEMORIA....

y pues he intentado con muuuuchas direcciones más intentando calcular la direccion más o menos para caerle a un NOP pero no :( por eso lo de usar la funcion de get_esp()...

Otra duda:

En el texto ese de DEX... primero dsd shell mete con perl las direcciones puras AAAA luego puras BBBB y luego puras CCCC y luego veo el core dumped en GDB y ya puedo hacer ese while para encontrar dir. con puros 0x41414141 pero que no se supone que al correr d nuevo el programa con otros argumentos (shellcode & stuff) tomará otra dirección d memoria?? o tmb sobreescribirá las A's q ya habían??

Salu2...

PD: Si we, ya he leido ese texto de ENVIRONMENT VARIABLES (por eso hay q programar seguro y limpiar bien variables d entorno ;) )....


dsd != desde
q' != que
Si no puedes tomarte el tiempo para escribir bien, para que yo logre entender lo que preguntas, menos me voy yo a tomarme el tiempo para entenderte y responderte. Si buscas ayuda expresate claro.
En línea

Páginas: [1] Ir Arriba Imprimir 
Ir a:  





Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC