Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/justicerage/ffm
Escalada de PrivilegiosMovimiento LateralExfiltración de DatosRecopilación de InformaciónPost-ExplotaciónPruebas de PenetraciónComando y ControlUtilidades y FrameworksRed Teaming
GitHubjusticerage/ffm

FFM

Modo de lucha por la libertad: arnés de hacking de código abierto

349474hace 5 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

Modo de Lucha por la Libertad (FFM)

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.

Documentación

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:

  • https://ice-wzl.gitbook.io/hacknetics/c2-frameworks/ffm-documentation

Contribuyentes

  • ice-wzl contribuyó comandos, documentación y refactorizaciones durante la historia del proyecto.

Instalación

Instalación con Docker

  • Con la diversidad de prompts de terminal modernos, recomendamos encarecidamente usar docker con esta herramienta.
  • Utilizar el Dockerfile en este repositorio reducirá drásticamente los posibles errores encontrados.
  • Usar un contenedor para interactuar con hosts remotos también es más seguro. Si fueras explotado mientras interactúas con un host remoto, el atacante estaría en tu contenedor en lugar de tu host real. Esperemos que eso no ocurra.
  • Asegúrate de tener Docker instalado en tu sistema local
root@kitploit:~
git 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
  • Una vez dentro de tu contenedor, establece la passwd para root y neo
  • su neo y ya estás listo

Instalación sin Docker

  • No recomendado
root@kitploit:~
 git clone https://github.com/JusticeRage/FFM.git
 cd /FFM
 pip install -r requirements.txt

Uso

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:

  • Escribe !list para mostrar todos los comandos proporcionados por el arnés.
  • Escribe !list tags para ver las diferentes etiquetas bajo las que se pueden clasificar los comandos
root@kitploit:~
!list tags
Lista de comandos disponibles:
	 enumeration
	 execution
	 help
	 stealth
	 transfer
  • Ahora puedes escribir !list enumeration (o cualquiera de las otras etiquetas) para ver comandos que pertenecen a esa categoría.
root@kitploit:~
!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--

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

Lista de características

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.

Comandos

Comandos de Enumeración

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

Comandos de Transferencia

  • Comandos que te ayudan a descargar y subir archivos, bastante directos.
  • !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.

Comandos de Ejecución

  • !sh [script local] Ejecuta un script de shell desde la máquina local en memoria. Vive en commands/remote_script.py.
  • !py [script local] ejecuta un script Python local en la máquina remota, y lo hace enteramente en memoria. Vive en commands/remote_script.py. Echa un vistazo a mi otro repositorio para scripts que podrías querer usar. Este comando utiliza una sintaxis multilínea con <<, lo que significa que los pseudo-shells que no lo soportan (Weevely es un buen ejemplo) romperán este comando bastante mal.
  • !py3 [script local] hace exactamente lo mismo excepto para sistemas con python3. Usa el mismo módulo, commands/remote_script.py.
  • !elf [script local] Ejecuta un ejecutable desde la máquina local en memoria usando el intérprete Python compatible que esté disponible en la máquina remota. Vive en commands/remote_elf.py.

Comandos de Sigilo

  • Soy totalmente consciente de que estos dos módulos son lo opuesto a "sigilosos", pero es donde están ubicados actualmente hasta que se pueda encontrar una ubicación alternativa. Esta categoría de sigilo probablemente contendrá comandos que te ayudan a camuflarte mejor, además de aquellos comandos que podrían hacerte destacar.
  • !pty genera un TTY, algo que no quieres en la mayoría de los casos porque tiende a dejar evidencia forense. Sin embargo, algunos comandos (sudo) o exploits requieren un TTY para ejecutarse, así que esto se proporciona por conveniencia. UNSET HISTFILE HISTFILESIZE HISTSIZE PROMPT_COMMAND se le pasa en cuanto se genera, junto con export TERM=xterm
  • !sudo Invoca sudo sin un TTY. Vive en commands/notty_sudo.py.

Los plugins se pueden configurar más editando ffm.conf.

Procesadores

Conceptualmente, los comandos (como se describen arriba) se utilizan para generar algo de bash que se reenvía al shell. Pueden realizar operaciones más complejas capturando la salida del shell y generando instrucciones adicionales basadas en lo que se devuelve. Los procesadores son un poco diferentes, ya que se utilizan más bien para reescribir datos que circulan entre el usuario y el proceso bash subyacente. Si bien es cierto que cualquier procesador podría reescribirse como un comando, parecía un poco más limpio separarlos. Los procesadores de entrada trabajan sobre lo que el usuario escribe una vez que presiona la tecla ENTER, y los procesadores de salida pueden modificar cualquier cosa devuelta por el shell.

  • Un buen ejemplo de procesador se encuentra en processors/ssh_command_line.py. Todo lo que hace es agregar la opción -T a cualquier comando SSH que vea si falta. Asegúrate de revisar su simple código si estás interesado en escribir un procesador.
  • Otro procesador de entrada presente en el framework, processors/assert_torify.py, contiene una lista negra de comandos de red (ssh, nc) y los bloquea si no parecen estar siendo proxyficados a través de una herramienta como torify. El arnés hace todo lo posible para solo molestar al usuario si parece que el comando se está ejecutando en la máquina local. Obviamente, esto no debería ser tu única salvaguarda contra filtrar tu dirección IP de casa.
  • Finalmente, processors/sample_output_processor.py es un procesador de salida muy simple que resalta en rojo cualquier ocurrencia de la palabra "password". Como es bastante inútil, no está habilitado en el framework, pero aún puedes usarlo como punto de partida si quieres hacer algo más sofisticado.

Problemas conocidos

CTRL+R aún no está implementado y todos lo extrañamos mucho.

Más problemático es el hecho de que el framework se cuelga de vez en cuando. En el 99% de los casos, esto ocurre cuando no logra detectar que un comando que lanzó ha terminado de ejecutarse. Por lo general, esto significa que el prompt de comando de la máquina en la que has iniciado sesión no pudo ser reconocido como tal. En ese caso, puedes intentar mejorar la expresión regular ubicada al comienzo del archivo ffm.py, o iniciar sesión en esa misma máquina con ssh -T ya que no habrá ningún prompt problemático. Por defecto, FFM se rendirá al intentar leer la salida de un comando después de 5 minutos (algunos plugins pueden implementar tiempos de espera diferentes); así que si el framework se cuelga, tendrás que esperar hasta que veas un mensaje de error (aunque si el proceso subyacente aún se está ejecutando, puede que aún no puedas escribir comandos).

Declaración final

Creo que he cubierto todo sobre esta herramienta. De nuevo, es un poco diferente de lo que suelo publicar, ya que la mayoría de las personas probablemente necesitarán modificarlo antes de que les sea útil.

Quedan muchos plugins por escribir, así que asegúrate de compartir cualquier mejora que hagas a FFM. Siéntete libre de abrir issues no solo para errores, sino también si estás tratando de hacer algo y no puedes averiguar cómo; de esta manera podré mejorar la documentación para todos.

Pendiente

  • Módulo de cifrado de archivos individuales

Contacto

Descargar herramienta
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