He estado buscando mucho y no encontré nada. Todavía me pregunto: ¿importa en qué idioma escribes shellcode? ¿Shellcode en Assembly, C, etc. funcionará en todos los lugares donde se pueda usar y será tan bueno como el otro?
He estado buscando mucho y no encontré nada. Todavía me pregunto: ¿importa en qué idioma escribes shellcode? ¿Shellcode en Assembly, C, etc. funcionará en todos los lugares donde se pueda usar y será tan bueno como el otro?
El término "shellcode" proviene del hecho de que normalmente se usa para obtener acceso de shell en la máquina. En la mayoría de los casos, el código de shell se usa cuando existe una vulnerabilidad basada en la corrupción de la memoria (por ejemplo, un desbordamiento de búfer) donde el atacante puede escribir en partes de la memoria que se ejecutarán o causarán que se ejecuten. Este debe ser un código de máquina, ya que está siendo ejecutado directamente por la CPU.
Dado que a menudo hay espacio limitado para trabajar en el búfer, Shellcode a menudo está diseñado para ser lo más corto posible, por lo tanto, a menudo se escribe a mano en el ensamblaje y se descarga en una secuencia de bytes de escape (por ejemplo, "\ x23 \ xa4 \ x00 "). Es posible escribir un programa en C, compilarlo, luego volcar los bytes como se muestra arriba, pero el compilador de C puede introducir complejidades innecesarias y agregar longitud adicional. Por lo general, el código de shell será corto y podría bajar una segunda etapa de la red si se desea una carga útil más larga.
En resumen, necesita un código de máquina, y realmente no importa si este código proviene de C o ensamblado, excepto lo que se dijo anteriormente. Sin embargo, la definición de shellcode es un tanto floja y podría aplicarse también a lenguajes interpretados (por ejemplo, obtener un shell mediante la explotación de una llamada no autenticada a eval () en una aplicación de Python), aunque normalmente no es la palabra elegida en estos casos.
Lea otras preguntas en las etiquetas programming shellcode