elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 10:37  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Ejecutando shellcode
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Ejecutando shellcode  (Leído 4,620 veces)
hentei

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: Ejecutando shellcode
« Respuesta #15 en: 12 Diciembre 2006, 23:39 »

Ambos ret apuntan a dirreciones de memoria diferentes pero al hacer *ret = int(shellcode) los valores de ambos deberian ser iguales a pesar de apuntar a direcciones diferentes o no?
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #16 en: 13 Diciembre 2006, 00:26 »

nop
mmm como te explico..

supongamos esto:
Código:
int *puntador
int variable

si yo hago: puntador = &variable

entonces, puntador va a apuntar a variable (a la direccion de variable).

si yo hago: puntador = &puntador

entonces, puntador va a apuntar a puntador (a la direccion de puntador).

si yo hago: *puntador = &variable
entonces, la direccion a la que apunta "puntador" (en este caso, la misma direccion de puntador), contendra la direccion de variable.

*puntador escribe en la direccion de memoria guardada la direccion de variable
la direccion de memoria guardada es la direccion de puntador

entonces

*puntador escribe en su direccion, la direccion de "variable", ENTONCES AHORA APUNTO A VARIABLE

en el otro caso: puntador = &puntador + 2

puntador apunta a su direccion de memoria "mas 2".

despues: *puntador = &variable

la direccion de memoria a la que apunta "puntador" ahora va a contener la direccion de variable.

si vemos el primer puntador, y el segundo:

primero:
*puntador = CONTENIDO DE LO QUE ESTOY APUNTANDO (contenido variable)
puntador = A DONDE ESTOY APUNTANDO (direccion de variable)
&puntador = DIRECCION DE MEMORIA QUE OCUPO

segundo:
*puntador = CONTENIDO DE LO QUE ESTOY APUNTANDO (direccion de variable)
puntador = A DONDE ESTOY APUNTANDO (al puntero de EIP guardado)
&puntador = DIRECCION DE MEMORIA QUE OCUPO

si ves la tablita que te mostre la primera ves:
Código:
- ret1 0x00421a30 _shellcode
828250859
- ret2 0x0012ff80
4332080

como vemos el primero (ret1) esta en la direccion de "shellcode", y apunta al contenido de shellcode (que en este caso son los primeros 4 bytes del shellcode)

y el segundo esta en la direccion del puntero de EIP guardado, y apunta a la direccion de shellcode.

decimal(4332080)=hexadecimal(421a30)
decimal(828250859)=hexadecimal(315E1AEB);
315E1AEB = inverso (\xeb\x1a\x5e\x31)

Saludos!!
« Última modificación: 13 Diciembre 2006, 00:33 por Sirdarckcat » En línea

hentei

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: Ejecutando shellcode
« Respuesta #17 en: 13 Diciembre 2006, 03:29 »

Muchas gracias mas claro imposible.
En línea
Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #18 en: 16 Diciembre 2006, 07:24 »

:P esto se discutio en milw0rm.. muchos shellcodes no serviran si se hace casting de funcion, como lo que haces Anon.
lo mejor es usar o el de aleph one, o en ASM hacer un salto a ESP despues de apuntar ESP a shellcode..

Saludos!!
Disculpen, pero aprovecho el hilo. ¿En que parte se discutio eso Sirdarkcat?, ¿cual es la razon?.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #19 en: 17 Diciembre 2006, 04:49 »

en el foro de analisis de exploits, en el post de "First Threath EVER!"
porque muchos ( es mas... casi todos ) los shellcodes, dependen de que su codigo de inicio este en ESP. con casting de funciones.. esta en todos lados, menos donde debe ser xD

Saludos!!
En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #20 en: 18 Diciembre 2006, 01:25 »

Lei el hilo, muy bueno. Gracias por el dato  ;D.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Rozor

Desconectado Desconectado

Mensajes: 269


As I Walk Through The Valley Of The Shadow Of Dead


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #21 en: 6 Enero 2007, 04:01 »

Yo tengo una duda. He intentado hacer ret a una direccion de memoria y por lo visto no ha funcionado.

He escrito el codigo fuente

Archivo.C

Código:

#include <stdio.h>
#include <stdlib.h>

void woof(void);

int main(int argc, char *argv[])
{
  char direccion[] = "\xDB\x12\x40";
  int *p;
  p = (int *)&p + 2;
  (*p) = (int)direccion;
}

void woof(void)
{
     printf("Hello Moto!!!");
     system("PAUSE");
}


char direccion[] = "\xDB\x12\x40"; <--- Direccion de memoria de printf().
004012DB  |. C70424 0430400>MOV DWORD PTR SS:[ESP],dfadsf.00403004   ; ||ASCII "Hello Moto!!!" .

Tambien probe con la direccion de memoria de woof() {.......

( Fue sacada con OllyDbg ). Al hacer ret no deberia de saltar a esa direccion de memoria ¿?
En línea

out in the streets they call it murder....
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #22 en: 6 Enero 2007, 06:54 »

la direccion de woof es dinamica..
el printf si deberia de servir.. pero no creo que este en 0040xxxx debe ser por.. 78xxxxxx

Saludos!!
En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #23 en: 7 Enero 2007, 02:25 »

mmm
Código:
p = (int *)&p + 2;
le sumas dos pero tenes la declaracion de direccion que te jode (no tengo a mano el debugger pero creo que direccion se reserva primero y luego el puntero p), deberias sumarle 3 para saltar el puntero a la cadena "direccion".
Código:
(*p) = (int)direccion;
eso no va a escribir "\xDB\x12\x40" en *p puesto que direccion almacena la direccion de memoria q apunta al ascii, mejor seria
Código:
int direccion=0x004012DB
o proba asignando directamente.
Realmente se sobreescribe ret?.
Chequealo y contanos.
Saludos.-
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: Ejecutando shellcode
« Respuesta #24 en: 7 Enero 2007, 12:31 »

fijate bien que estas confundiendo las direcciones. en esa que pones me da que tiienes "hello moto".

MSVCRT: imagebase:77BE0000
PRINTF: rva: 0002E658

sumado = 77C0E658 esta es la direccion de printf en mi ordenador.
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Ejecutando shellcode
« Respuesta #25 en: 7 Enero 2007, 23:22 »

deberias sumarle 3 para saltar el puntero a la cadena "direccion".
falso.. se le suma 2 xD

en el post de herramientas hay un programa de rojodos que obtiene la direccion de las funciones.. pruebala, y obten la direccion de printf :P

Código:
#include <stdio.h>
#include <stdlib.h>

void woof(void);

int main(int argc, char *argv[])
{
  int *direccion = 0x72000000; //direccion de woof, usa el olly para ver cual es
  int *p;
  p = (int *)&p + 2;
  (*p) = (int)direccion;
}

void woof(void)
{
     printf("Hello Moto!!!");
     system("PAUSE");
}

Saludos!!
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
.:. Shellcode 2 ASM .:.
ASM
Garfield07 13 1,916 Último mensaje 3 Enero 2011, 20:31
por Garfield07
Ayuda con parametros ejecutando una shell
Programación Visual Basic
gabodawn 2 443 Último mensaje 24 Marzo 2012, 04:37
por gabodawn
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines