
Modo de lucha por la libertad: arnés de hacking de código abierto
FFM es un arnés de hacking que puedes usar durante la fase de post-explotación de un compromiso de red team. La idea de la herramienta se derivó de una conferencia de 2007 de @thegrugq.
Se presentó en SSTIC 2018 (video) y la presentación de diapositivas adjunta está disponible en esta url. Si no estás familiarizado con esta clase de herramientas, se recomienda encarecidamente echarles un vistazo para entender cuál es el propósito de un arnés de hacking. Todos los comentarios están incluidos en las diapositivas.
Este proyecto se distribuye bajo los términos de la Licencia GPL v3.
La documentación principal reside en este README y los módulos de comandos bajo commands/.
La charla de SSTIC enlazada arriba sigue siendo el mejor contexto de alto nivel sobre cómo se pretende usar el arnés.
Material adicional de tutoriales está disponible en:
ice-wzl contribuyó comandos, documentación y refactorizaciones durante la historia del proyecto.docker con esta herramienta.Dockerfile en este repositorio reducirá drásticamente los posibles errores encontrados.Docker instalado en tu sistema localgit clone https://github.com/JusticeRage/FFM.git
cd /FFM
docker build Docker_Install/ -t ffm:ffm
docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/ffm ffm fb6dd17e3b91 9 minutes ago 614 MB
docker.io/library/ubuntu 22.04 3b418d7b466a 2 weeks ago 80.3 MB
# Ejecuta tu nuevo contenedor y accede a un prompt de /bin/bash como root
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
passwd para root y neosu neo y ya estás listo git clone https://github.com/JusticeRage/FFM.git
cd /FFM
pip install -r requirements.txt
El objetivo de un arnés de hacking es actuar como un asistente que automatiza tareas comunes durante la fase de post-explotación, pero también proteger al usuario de errores que pueda cometer.
Es una instrumentación del shell. Ejecuta ./ffm.py para activarlo y puedes empezar a trabajar
inmediatamente. Los comandos están distribuidos en los pequeños módulos bajo commands/, con
commands/command_manager.py manejando el descubrimiento y registro. Los grupos principales son
enumeración, ayuda, sigilo, transferencia y ejecución.
Hay dos comandos que necesitas conocer:
!list para mostrar todos los comandos proporcionados por el arnés.!list tags para ver las diferentes etiquetas bajo las que se pueden clasificar los comandos!list tags
Lista de comandos disponibles:
enumeration
execution
help
stealth
transfer
!list enumeration (o cualquiera de las otras etiquetas) para ver comandos que pertenecen a esa categoría.!list enumeration
Lista de comandos disponibles:
!backup-hunter: Busca archivos de respaldo
!info: Devuelve CPU(s), Arquitectura, Memoria y Versión del Kernel de la máquina actual.
!log: Activa/desactiva el registro de la entrada y salida del arnés en un archivo.
!mtime: Devuelve archivos modificados en los últimos X minutos
!os: Muestra la distribución de la máquina actual.
!db-hunter: Busca archivos .sqlite, .sqlite3 y .db
!sshkeys: Busca claves SSH privadas y públicas en la máquina actual.
!suid: Encuentra binarios SUID, SGID en la máquina actual.
--snip--
SHIFT+TAB para realizar autocompletado en la máquina local. Esto puede ser útil si estás
conectado por SSH a una computadora remota pero necesitas hacer referencia a un archivo que está en tu máquina.Este arnés de hacking proporciona algunas características que se describen a continuación. Mientras se describen, también se introducirá la filosofía de diseño detrás de la herramienta. No se espera que todos los comandos implementados en FFM te sirvan. Cada uno tiene su propia forma de hacer las cosas, y ajustar el arnés a tus necesidades específicas probablemente requerirá que modifiques parte del código y/o escribas algunos plugins. Se ha trabajado mucho para asegurar que esto sea una tarea sin dolor.
!os es un comando extremadamente simple que solo ejecuta cat /etc/*release* para mostrar qué SO
está ejecutando la máquina actual. Probablemente es más valioso como demostración de que, en el
contexto de un arnés de hacking, puedes definir alias que funcionan a través de los límites de las máquinas.
Conéctate por SSH a cualquier computadora, escribe !os y el comando se ejecutará. Los comandos de enumeración viven en
commands/enumeration_commands.py, los comandos de ayuda en commands/help_commands.py, y los
comandos relacionados con el sigilo están distribuidos entre commands/stealth_commands.py,
commands/notty_sudo.py y commands/log_control.py.!backup-hunter Busca archivos de respaldo!info Devuelve CPU(s), Arquitectura, Memoria y Versión del Kernel de la máquina actual.!log Activa/desactiva el registro de la entrada y salida del arnés en un archivo. Implementado en
commands/log_control.py.!mtime Devuelve archivos modificados en los últimos X minutos. Por ejemplo !mtime 5 obtendrá todos los archivos en la máquina local (a los que tengas derechos de ver) que hayan sido modificados en los últimos 5 minutos.!db-hunter Busca archivos .sqlite, .sqlite3 y .db y otros archivos de bases de datos!sshkeys Busca claves SSH privadas y públicas en la máquina actual.!suid Encuentra binarios SUID, SGID en la máquina actual.!strange-dirs Comprueba el dispositivo comenzando desde la ruta especificada por el usuario en busca de directorios extraños en un host!sudo-version Comprueba si hay una versión vulnerable de sudo!vm Comprueba si el dispositivo es una Máquina Virtual!download [archivo remoto] [ruta local] obtiene un archivo de la máquina remota y lo copia
localmente a través del terminal. Este comando es un poco más complejo porque se requiere una verificación de errores más estricta, pero es otro comando que puedes leer fácilmente para empezar. Vive en
commands/download_file.py. Ten en cuenta que requiere xxd u od en la máquina remota para
funcionar correctamente.!download-dir [directorio remoto] [destino local] transmite un archivo tar de un directorio
remoto a través del terminal y lo extrae localmente sin tocar el sistema de archivos remoto.
Vive en commands/download_directory.py. Requiere tar y base64 en la máquina
remota, y también usa gzip cuando está disponible.!upload [archivo local] [ruta remota] funciona exactamente igual que el comando anterior,
excepto que se coloca un archivo local en la máquina remota. Vive en commands/upload_file.py.