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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  shellcode básica para windows.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: shellcode básica para windows.  (Leído 5,925 veces)
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
shellcode básica para windows.
« en: 29 Enero 2011, 15:43 pm »

hola, no se si es aquí donde debería ir el post,
lo que quiero es hacer una shellcode muy muy básica:
tengo el programa asm que lo que hace es ejecutarse,dormir,y descargarse (poca cosa):

.386
.model flat, stdcall
option casemap:none

.data
.code
start:
push 9999          
mov eax,77b6ef66h   ;sleep
call eax    
mov eax,77b72aefh   ;exit process
call eax
end start


para ello utilizo direcciones absolutas o harcodeades (me parece que ese es el término) de manera que cada vez que arranco el sitema cambian, pero eso no es problema.

el problema es que quiero, primero pasarla a opcodes y luego ejecutarla con cualquier apllicación lo más sencilla posible.

Para pasarla a opcodes no sé como hacerlo por eso me gustaría saber si hay algún programa que lo pueda hacer por mí. El programa está ensamblado con masm.

Y para ejecutarla no sé muy bien sin esto sería correcto:
He leído algo de que hay que hacer buffer overflow para ejecutarla, pero por otro lado también he visto que se ejecutaba de forma "manual" con este programita:

#include <stdio.h>
#include <string.h>

 
char shellcode[] = "aquí deberían ir los opcodes";
  
void main()
{
   int *ret;
   ret=(int *)&ret+2;
   (*ret) = (int)shellcode;
}



Un saludo.
« Última modificación: 29 Enero 2011, 15:47 pm por black_flowers » En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: shellcode básica para windows.
« Respuesta #1 en: 29 Enero 2011, 20:56 pm »

Bueno, el post va en Bugs y Exploits. Luego le digo a un mod que te lo mueva...

para ello utilizo direcciones absolutas o harcodeades (me parece que ese es el término) de manera que cada vez que arranco el sitema cambian, pero eso no es problema.
Que yo sepa en Windows las llamadas al sistema no cambian, solo lo hacen entre versiones. Esa shellcode solo ira en tu PC, pero seguira llendo al reiniciar.

el problema es que quiero, primero pasarla a opcodes y luego ejecutarla con cualquier apllicación lo más sencilla posible.
Para pasarla a opcodes no sé como hacerlo por eso me gustaría saber si hay algún programa que lo pueda hacer por mí. El programa está ensamblado con masm.
Pues lo que tienes que hacer es sencillamente meterla en un programa y abrirlo con Olly o GDB... Lo que puedes hacer es meterle unos cuantos NOPS que resalten antes y despues de tu shellcode, encuentras los nops y copias... En linux uso "hexdump -C" pero en Windows haria eso...
Para ejecutarla se suele hacer algo asi:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";
  5.  
  6. int main(int argc, char **argv)
  7. {
  8. printf ("TinShell V1.0 : By Sagrini : %d bytes\n", strlen (code));
  9. (*(void(*)()) code)();
  10. return 0;
  11. }
  12.  
Este code es mio, de una shellcode. En char code [] le metes tu shellcode...

Y... pones void main (): No estamos en el subforo de C, pero eso no es recomendable. Leete esto, anda
http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: shellcode básica para windows.
« Respuesta #2 en: 30 Enero 2011, 19:34 pm »


Que yo sepa en Windows las llamadas al sistema no cambian, solo lo hacen entre versiones. Esa shellcode solo ira en tu PC, pero seguira llendo al reiniciar.
pero en realidad he comprobado que cambia cada vez que arranco y la razón podría ser que yo obtengo la dirección, mediante un programa en vc++ que carga el kernel32.dll y obtiene la dirección de las funciones mediante getprocadress. He visto otros métodos que lo sacaban buscando en las dependencias del propio ejecutable, de todas formas como ya he dicho no tiene mayor importancia para lo que yo estoy haciendo.
Pues lo que tienes que hacer es sencillamente meterla en un programa y abrirlo con Olly o GDB... Lo que puedes hacer es meterle unos cuantos NOPS que resalten antes y despues de tu shellcode, encuentras los nops y copias... En linux uso "hexdump -C" pero en Windows haria eso...
perfecto es la solución adecuada, pero todavía tengo problemas cuando aparece una cadena nula (no sé cómo elimminarla). He visto que se pueden utilizar xor para evitar cadenas nulas, pero en mi caso es el argumento que le paso a la función sleep, que es de 270f0000, con lo cual esos cuatro ceros del final no se cómo deshacerme de ellos, a no ser cambiando el valor que le paso a sleep y en lugar de 9999, le paso 99999999 (es una opción).
Para ejecutarla se suele hacer algo asi:

#include <stdio.h>
#include <string.h>
 
char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";
 
int main(int argc, char **argv)
{
   printf ("TinShell V1.0 : By Sagrini : %d bytes\n", strlen (code));
   (*(void(*)()) code)();
   return 0;
}


y esto me da un error(c2440):
type_cast, cannot conver from char[20] to void (__cdecl*)(void)

y con respecto al que puse yo...

   int *ret;
   ret=(int *)&ret+2;
   printf("%d bytes\n", sizeof(code));
   (*ret) = (int)code;

compila pero dudo mucho que sea el correcto para ejecutar la shellcode, es el único de los que encontré en internet que me compilaba y por eso decidí usarlo, no obstante el que más se utiliza es el que tú pones, el problema es que me da ese error al compilar. Yo uso el microsoft visual c++ 2008, no se si será por el compilador...


un saludo!
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: shellcode básica para windows.
« Respuesta #3 en: 31 Enero 2011, 20:19 pm »

Pues el programa yo lo compilo con gcc (MinGW). Pues deberia de ir... Cambia tu compilador :P
Y... de donde sacas esos bytes nulos?
Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4.  
  5. .code
  6. start:
  7. push word 0x9999
  8. mov eax,  0x77b6ef66   ;sleep
  9. call eax
  10. mov eax, 0x77b72aef   ;exit process
  11. call eax
  12. end start
  13.  

Ehh, asi deberia ir...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: shellcode básica para windows.
« Respuesta #4 en: 5 Febrero 2011, 00:22 am »

Y... de donde sacas esos bytes nulos?
Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4.  
  5. .code
  6. start:
  7. push word 0x9999
  8. mov eax,  0x77b6ef66   ;sleep
  9. call eax
  10. mov eax, 0x77b72aef   ;exit process
  11. call eax
  12. end start
  13.  

Ehh, asi deberia ir...

pues los bytes nulos me aparecen en el olydbg si en lugar de empujar el valor en en decimal 99999999 pongo 9999, y en los opcodes ese número aparece como 0f270000.

Al principio no le encontraba mucho sentido, pero me di cuenta de que 9999 en hexadecimal es 270f en lugar de 0f27, con lo cual los ceros que pone a la derecha en realidad serían ceros a la izquierda, resultado de pasar los argumentos en la forma little endian.

Y no sé cómo deshacerme de los dichosos ceros, he visto algo sobre utilizar xor, pero en este caso no se me ocurre el cómo utilizarlo.
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: shellcode básica para windows.
« Respuesta #5 en: 5 Febrero 2011, 00:47 am »

Código
  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4.  
  5. .code
  6. start:
  7. push dword 0x9999
  8. mov eax,  0x77b6ef66   ;sleep
  9. call eax
  10. mov eax, 0x77b72aef   ;exit process
  11. call eax
  12. end start
  13.  

Mmm, y asi?
push dword 0x9999
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: shellcode básica para windows.
« Respuesta #6 en: 6 Febrero 2011, 13:58 pm »

Mmm, y asi?
push dword 0x9999

en masm no me ensambla, me dá error de sintaxis, tengo que ponerlo así 9999h. De todos modos yo lo estoy poniendo en decimal: 9999. Pero aún así el problema es que al ser un número de 32 bits, me rellena con ceros lo que queda. No importa demasiado ya que lo que hago es poner 99999999 y de este modo ya no rellena nada, pero era simplemente para saber cómo podía solventar lo de los ceros en este caso.

Un saludo, y muchas gracias x vuestra ayuda.
En línea

black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: shellcode básica para windows.
« Respuesta #7 en: 6 Febrero 2011, 16:39 pm »

mensaje editado.. :silbar: :silbar: :silbar:
« Última modificación: 6 Febrero 2011, 19:38 pm por black_flowers » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Aporte] Calculadora estilo windows en VB6 (Muy basica y noob)
Programación Visual Basic
Dracomega 4 2,778 Último mensaje 2 Junio 2010, 22:34 pm
por Dracomega
problema en la creacion de shellcode basica « 1 2 »
Análisis y Diseño de Malware
daryo 13 7,610 Último mensaje 19 Agosto 2014, 17:23 pm
por MCKSys Argentina
Mi primer shellcode en Windows . Ayuda
Bugs y Exploits
Init 2 3,386 Último mensaje 18 Febrero 2018, 02:11 am
por Init
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines