
smbcrawler es una herramienta sin rodeos que toma credenciales y una lista de hosts y 'rastrea' (o 'araña') a través de esos recursos compartidos
SmbCrawler es una herramienta directa que toma credenciales y una lista de hosts y 'rastrea' (o 'araña') a través de estos recursos compartidos. Características:
Si necesitas instrucciones sobre cómo instalar un paquete de Python, te recomiendo que te asegures de tener pipx instalado y ejecutes pipx install smbcrawler.
SmbCrawler puede convertir automáticamente algunos archivos binarios como PDF, XLSX, DOCX, ZIP, etc. a texto plano usando MarkItDown. Debido a que este paquete trae muchas dependencias, está marcado como extra. Sin embargo, se recomienda encarecidamente para obtener los mejores resultados. Si deseas convertir binarios automáticamente, instala SmbCrawler de esta manera:
pipx install 'smbcrawler[binary-conversion]'
Agregar la finalización del shell es muy recomendable. Como una aplicación Python que usa la librería click, puedes agregar la finalización por tabulación a bash, zsh y fish usando el mecanismo habitual.
Ejecútalo así (10 hilos, profundidad máxima 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler ha sufrido una revisión importante. Los cambios más significativos son:
Los antiguos argumentos de CLI sobre 'archivos interesantes', 'recursos compartidos aburridos' y demás eran torpes y confusos. En su lugar, ahora usamos 'perfiles'; vea abajo para más detalles.
Además, me di cuenta de que básicamente reinventé las bases de datos relacionales, pero lo hice muy mal, así que ¿por qué no usar sqlite directamente? El enfoque sqlite nos permite producir un buen informe HTML interactivo con buen rendimiento. Todavía puedes exportar resultados en varios formatos si necesitas usar los datos en algún flujo de herramientas.
La forma antigua en que SmbCrawler reportaba permisos a veces no era muy útil. Por ejemplo, no es raro tener permisos de lectura en el directorio raíz del recurso compartido, pero todos los subdirectorios están protegidos, por ejemplo, para perfiles de usuario. Ahora SmbCrawler reportará qué tan profundo pudo leer el árbol de directorios de un recurso compartido y si llegó al máximo o podría haber ido más profundo si hubieras proporcionado un valor mayor para el argumento de profundidad máxima.
Si prefieres la versión anterior, todavía está disponible en PyPI y se puede instalar con pipx install smbcrawler==0.2.0, por ejemplo.
Durante la ejecución, puedes usar las siguientes teclas:
p: pausar el rastreador y saltar hosts o recursos compartidos individuales<espacio>: mostrar el progreso actuals: mostrar una actualización de estado más detalladaPara más información, ejecuta smbcrawler -h.
Incluso en redes de tamaño mediano, SmbCrawler encontrará toneladas de datos. El desafío es reducir los falsos positivos.
Es importante darse cuenta de que los permisos pueden aplicarse a nivel de servicio y a nivel del sistema de archivos. El servicio SMB remoto puede permitirte autenticarte y tu cuenta de usuario puede tener permisos de lectura en principio, pero podría carecer de estos permisos en el sistema de archivos.
SmbCrawler reportará si tienes permisos para:
--depth)Debido a que no es trivial verificar los permisos de los recursos compartidos SMB sin intentar la acción en cuestión, SmbCrawler intentará crear un directorio en cada recurso compartido. Su nombre es smbcrawler_DELETEME_<8 caracteres aleatorios> y se eliminará inmediatamente, pero ten cuidado de todos modos.
[!WARNING] A veces tienes permiso para crear directorios, pero no para eliminarlos, por lo que dejarás un directorio vacío allí.
Para decidir qué hacer con ciertos recursos compartidos, archivos o directorios, SmbCrawler tiene una característica llamada 'perfiles'. Echa un vistazo al perfil predeterminado.
Los perfiles se cargan desde archivos con extensiones *.yml o *.yaml desde estas ubicaciones:
$XDG_DATA_HOME/smbcrawler/ (por defecto ~/.local/share/smbcrawler)--extra-profile-directory--extra-profile-fileLos perfiles de cada ubicación sobrescriben las definiciones anteriores.
El valor regex define si un perfil coincide, y se usará el último perfil que coincida. Todas las expresiones regulares no distinguen entre mayúsculas y minúsculas, reflejando el comportamiento más común en el mundo Windows.
Dado que puede ser confuso cómo los perfiles de diferentes fuentes funcionan juntos, asegúrate de usar el parámetro --dry-run. Te muestra la configuración efectiva y no hace nada más.
Veamos cada sección, que siempre es una lista de diccionarios. Cada una de las claves del diccionario es una etiqueta arbitraria y cada uno de los valores es a su vez un diccionario con diferentes propiedades.
comment: Una cadena útil que describe este perfilregex: Una expresión regular que define a qué archivos se aplica este perfil. La última expresión regular que coincida es la que cuenta.regex_flags: Un arreglo de banderas que se pasarán a la función match de la expresión regularhigh_value (por defecto: false): Si un archivo es de 'alto valor', se reportará su presencia, pero no se descargará necesariamente (piensa en discos duros virtuales: importantes, pero demasiado grandes para descargarlos automáticamente)download (por defecto: true): Si es true, se descargarán los primeros 200KiBi (o el archivo completo si high_value=true) y se analizará en busca de secretoscomment, regex, regex_flags: Igual que arribahigh_value: se reportará su presencia y la profundidad de rastreo se cambiará a infinitocrawl_depth: Rastrear este recurso compartido o directorio hasta una profundidad diferente a la definida por el argumento --depthcomment, regex_flags: Igual que arribaregex: Una expresión regular que coincide con el secreto. El secreto en sí puede ser un grupo nombrado con el nombre secret.Tiene sentido ejecutar primero SmbCrawler con profundidad de rastreo 1 para tener una idea de con qué estás lidiando. En esta primera ejecución, puedes habilitar la verificación de escritura con -w:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <INPUT FILE> -u <USER> -d <DOMAIN> -p <PASSWORD>
Ten en cuenta que esto solo verifica los permisos de escritura y lectura en el directorio raíz de cada recurso compartido. Solo una ejecución completa te dirá más sobre hasta qué profundidad llegan los permisos de lectura.
Después de la verificación inicial de permisos, puedes identificar recursos compartidos interesantes y aburridos para tu próxima ejecución o varias ejecuciones. Algunos recursos compartidos como SYSVOL y NETLOGON aparecen muchas veces, por lo que debes establecer la profundidad de rastreo a cero en tu próxima ejecución y elegir un host para escanear estos recursos compartidos duplicados en una tercera ejecución. Aquí hay un ejemplo:
$ smbcrawler -C dc_only.crwl crawl -D -1 <DC IP> \
-u <USER> -d <DOMAIN> -p <PASSWORD>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <NEW INPUT FILE> \
-u <USER> -d <DOMAIN> -p <PASSWORD> \
--extra-profile-file skip_sysvol.yml
Aquí, skip_sysvol.yml sería:
shares:
sysvol:
comment: "Skip sysvol and netlogon share"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
Siéntete libre de incluir aquí otros recursos compartidos que consideres que no valga la pena rastrear.
Los datos sin procesar están contenidos en una base de datos SQLite y un directorio (output.crwl y output.crwl.d por defecto). El directorio contiene dos directorios más: uno con los archivos descargados, únicos por el hash de su contenido, y un directorio que refleja todos los recursos compartidos con enlaces simbólicos que apuntan a los archivos de contenido. Este último es bueno para buscar mediante grep en todos los archivos descargados.
Los datos se pueden transformar a varios formatos. También puedes simplemente acceder a la base de datos con sqlitebrowser, por ejemplo. Se han predefinido algunas vistas útiles. O puedes generar JSON y usar jq para manipular los datos.
Si deseas mostrar todos los recursos compartidos que pudiste leer más allá del directorio raíz en una tabla LaTeX, por ejemplo, usa esta consulta:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
También hay una característica experimental de salida HTML. Puede que aún no sea completamente útil para grandes cantidades de datos.
Si notas muchos falsos positivos o falsos negativos en los secretos reportados, por favor ayuda y házmelo saber. La aportación de la comunidad es importante al intentar mejorar la detección automática. El mejor escenario: proporciona una solicitud de extracción (pull request) con cambios en el archivo de perfil predeterminado.
Adrian Vollmer, SySS GmbH
Licencia MIT; consulta LICENSE para más detalles.