
Modo de Luta pela Liberdade: plataforma de hacking open source
FFM é um harness de hacking que você pode usar durante a fase de pós-exploração de um engajamento de red-teaming. A ideia da ferramenta foi derivada de uma conferência de 2007 do @thegrugq.
Foi apresentada no SSTIC 2018 (vídeo) e o deck de slides que a acompanha está disponível em esta url. Se você não estiver familiarizado com esta classe de ferramentas, é fortemente recomendado dar uma olhada nelas para entender qual é o propósito de um harness de hacking. Todos os comentários estão incluídos nos slides.
Este projeto é distribuído sob os termos da Licença GPL v3.
A documentação principal está neste README e nos módulos de comando em commands/.
A palestra do SSTIC mencionada acima continua sendo o melhor background de alto nível sobre como o harness deve ser usado.
Material adicional de walkthrough está disponível em:
ice-wzl contribuiu com comandos, documentação e refatorações durante a história do projeto.docker com esta ferramenta.Dockerfile neste repositório reduzirá drasticamente os erros em potencial encontrados.Docker instalado no seu 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
#execute seu novo contêiner e acesse um prompt /bin/bash como root
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
passwd para root e neosu neo e agora você está pronto git clone https://github.com/JusticeRage/FFM.git
cd /FFM
pip install -r requirements.txt
O objetivo de um harness de hacking é atuar como um auxiliar que automatiza tarefas comuns durante a fase de pós-exploração, mas também protege o usuário contra erros que possa cometer.
É uma instrumentação do shell. Execute ./ffm.py para ativá-lo e você pode começar a trabalhar
imediatamente. Os comandos são distribuídos nos pequenos módulos em commands/, com
commands/command_manager.py lidando com descoberta e registro. Os principais grupos são
enumeração, ajuda, stealth, transferência e execução.
Existem dois comandos que você precisa conhecer:
!list para exibir todos os comandos fornecidos pelo harness.!list tags para ver as diferentes tags nas quais os comandos podem ser agrupados!list tags
Lista de comandos disponíveis:
enumeration
execution
help
stealth
transfer
!list enumeration (ou uma das outras tags) para ver comandos que se enquadram nessa categoria.!list enumeration
Lista de comandos disponíveis:
!backup-hunter: Caça por arquivos de backup
!info: Retorna CPU(s), Arquitetura, Memória e Versão do Kernel para a máquina atual.
!log: Alterna o registro (logging) da entrada e saída do harness para um arquivo.
!mtime: Retorna arquivos modificados nos últimos X minutos
!os: Exibe a distribuição da máquina atual.
!db-hunter: Caça por arquivos .sqlite, .sqlite3 e .db
!sshkeys: Caça por chaves SSH privadas e públicas na máquina atual.
!suid: Encontra binários SUID, SGID na máquina atual.
--snip--
SHIFT+TAB para realizar a conclusão com tab na máquina local. Isso pode ser útil se você estiver
conectado via SSH em um computador remoto, mas precisar referenciar um arquivo localizado na sua máquina.Este harness de hacking fornece algumas funcionalidades descritas abaixo. Conforme descritas, a filosofia de design por trás da ferramenta também será apresentada. Não se espera que todos os comandos implementados no FFM sejam adequados para você. Cada um tem sua própria maneira de fazer as coisas, e ajustar o harness à sua necessidade específica provavelmente exigirá que você modifique parte do código e/ou escreva alguns plugins. Muito esforço foi dedicado para garantir que esta seja uma tarefa indolor.
!os é um comando extremamente simples que apenas executa cat /etc/*release* para mostrar qual SO
a máquina atual está executando. Provavelmente é mais valioso como uma demonstração de que, no
contexto de um harness de hacking, você pode definir aliases que funcionam através dos limites das máquinas.
Conecte-se via SSH a qualquer computador, digite !os e o comando será executado. Os comandos de enumeração residem em
commands/enumeration_commands.py, os comandos de ajuda em commands/help_commands.py, e os
comandos relacionados a stealth estão divididos entre commands/stealth_commands.py,
commands/notty_sudo.py e commands/log_control.py.!backup-hunter Caça por arquivos de backup!info Retorna CPU(s), Arquitetura, Memória e Versão do Kernel para a máquina atual.!log Alterna o registro (logging) da entrada e saída do harness para um arquivo. Implementado em
commands/log_control.py.!mtime Retorna arquivos modificados nos últimos X minutos. Por exemplo, !mtime 5 obterá todos os arquivos na máquina local (aos quais você tem direitos de ver) que foram modificados nos últimos 5 minutos.!db-hunter Caça por arquivos .sqlite, .sqlite3 e .db e outros arquivos de banco de dados!sshkeys Caça por chaves SSH privadas e públicas na máquina atual.!suid Encontra binários SUID, SGID na máquina atual.!strange-dirs Verifica o dispositivo começando pelo caminho especificado pelo usuário em busca de diretórios estranhos em um host!sudo-version Verifica se há uma versão vulnerável do sudo!vm Verifica se o dispositivo é uma Máquina Virtual!download [arquivo remoto] [caminho local] obtém um arquivo da máquina remota e o copia
localmente através do terminal. Este comando é um pouco mais complexo porque uma verificação de erros mais rigorosa
é necessária, mas é outro comando que você pode ler facilmente para começar. Ele reside
em commands/download_file.py. Observe que requer xxd ou od na máquina remota para
funcionar corretamente.!download-dir [diretório remoto] [destino local] transmite um arquivo tar de um diretório remoto
através do terminal e o extrai localmente sem tocar no sistema de arquivos remoto.
Ele reside em commands/download_directory.py. Requer tar e base64 na máquina
remota, e também usa gzip quando disponível.!upload [arquivo local] [caminho remoto] funciona exatamente como o comando anterior,
exceto que um arquivo local é colocado na máquina remota. Ele reside em commands/upload_file.py.