[Pentesterlab write-up] Web For Pentester II - Authentication

Hoy continuamos con los ejercicios de autenticación del laboratorio de Pentesterlab 'Web for pentester II'.

Recordar que, en el contexto de una aplicación web, la autenticación es el proceso por el que se verifica la identidad de un usuario, normalmente mediante una contraseña. Una vez validado, el servidor debe manejar la sesión del usuario para poder seguir interactuando con él. Las sesiones deben ser mantenidas con un identificador único y no predecible.

Las vulnerabilidades relacionadas con la autenticación y la gestión de sesiones son críticas porque permiten a un atacante suplantar la identidad de un usuario y, por lo tanto, tener sus privilegios de acceso.

Veamos algunos de los fallos más típicos y cómo explotarlos.


Ejercicio 1:

Las contraseñas predecibles son probablemente la forma más fácil y común de evadir autenticaciones. Para empezar basta con probar la misma contraseña que el nombre de usuario (admin) y estaremos dentro:


SERVIDOR
require 'sinatra/base'


class AuthenticationExample1 < PBase
  
  set :views, File.join(File.dirname(__FILE__), 'example1', 'views')
  
  CREDS =  "admin:admin"
  
  def self.path
    "/authentication/example1/"
  end
  helpers do
    def protected!
      unless authorized?
        response['WWW-Authenticate'] = %(Basic realm="Username is admin, now you need to guess the password")
        throw(:halt, [401, "Not authorized\n"])
      end
    end

    def authorized?
      @auth ||=  Rack::Auth::Basic::Request.new(request.env)
      return false unless @auth.provided? && @auth.basic? && @auth.credentials
      return CREDS ==  @auth.credentials.join(":")
    end
  end
  get '/' do
    protected!
    erb :index
  end
end

Ejercicio 2:

En este ejercicio el problema es que se utiliza una comparación de strings “non-time-constant”, esto significa que la página web analizará la cadena introducida carácter por carácter hasta que encuentre un error, ya que el programador no se molestó en incluir algún tipo de código para aleatorizar o estandarizar el tiempo que tarda la página en analizar los datos.

#Wanakiwi, una herramienta capaz de descifrar los archivos cifrados por WannaCry (Windows XP a 7 no reiniciados)

¡Atención, si has sido infectado por WannaCry NO REINICIES la máquina! El famoso autor de Mimikatz, Benjamin Delpy‏ aka @gentilkiwi, ha publicado la herramienta Wanakiwi que es capaz de descifrar los archivos sin pagar el chantaje...

Hay un fallo en la cripto-API de Windows por el que si se obtienen de la memoria los números primos usados para calcular la clave privada esta puede volver a calcularse. Por eso es tan importante no apagar el equipo infectado, para no perder los datos de la memoria.

En principio el fallo parecía que estaba sólo en Windows XP, pero al parecer afecta a Windows 7 también:

"Después de realizar pruebas adicionales con Benjamin, nos dimos cuenta de que el leak de los números primos en el Crypt API de Microsoft todavía estaba presente en Windows 7. \o/"

Esto significa por lo tanto que la herramienta funcionará desde XP a 7, incluyendo Windows 2003 (x86 confirmado), Vista y 2008 y 2008 R2. Lamentablemente en las últimas versiones los números primos son borrados correctamente (CryptReleaseContext).

Anteriormente se publicó otra herramienta similar, Wannakey, pero requería una aplicación distinta para transformar esos bits en la clave secreta necesaria para descifrar los archivos. Wanakiwi parece más efectiva y ha sido validada por la Europol. Así que si no has reiniciado el equipo (o la memoria no ha sido sobrescrita) y no tienes la última versión de Windows todavía tienes una esperanza:

- Descarga wanakiwi aquí.
- Ejecuta wanakiwi.exe y automáticamente buscará el archivo 00000000.pky. Opcionalmente puedes indicar el PID (Process ID). Si no se indica, por defecto automáticamente buscará en wnry.exe o wcry.exe.
- Cruza los dedos y suerte!

Demo:

Fuente: WannaCry — Decrypting files with WanaKiwi + Demos
Github: https://github.com/gentilkiwi/wanakiwi/releases

Recopilatorio de rootkits

Dentro de la "gran familia" del malware, sin duda un rootkit es una de las piezas más poderosas y peligrosas debido a su propia naturaleza, pues oculta la presencia de (normalmente) malware en el sistema.

Un rootkit reside en el sistema operativo y esconde su presencia interceptando y modificando las funciones del API de nivel bajo, es decir, corrompe los programas y funciones capaces de detectarlo.

Adicionalmente también puede ocultar ciertos procesos, directorios, archivos y claves de registro y muchos rootkits instalan sus propios drivers y servicios también “invisibles” al sistema.

La eliminación del rootkit puede ser complicada o prácticamente imposible, especialmente en los casos en los que el rootkit reside en el kernel del sistema operativo siendo a veces la reinstalación la única opción.

Peligroso, ¿verdad? Pues gracias al enigmático d30sa1 y su repositorio de github tenemos un interesante recopilatorio de rookits para poder cacharrear:

https://github.com/mempodippy/vlany
http://www.ussrback.com/UNIX/penetration/rootkits/
https://github.com/Alifcccccc/Windows-Rootkits
https://packetstormsecurity.com/files/125240/Azazel-Userland-Rootkit.html
https://github.com/islamTaha12/Python-Rootkit
https://github.com/Eterna1/puszek-rootkit
https://github.com/juxing/AdoreForAndroid
https://github.com/HackerFantastic/Public/tree/master/rootkits
https://github.com/m0nad/Diamorphine
https://github.com/maK-/maK_it-Linux-Rootkit
https://github.com/RagingGrim/Rootkit/tree/master/Rootkit
https://github.com/NexusBots/Umbreon-Rootkit
https://github.com/josephjkong/designing-bsd-rootkits
https://github.com/citypw/suterusu/
https://citypw.blogspot.gr/2014/08/an-awesome-linux-kernel-rootkit-suterusu.html
https://github.com/Cr4sh/WindowsRegistryRootkit
https://packetstormsecurity.com/files/139665/Vlany-Linux-LD_PRELOAD-Rootkit.html

Cómo detectar máquinas vulnerables a #WannaCry (nmap nse script MS17-010)

Después del torbellino mediático de los últimos días, mucha gente que no trabaja en informática o no tiene demasiada idea pregunta: "pisha, y cómo hago para saber si puedo pillar el ramonware ransomware ese" y normalmente la respuesta rápida es "actualiza Windows inmediatamente, si es que todavía no lo has hecho". La razón es obvia, el vector de red que utiliza el ransomware WannaCry es la explotación de la vulnerabilidad en SMB (boletín MS17-010) corregida el 14 de marzo, al igual que hace el famoso ETERNALBLUE liberado por ShadowBrokers.

También podríamos detener la propagación del malware deshabilitando SMBv1 o encomendándonos a San Custodio y que se haya activado un "kill switch" que reconozca la variante que nos estaba acechando pero... ¿para qué arriesgarnos?... actualiza, actualiza, ACTUALIZA!

Ahora bien, si estas en una red y no eres responsable directo de actualizar los equipos M$ de la LAN, quizás te hayan pedido o te resulte interesante }:-) saber cuáles son las máquinas que tienen el puerto 445/TCP accesible y son vulnerables. Para ello podríamos usar el escáner de Metasploit (auxiliary/scanner/smb/smb_ms17_010), aunque resulta algo más lento que el script de nmap que vamos a utilizar en principio, que es el que el pasado domingo publicó el mexicano Paulino Calderon (responsable del chapter @OWASP_riviera).

Lo que hace el script es conectarse a $IPC, ejecutar una transacción sobre FID 0 y comprobar si es devuelto el error “STATUS_INSUFF_SERVER_RESOURCES” para determinar si ha sido parcheado o no contra CVE2017-010.

https://raw.githubusercontent.com/cldrn/nmap-nse-scripts/master/scripts/smb-vuln-ms17-010.nse

Simplemente tenemos que descargar el script nse en el directorio correspondiente, por defecto:

# Linux – /usr/share/nmap/scripts/ or /usr/local/share/nmap/scripts/
# OSX – /opt/local/share/nmap/scripts/
# Windows – c:\Program Files\Nmap\Scripts

Y ejecutar:
nmap -sC -p445 --open --max-hostgroup 3 --script smb-vuln-ms17-010.nse X.X.X.X/X

Ejemplo NO VULNERABLE:
nmap -Pn -sC -p445 --open --max-hostgroup 3 --script smb-vuln-ms17-010.nse 192.168.1.22

Starting Nmap 7.12 ( https://nmap.org ) at 2017-05-16 1:56 CEST
Nmap scan report for 192.168.1.66
Host is up (0.00049s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 50:7B:9D:D5:05:CA (Lcfc(hefei) Electronics Technology)

Host script results:
|_smb-vuln-ms17-010: Could not connect to 'IPC$'

Ejemplo VULNERABLE:
# nmap -Pn -sC -p445 --open --max-hostgroup 3 --script smb-vuln-ms17-010.nse 192.168.1.23

Starting Nmap 7.40 ( https://nmap.org ) at 2017-05-16 2:02 EDT
Nmap scan report for 192.168.1.23
Host is up (0.00069s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).
|       
|     Disclosure date: 2017-03-14
|     References:
|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
|_      https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/

Nmap done: 1 IP address (1 host up) scanned in 0.59 seconds

[Pentesterlab write-up] Web For Pentester II - SQLi

No creáis que ceso en mi empeño de seguir haciendo labs, concretamente de Pentesterlab he hecho ya casi todos (los gratuitos), sólo que no quiero inundar el blog con mil y un solucionarios. Es más, os animo a hacerlos vosotros mismos y practicar, pero sobretodo a disfrutar el camino como meta.

No obstante, si que iré publicando algunos de los que más interesantes me parezcan. En este caso Web for Pentester II, al igual que la primera serie que vimos, más que un laboratorio es una serie de ejercicios para aprender a explotar las vulnerabilidades web más comunes, así que creo que es bastante interesante porque resulta tremendamente didáctico. También contribuiremos a ello añadiendo a cada ejemplo el código del lado del servidor, lo cual "clarea la caja" pero ayuda a adquirir un mayor nivel de compresión.

Además en esta ocasión dejamos un lado PHP para trabajar con Ruby así que ¡manos a la obra!


Ejercicio 1:

El primer ejemplo es el más sencillo y tendremos que evadir la autenticación sin pasar ningún usuario o contraseña. Si inyectamos una comilla simple en seguida obtendremos el mensaje de error de la base de datos:


Con el mensaje de error ya tendremos la consulta, como podremos comprobar en el código del lado del servidor:

SERVIDOR:
...
 get '/' do
    res = [] 
    if params['username'] && params['password']
      begin 
        sql = "SELECT * FROM users WHERE username='"+params['username']+"'"
        sql+= " AND password='"+params['password']+"'"
        ActiveRecord::Base.establish_connection self.class.db
        res = ActiveRecord::Base.connection.execute(sql).to_a 
      rescue Exception => e
        @message = e.to_s 
      end
    end
    if res.size > 0 
      erb :index
    else
      erb :login
    end
  end
  ...

Por lo tanto, obtener el payload es 'SELECT * FROM users WHERE username='' or 1=1#  es bastante trivial (tenemos que setear que siempre sea true).

PAYLOAD:
' or 1=1#

¿Cuál ha sido la vulnerabilidad que ha explotado el ransomware que ha puesto en jaque a Telefónica y a otras grandes compañías?

Bueno, ya sabéis que ahora está en primera plana la infección por ransomware en Telefónica y en otras grandes empresas, incluso fuera de España, que ha hecho que todos los medios se agiten, ya que han surgido numerosos mensajes en las redes sociales con imágenes del ransom y correos de distintos departamentos rogando a los usuarios que apaguen inmediatamente sus equipos (incluso audios). Nosotros no vamos a entrar en qué compañías se han visto afectadas y cuáles no, pero si nos parece tremendamente curioso saber cuál ha sido la vulnerabilidad que ha explotado el ransomware y ha hecho que haya puesto a tantas empresas en jaque en un periodo tan corto de tiempo.

Lamentablemente o afortunadamente, no he tenido ningún caso todavía que haya podido analizar directamente, por lo que me sustento en suposiciones basadas en lo que he leído en las redes y lo que me han contado varios compañeros y colegas, y casi todas apuntaban a un RCE en MsMpEng, el conocido "crazy bad".

MsMpEng es el servicio de Protección contra Malware que está habilitado por defecto en Windows 8, 8.1, 10, Windows Server 2012 y posteriores. Además, Microsoft Security Essentials, System Center Endpoint Protection y otros productos de seguridad de Microsoft comparten el mismo core. MsMpEng se ejecuta como NT AUTHORITY\SYSTEM sin sandboxing y es accesible remotamente sin autenticación a través de varios servicios de Windows, incluidos Exchange, IIS, etc.

Scanless: herramienta para escanear desde múltiples Port checkers online

En la fase de reconocimiento de un pentest es muy común que, cuando estás escaneando con nmap una IP o un rango de IPs, el firewall/IPS de turno te bloquee tu IP y el puerto se muestre cerrado o filtrado, pudiendo dar lugar a un falso negativo, es decir, a la no detección de un servicio que realmente si está abierto de cara a Internet.
Incluso pudiera darse el caso que estás auditando un servicio web y un WAF detecta un payload o comportamiento que hace que igualmente se restrinja el acceso desde tu IP de atacante.

Existen numerosos sitios que te permiten hacer de forma online un escaneo remoto de los puertos más comunes. De esta manera podemos comprobar rápidamente si realmente nos han banneado la IP o el servicio se ha caído, sin necesidad de cambiar de peer VPN y haciéndolo de forma totalmente anónima.

Al hilo de esto hoy veía una utilidad que permite utilizar hasta siete "port checkers" online desde la línea de comandos, de una manera sencilla y cómoda, ahorrándote tener que abrir el navegador y facilitando el scripting y la automatización...

Se trata de Scanless de Austin Jackson aka Vesche, una herramienta escrita (cómo no) en Python que debe formar parte del arsenal básico de cualquier Red Team (apuntad desarrolladores de Kali).

Para bajarse el repositorio simplemente:

# git clone https://github.com/vesche/scanless.git

Necesitarás las librerías requests y bs4.

# python scanless.py 
usage: scanless.py [-h] [-t TARGET] [-s SCANNER] [-l] [-a]

scanless, public port scan scrapper

optional arguments:
  -h, --help            show this help message and exit
  -t TARGET, --target TARGET
                        ip or domain to scan
  -s SCANNER, --scanner SCANNER
                        scanner to use (default: yougetsignal)
  -l, --list            list scanners
  -a, --all             use all the scanners

Charla sobre hacking práctico usando THW Labs

Esta tarde a las 19:00 horas (GMT+1) tendremos en nuestro canal de Youtube a Daniel Echeverri aka @adastra, que impartirá de forma totalmente gratuita, online y en directo una charla enfocada completamente a la parte práctica de un proceso de pentesting típico utilizando como ejemplo algunos de los sistemas que se encuentran disponibles en el laboratorio de THW Labs.

El objetivo de la charla consiste en explicar qué técnicas suele emplear un atacante para detectar y explotar vulnerabilidades en servicios que responden a peticiones de clientes remotos y posteriormente, una vez conseguido el acceso al sistema vulnerable, las técnicas utilizadas para elevar privilegios, extraer información sensible y lanzar ataques contra segmentos de red internos que no se encuentran disponibles directamente de cara al atacante, pero sí que lo estarian de cara al sistema comprometido, como por ejemplo redes LAN o privadas. En dicho caso, se explica cómo el atacante utilizando el sistema comprometido como pivote, extiende su actividades a otros sistemas a los que no tiene acceso directo.

Podréis seguir la charla en streaming a través del siguiente enlace e incluso formular cualquier pregunta o comentario mediante el chat de Youtube. Posteriormente el vídeo será colgado en el canal para los que no hayan tenido la oportunidad de verlo en directo. ¡Espero que lo disfrutéis!

Phishing for dummies

"Phishing o suplantación de identidad es un término que denomina un modelo de abuso informático y que se comete mediante el uso de un tipo de ingeniería social, caracterizado por intentar adquirir información confidencial de forma fraudulenta (como puede ser una contraseña, información detallada sobre tarjetas de crédito u otra información bancaria). El cibercriminal, conocido como phisher, se hace pasar por una persona o empresa de confianza en una aparente comunicación oficial electrónica, por lo común un correo electrónico, o algún sistema de mensajería instantánea o incluso utilizando también llamadas telefónicas."

Esta técnica es tan antigua como la propia inet, que digo!!! es muchísimo más vieja, y tan efectiva como antigua. Su efectividad radica en su simpleza, y su  simpleza en el descuido del usuario final...

¿Hace falta tener conocimientos para ser Phisher?....NO o no demasiado para comenzar tus andaduras en el cibercrimen, más bien es un alarde de picardía e ingenio...y podéis creer que más de un aguerrido informático ha sido pescado mediante esta técnica.

En este post vamos a ver en la práctica tres simples ejemplos de cómo suplantar identidades casi sin conocimientos, para conseguir información sensible que, aunque muy conocidas, siguen peligrosamente vigentes a día de hoy.

Suplantando una identidad de correo

Quizás de las tres de las que vamos a ver sea la técnica mas antigua y, el que más y el que menos lo ha hecho alguna vez. Se buscaba una máquina sensible a esta técnica, normalmente un servidor de correo al que nos conectábamos por su puerto 25/SMTP y mediante telnet fakeabamos una identidad de uno de las cuentas.

Se supone que hoy por hoy no hay máquinas desde a las cuales nos podamos conectar por SMTP y enviar un mail falso...O_o..... las hay.

Mod de Empire con nuevos módulos

Seguro que ya conocéis Empire, un agente de post-explotación escrito en PowerShell y Python con una arquitectura muy flexible que trae varios módulos que van desde keyloggers hasta Mimikatz. Puede ejecutarse incluso sin powershell.exe y es capaz de cifrar sus comunicaciones y evadir NIDS, todo ello con un framework bastante fácil de usar.

Luis Vacas (aka Cybervaca) lleva tiempo trabajando en un mod de Empire para Hackplayers al que ha añadido nuevos e interesantes módulos:
  • BypassUAC-HackPlayers-eventvwr.ps1   (BypassUAC using eventvwr working in Windows 7/8/10)
  • Invoke-Mimikittenz  (Using Windows function ReadProcessMemory() in order to extract plain-text passwords)
  • Invoke-Mimigatoz   (Variant of Mimikatz)
  • Keylogger_selective   (Executes a keylogger selectively)
  • PsBoTelegram   (Backdoor controlled from telegram)
  • Execute-Url-Script   (Run scripts from a file in a url)
  • Sherlock   (Find privilege escalation vulnerabilities)
  • MS16-135   (Exploit privilege escalation MS16-135 x64 by b33f FuzzySecurity)
  • Invoke-HostRecon   (Situational Awareness)
  • Binder-4System   (Get System from service process)
  • Invoke-Phant0m   (Stops threads from the svhost process to prevent it from logging events without stopping the service.)
  • Set-WindowsDefender   (We can disabled and enabled Windows Defender silently)
Además ha preparado un vídeo tutorial introductorio en el que muestra como instalar el mod desde el repositorio y utilizar alguno de sus módulos, para que veáis lo fácil y a la vez potente que resulta utilizarlos. ¡No os lo perdáis!:

Nota: cortesía de Luis, os paso el script para añadir el regkey que hay que crear para que funcione mimikitenz en Windows 10
param(
[string]$Activar="si"

)

$ErrorActionPreference = "SilentlyContinue"
if ($Activar -like "si" -or $args -like "Si") {$Activar="Si"} else {$Activar="No"} 

######################################################################################################################

$ruta_key = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest"
$key = "UseLogonCredential"
$check_exist_key = Test-Path $ruta_key
if ($check_exist_key -eq $null) {$check_exist_key = "False"}
$check_valor_key = Get-ItemProperty $ruta_key | Select-Object $key ; $check_valor_key = $check_valor_key.UseLogonCredential

######################################################################################################################


if ($Activar -eq "Si") { New-ItemProperty -Path $ruta_key -Name $key -Value "1" -PropertyType DWORD -Force| Out-Null; Write-Host "nnAñadida clave de registro, es necesario reiniciar." } 
if ($Activar -eq "No") {Remove-ItemProperty $ruta_key -Name $key  -Force | Out-Null ; "nnEliminada clave de registro, es necesario reiniciar."}

Proyecto GitHub: https://github.com/Hackplayers/Empire-mod-Hackplayers