jueves, 27 de abril de 2017

Escaner vulnerabilidades WEB: Wapiti


Descripción:


Wapiti permite auditar la seguridad de aplicaciones web, realiza exploraciones de "caja negra", es decir, no estudia el código fuente de la aplicación, sino que analiza las páginas web de la aplicación web desplegada buscando secuencias de comandos y formularios donde puede inyectar datos.

Una vez que obtiene esta lista, Wapiti actúa como un fuzzer, inyectando payloads para ver si un script es vulnerable.

Puede detectar las siguientes vulnerabilidades:

+ Database Injection (PHP/ASP/JSP SQL Injections and XPath Injections)
+ Cross Site Scripting (XSS) reflected and permanent
+ File disclosure detection (local and remote include, require, fopen,
  readfile...)
+ Command Execution detection (eval(), system(), passtru()...)
+ XXE (Xml eXternal Entity) injection
+ CRLF Injection
+ Search for potentially dangerous files on the server (thanks to the Nikto db)
+ Bypass of weak htaccess configurations
+ Search for copies (backup) of scripts on the server

 

Características:


+ Genera reportes de vulnerabilidad en varios formatos (HTML, XML, JSON, TXT ...)
+ Puede suspender y reanudar una exploración o un ataque
+ Puede darle colores en el terminal para resaltar las vulnerabilidades
+ Diferentes niveles de verbosidad
+ Manera rápida y fácil de activar / desactivar los módulos de ataque
+ Añadir un payload puede ser tan fácil como añadir una línea a un archivo de texto


Requisitos:


+ Python >=2.6
+ python-requests >=v1.2.3 ( http://docs.python-requests.org/en/latest/ )
+ BeautifulSoup ( http://www.crummy.com/software/BeautifulSoup/ )
+ python-xml

Para más información aquí tienes el link del proyecto en github: https://github.com/IFGHou/wapiti

PoC:


Descargamos Wapiti (En caso de Kali Linux viene por defecto)
$ git clone https://github.com/IFGHou/wapiti
$ cd wapiti
$ sudo setup.py install
$ cd bin
$ python wapiti [URL]

 Ejemplo1: Code Injection

Ejemplo2: XSS

 Ejemplo3: Reporte HTML
Como máquina de pruebas he usado Web for Pentester I, puedes encontrar la descarga completamente gratis aquí: https://pentesterlab.com/exercises/web_for_pentester

domingo, 23 de abril de 2017

COMO DETECTAR UN SNIFFER EN TU RED con shARP

Descripción:

La falsificación de ARP permite a un atacante interceptar paquetes de datos en una red, modificar el tráfico o detener todo el tráfico. A menudo, el ataque se utiliza como una apertura para otros ataques, como la denegación de servicio, ataques de man in the middle, o los ataques de secuestro de sesión. Nuestro programa anti-ARP (shARP) detecta la presencia de un tercero en una red privada activamente. Tiene 2 modos: defensivo y ofensivo. 
El modo defensivo protege al usuario final del spoofer desconectando el sistema de la red. 
El modo ofensivo desconecta el sistema del usuario de la red y expulsa al atacante enviando paquetes de desautenticación a su sistema, incapaz de volver a conectarse a la red hasta que el programa se restablezca manualmente. 
El programa crea un archivo de registro (/usr/shARP/) que contiene los detalles del ataque, como la dirección Mac de los atacantes, la hora del proveedor de Mac y la fecha del ataque. Podemos identificar el NIC del sistema de los atacantes con la ayuda de la dirección MAC obtenida. Si es necesario, el atacante puede ser permanentemente baneado de la red metiendo la dirección MAC en la lista de bloqueo de nuestro router.

PoC:

Clonamos el repositorio de la herramienta y la ejecutamos:
$ ./shARP -d INTERFAZ

*-d para activar el programa en modo defensivo
*-h Ayuda


Hacemos un MITM con la herramienta ettercap ($ sudo apt-get install ettercap-text-only):
$ ettercap -T -M arp /IPVICTIMA// /IPPuertaEnlace//


Nos informará que que la MAC de nuestra puerta de enlace ha sido spoofeada y se desconectará de la red.


Tenéis toda la documentación en el proyecto: https://github.com/europa502/shARP yo he tenido problemas al instalarlo en Ubuntu 16 y en Debian 8, pero en Kali Linux funciona perfectamente.

Solucion al problema: ping: unknown host gateway
$ sudo nano /etc/hosts
Y añadimos la IP del gateway con el nombre "gateway".



lunes, 17 de abril de 2017

Roba credenciales de Windows remotamente con documento Word | WORDSTEAL

 

Descripción:

Microsoft Word tiene la capacidad de incluir imágenes de ubicaciones remotas. Esta es una característica indocumentada pero fue encontrada usada por los creadores de malware para incluir imágenes a través de http para las estadísticas. También podemos incluir archivos remotos a un servidor SMB y la víctima se autenticará con sus inicios de sesión cartas credenciales. Esto es muy útil durante un pentest porque le permite robar credenciales sin activar alertas y la mayoría de las aplicaciones de seguridad no detectan esto.
Este script en python nos genera un documento MS Office el cual contendrá una imagen de nuestro servidor, y pondrá a la escucha el modulo de metasploit llamado auxiliary/server/capture/smb que  actúa como un recurso SMB para capturar hashes de contraseñas de usuario para que puedan ser explotados posteriormente.

PoC:

Kali Linux (Atacante)
Windows 10 (Víctima) con MS Office 2007

Desde nuestro Kali Linux clonamos el repositorio
Una vez clonado descargamos una imagen cualquiera y la metemos en la carpeta del repositorio.
Y usamos el comando:
python main.py IPLOCAL IMAGEN.jpg 1
Esto nos generará un archivo RTF (Rich Text Format) y nos pondrá a la escucha el modulo de metasploit auxiliary/server/capture/smb.


El último paso será enviar el archivo RTF a nuestra víctima y al ejecutarlo nos dará los hashes NTML.



Usaremos John para descifrarlos
$ john password_netntlmv2

Como se puede ver en la imagen john tardó 28 minutos en crackear las contraseñas.

Te dejo una web donde puedes comprobar en cuanto tiempo se puede crackear la contraseña que pongas.

Por cierto, el word generado es indetectable por los antivirus. https://nodistribute.com/result/W20PBQ9iFsaTmptXh6udblvoAL

Video:

jueves, 13 de abril de 2017

9 Formas de Escalar Privilegios | Sherlock

Descripción:

Sherlock es una herramienta creada en powershell por Rasta Mouse. La herramienta nos dirá si tenemos instalados los parches que que corrigen vulnerabilidades de escalada de privilegios en nuestro equipo. Actualmente busca 9 actualizaciones, las cuales son:

    MS10-015 : User Mode to Ring (KiTrap0D)
    MS10-092 : Task Scheduler
    MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow
    MS13-081 : TrackPopupMenuEx Win32k NULL Page
    MS14-058 : TrackPopupMenu Win32k Null Pointer Dereference
    MS15-051 : ClientCopyImage Win32k
    MS15-078 : Font Driver Buffer Overflow
    MS16-016 : 'mrxdav.sys' WebDAV
    MS16-032 : Secondary Logon Handle

PoC:

Nos descargamos el proyecto de github.
Una vez descargado importamos las funciones en powershell con el comando:

> Import-Module \Sherlock.ps1
Recordar que para importar un modulo deberemos tener el ExecutionPolicy en Unrestricted, podemos ejecutar: > Set-ExecutionPolicy Unrestricted -scope CurrentUser
Una vez importado podemos ejecutar la función:
> Find-AllVulns
 La cual nos dirá si sufrimos peligro de elevacion de permisos.


jueves, 6 de abril de 2017

Hidden Tear – Ransomware Open Source

 

Definición:


¿Qué es un ransomware?

El ransomware es el tipo de malware más peligroso de los últimos tiempos.

Cuando este malware infecta un ordenador genera una clave única que envía a los servidores del ciberdelincuente y comienza a cifrar los archivos del usuario. Cuando finaliza muestra un mensaje que indica que los archivos se han cifrado y que se debe pagar un rescate para recuperarlos o, de lo contrario, se perderán para siempre.

El código de los ransomware suelen ser privados y de código cerrado, estando sólo controladas por los los ciberdelincuentes, a diferencia de los demás, este, se distribuye como código abierto y sólo para fines educativos.

Como dice en el repositorio oficial del software: https://github.com/utkusen/hidden-tear sus principales características son:

Utiliza un cifrado AES para secuestrar los archivos del usuario.
Muestra un mensaje similar al que muestran las piezas de malware más peligrosas cuando la infección y el cifrado se completan.
Envía la clave de cifrado a un servidor remoto.
Genera un archivo de texto en el escritorio con el correspondiente mensaje.
Ocupa tan sólo 12KB.
Es indetectable por algunos antivirus actuales.
Además, este ransomware cuenta con dos versiones, online y offline.
El proyecto ha sido eliminado, y ya no está disponible su descarga, alfinal de la entrada os dejo un link donde podéis descargarlo.


Requisitos:


Visual Studio

Configurar Hidden Tear Offline


Para poder modificarlo y compilarlo, necesitaremos Visual Studio. Abriremos el proyecto que hay en el directorio “hidden-tear-offline”, no tendremos problemas para entenderlo y modificar las cosas que queramos, pues el código está perfectamente comentado y muy bien estructurado.

Lo primero con lo que nos encontraremos, será donde se guardará la contraseña dentro del pc o usb, ya que el método que emplearemos es offline.


A continuación, nos encontraremos con esta línea, en la que deberemos de escribir el nombre del fichero pdf que queremos que se abra, haciendo creer a la víctima, que realmente ha ejecutado el pdf.


En ese paso, podremos modificar la contraseña que queremos que cree aleatoriamente, aunque se puede modificar para dejarla fija.


Extensiones que se encriptarán, podemos suprimir alguna o bien, añadir más.


Este será el mensaje que dejaremos al usuario en el escritorio, dentro del fichero Read_it.txt


El método de cifrado de ficheros y la extensión que se utilizará.


Una vez sabemos como funciona, lo compilamos y comenzamos a probarlo.


Una vez el malware hace su trabajo (dependiendo de los ficheros que tengamos, tardará más o menos), podremos comprobar que tenemos nuestros ficheros cifrados.


Puesto a que este es el método offline del ransomware, iremos al directorio de nuestro usuario, en mi caso: C:\Users\Pentesting y ahí encontraremos un txt con la contraseña que necesitamos para recuperar nuestros ficheros


Utilizando otro proyecto llamado hidden-tear-decrypter (también en github), podremos recuperar los ficheros, utilizando esta contraseña.

Nota: Si alguien le editó la extensión .locked, deberá modificar esta línea escribiendo la extensión que utilizó.




Y tenemos nuestros ficheros de nuevo!


 

Configurar Hidden tear Online

 

Para poder modificarlo y compilarlo, necesitaremos Visual Studio. Abriremos el proyecto que hay en el directorio “hidden-tear”, no tendremos problemas para entenderlo y modificar las cosas que queramos, pues el código está perfectamente comentado y muy bien estructurado.

Lo primero que vemos, es a que url enviará el ransomware la información del ordenador y la contraseña, para ello, debemos poner nuestra url y tener el archivo php que se encargue de recibir los datos correctamente creado y con los permisos adecuados.






En ese paso, podremos modificar la contraseña que queremos que cree aleatoriamente, aunque se puede modificar para dejarla fija.


Aquí podremos elegir que se envía a nuestro fichero php y por tanto se guarda en los logs.


El método de cifrado de ficheros y la extensión que se utilizará.


Extensiones que se encriptarán, podemos suprimir alguna o bien, añadir más.


En que directorio se guardará el txt con el mensaje que queremos dejar y empezará a ejecutar el ransomware, es muy importante que exista el directorio o dará un error cuando la víctima lo ejecute. Además, tener en cuenta de que si empieza en el Escritorio, no afectará a directorios superiores, para afectar a todo el disco habrá que ejecutarlo en la raiz de C:\ o bien el directorio que nosotros queramos.


Compilamos y se lo enviamos a la víctima.
Por desgracia, Hidden-Tear ya no es fud (Fully UnDetectable).


Como cualquier malware, se puede pasar por un crypter para evitar que sea detectado.


Ejecutamos Hidden Tear y comprobamos que nuestros ficheros se han cifrado con la extensión .locked


Vamos a nuestro fichero de logs y conseguimos la contraseña para recuperar nuestros ficheros.


Utilizando otro proyecto llamado hidden-tear-decrypter (también en github), podremos recuperar los ficheros, utilizando esta contraseña.

Nota: Si alguien le editó la extensión .locked, deberá modificar esta línea escribiendo la extensión que utilizó.




Y tenemos nuestros ficheros de nuevo!

 

Descarga


 

PoC:


Este artículo ha sido sacado de: https://underc0de.org/foro/profile/blackdrake/

miércoles, 5 de abril de 2017

COMO DETECTAR UN ESCANEO DE PUERTOS | PSAD

Descripción:

Ser capaz de detectar la actividad de red que puede indicar un intento de intrusión puede ayudarle a tomar las acciones apropiadas antes de que ocurra un evento. Los sistemas de detección de intrusos están disponibles por esta razón específica.

Los sistemas de detección de intrusos se utilizan para registrar conexiones sospechosas e informar cuando se ve que se está produciendo una actividad inusual. Algunos programas se utilizan puramente como un sistema de notificación, mientras que otros pueden intentar activamente bloquear el tráfico que parecen ser la intención de causar daño.

La herramienta psad, que representa la detección de ataques de exploración de puertos, es una pieza de software que supervisa activamente los registros de firewall para determinar si se está realizando un evento de análisis o ataque. A continuación, puede alertar a los administradores, o tomar medidas activas para disuadir la amenaza.

Tutorial:

Instalamos PSAD, la herramienta está disponible en los repositorios oficiales de Ubuntu, por lo tanto la instalación es tan sencilla como introducir el siguiente comando:

$ sudo apt-get install psad

Una vez empezada la instalación nos preguntará por el email del administrador, podemos seleccionar un correo en Postfix, o usar uno de internet, como gmail.

La forma en que PSAD detecta la actividad en los puertos de tu servidor es mediante la supervisión de los registros producidos por una aplicación de firewall. Ubuntu trae el firewall iptables de forma predeterminada, pero está completamente desconfigurado y no supervisa ni bloquea nada por defecto.

Aunque podríamos introducir los siguientes comandos para simplemente habilitar el registro, haremos una configuración más robusta:

$ sudo iptables -A INPUT -j LOG
$ sudo iptables -A FORWARD -j LOG

Si agregaste las reglas anteriores, limpia las reglas antes de configurarlas para que podamos empezar desde cero.

$ sudo iptables -F

Puedes ver las reglas actuales con:

$ sudo iptables -S

Salida del comando:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

IPTABLES

Ahora podemos comenzar a añadir nuestras reglas, principalmente a la cadena INPUT. Queremos decir a iptables que descarguen conexiones que no necesitamos o deseamos. Necesitamos agregar las reglas para permitir explícitamente nuestras conexiones autorizadas antes de agregar restricciones.

La primera regla permitirá que todo el tráfico generado por nuestro servidor, dirigido a nuestro servidor. Este tipo de conexión se utiliza generalmente para que los servicios se comuniquen entre sí y transmitan información fácilmente:
$ sudo iptables -A INPUT -i lo -j ACCEPT

A continuación, queremos agregar una regla para permitir explícitamente todo el tráfico relacionado con una conexión existente. Esto permitirá que nuestras sesiones actuales continúen ininterrumpidamente:
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

A continuación, podemos agregar los servicios que deseamos mantener abiertos al público. Para SSH, podemos agregar una línea como esta:
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Si tenemos un servidor web en ejecución en el puerto predeterminado 80, podemos agregar una regla como esta:
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Añade otros puertos para los servicios legítimos y accesibles al público que desea dejar abiertos con la misma sintaxis:
$ sudo iptables -A INPUT -p protocol --dport port_num -j ACCEPT

Cuando hayas terminado de agregar los servicios legítimos, eliminaremos todas las conexiones restantes. Cualquier cosa que toque esta regla no coincide con nuestras reglas que eran para el tráfico legítimo.

Antes de hacerlo, sin embargo, es necesario agregar la regla que indica a iptables que comience a registrar tráfico. Esto hará que iptables registre el tráfico que todavía no se ha manejado.
$ sudo iptables -A INPUT -j LOG

También debemos agregar esta regla a la cadena forward en caso de que terminemos por reenviar el tráfico a otra parte
$ sudo iptables -A FORWARD -j LOG

Finalmente, dejemos caer todo el tráfico extraño que no ha coincidido todavía. Podemos hacerlo agregando una regla que coincida con todo en la cadena al final como esto:
$ sudo iptables -A INPUT -j DROP

O bien, podemos usar la funcionalidad de política integrada para configurar lo que sucede cuando un paquete pasa por la cadena sin coincidir con ninguna regla:

$ sudo iptables -P INPUT DROP

Los resultados son funcionalmente exactamente iguales.

Una cosa a tener en cuenta es que si alguna vez necesitas limpiar tu iptables y configurar una política DROP (en lugar de agregarla como una regla en la parte inferior de la cadena), debes invertir la política antes de limpiar:

$ sudo iptables -P INPUT ACCEPT
$ sudo iptables -F

Si no lo haces, se eliminarán las reglas de iptables y solo se mantendrá la política predeterminada de descartar todos los paquetes entrantes. Esto eliminará todo el tráfico de red entrando en su servidor, incluyendo el tráfico de tu conexión SSH.

De forma predeterminada, iptables no mantiene sus reglas entre los reinicios, así que después de haber probado tú configuración y de estar seguro de que hace lo que desea, puede descargar y habilitar una herramienta que hace que estas reglas sean persistentes:
$ sudo apt-get install iptables-persistent
$ sudo service iptables-persistent start

Configuración PSAD

Lo siguiente que haremos será configurar PSAD, para ello editamos el archivo de configuración que se encuentra en:
/etc/psad/psad.conf

Las primeras cosas que debes modificar están en la parte superior del archivo. Debes cambiar el parámetro EMAIL_ADDRESSES para que coincida con las direcciones de correo electrónico que desea notificar cuando se genera un informe. También debe modificar el HOSTNAME para que coincida con tu dominio para que haga referencia a la máquina correcta:

Una sección que probablemente querrás echar un vistazo es el "DANGER_LEVEL". Estos niveles son una forma de psad para clasificar los niveles de amenaza.
Ellos son automáticamente determinados por el número de paquetes involucrados en un evento, pero también puedes asignar cierto tipo de tráfico a cierto nivel de peligro. Los umbrales predeterminados para cada nivel a ser alcanzado son:

DANGER_LEVEL1           5;
DANGER_LEVEL2           15;
DANGER_LEVEL3           150;
DANGER_LEVEL4           1500;
DANGER_LEVEL5           10000;

Puedes cambiar estos niveles dependiendo del nivel de sensibilidad que deseas que psad utilice para las alertas.

También puedes configurar la sensibilidad del psad a través del parámetro PORT_RANGE_SCAN_THRESHOLD. Esto determina el número de puertos en un rango que debe analizarse antes de que se genere una alerta. El valor predeterminado es que se genera una alerta después de escanear dos puertos.

PORT_RANGE_SCAN_THRESHOLD       1;

Una de las cosas más importantes a configurar es el parámetro IPT_SYSLOG_FILE, ya que actualmente no apunta a un archivo que syslog utiliza de forma predeterminada.

Modifica esto para apuntar al archivo syslog, donde psad realmente tendrá la oportunidad de ver los registros activos:

IPT_SYSLOG_FILE         /var/log/syslog;

Si utilizas ciertos puertos para cosas como el  port knocking, deberías indicarle a psad que ignore los intentos en estos puertos para que no active alertas a través de actividades de rutina:IGNORE_PORTS            ports_or_range_to_ignore;
También puedes ignorar los mensajes basados en otras cosas a través de los parámetros IGNORE_PROTOCOLS, IGNORE_INTERFACES e IGNORE_LOG_PREFIXES apropiadamente denominados.

Si descubres que recibes alertas con demasiada frecuencia, puedes establecer el umbral en los correos electrónicos ajustando el nivel que debe alcanzarse antes de enviar un correo electrónico:

MIN_DANGER_LEVEL           1;  # Controls psad logging and email alerts
EMAIL_ALERT_DANGER_LEVEL   1;  # Applies only for email alerts

También puedes limitar el número de correos electrónicos directamente estableciendo esto:

EMAIL_LIMIT                0;

Cero significa que no hay límite. Este límite es el número de correos electrónicos que pueden generar las amenazas desde una única dirección IP.

Por el momento, vamos a guardar y cerrar el archivo.

Implementar PSAD

Ahora que tenemos una configuración básica de psad en su lugar, completa con capacidades de alerta, podemos implementar nuestras políticas y activar nuestro sistema.

Antes de comenzar debemos actualizar las definiciones de las firmas de psad para que reconozcan correctamente los tipos de ataque conocidos.Podemos hacer esto con el comando:

$ sudo psad --sig-update

Esto buscará los archivos más recientes y actualizará la base de datos.

Ahora, necesitamos reiniciar el servicio para usar estas actualizaciones e implementar nuestros cambios de configuración.

$ sudo service psad restart

Esto implementará nuestro monitoreo de registros. Para ver el estado actual de eventos detectados por psad, escribe:

$ sudo service psad status

También podemos ver que los eventos detectados se registran en archivos ubicados en /var/log/psad/.
Por ejemplo con un TAILF.

Podemos ver los registros con el comando:

$ sudo psad -S

Banear una IP

Ahora que hemos verificado que podemos detectar actividad que intenta acceder a nuestro servidor, podemos implementar opcionalmente un mecanismo de prevención donde psad puede modificar automáticamente las reglas de iptables para prohibir los escáneres.
Antes de hacer esto, deberíamos echar un vistazo al archivo auto_dl:

$ sudo nano /etc/psad/auto_dl

Este archivo especifica qué nivel de peligro debemos configurar automáticamente ciertas direcciones IP. Por ejemplo, si tenemos un atacante que intenta continuamente escanear nuestro sistema, podemos configurarlos automáticamente al nivel de peligro 5:

attacker_ip          5;

Por otro lado, básicamente puede eximir ciertas direcciones IP de provocar una reacción de psad. Podríamos añadir el localhost aquí y ponerlo a "0" si no hubiéramos añadido una regla en nuestros iptables explícitamente.

Para nuestros propósitos, ya que vamos a configurar psad para bloquear automáticamente el tráfico de una IP de amenaza detectada, debemos agregar nuestro ordenador personal a esta lista para que no nos bloqueemos:

local_computer_ip        0;

Guarda y cierra el archivo cuando hayas terminado.
Abre de nuevo el archivo de configuración del psad:

$ sudo nano /etc/psad/psad.conf

Busca el parámetro ENABLE_AUTO_IDS. Esta es la regla que permite a psad modificar nuestro firewall para bloquear ciertas direcciones. Si deseas hacer esto automáticamente, puedes cambiarlo de esta manera:

ENABLE_AUTO_IDS         Y;

A continuación, queremos decidir qué constituye un nivel de amenaza lo suficientemente grande como para bloquear la IP ofensiva. Podemos hacerlo ajustando este parámetro:

AUTO_IDS_DANGER_LEVEL       5;

Otra opción importante es el tiempo total de bloqueo en segundos:

AUTO_BLOCK_TIMEOUT          3600;

Esto los bloqueará por una hora por defecto.

PoC:

Atacante -- 192.168.1.88/24
Servidor -- 192.168.1.6/24

$ sudo nano /etc/psad/auto_dl

192.168.1.88/24       5;

Podemos probar cómo funciona esto, prohibiéndonos temporalmente. En el mismo archivo de configuración, vamos a establecer estos parámetros:
$ sudo nano /etc/psad/psad.conf

ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       4;
AUTO_BLOCK_TIMEOUT          60;

Esto activará la configuración automática del cortafuegos, fijará el umbral al nivel de peligro 4,  con una exploración normal de SYN, y fijamos el tiempo del bloqueo por 60 segundos.
Reiniciamos el servicio:

$ sudo service psad restart

Y lanzamos un nmap desde otra máquina:

$ sudo nmap -PN -sS 192.168.1.6

El servidor bloqueará esa IP por 60 segundos.


Comprobamos el IPTABLES con: $ sudo iptables -S