
Modalità Lotta per la Libertà: imbracatura di hacking open source
FFM è un'imbracatura di hacking che puoi utilizzare durante la fase di post-sfruttamento di un impegno di red-teaming. L'idea dello strumento è stata derivata da una conferenza del 2007 di @thegrugq.
È stato presentato al SSTIC 2018 (video) e le diapositive di accompagnamento sono disponibili a questo URL. Se non hai familiarità con questa classe di strumenti, è fortemente consigliato dare un'occhiata per capire qual è lo scopo di un'imbracatura di hacking. Tutti i commenti sono inclusi nelle diapositive.
Questo progetto è distribuito secondo i termini della Licenza GPL v3.
La documentazione principale vive in questo README e nei moduli dei comandi sotto commands/.
I collegamenti all'intervento SSTIC sopra rimangono il miglior background di alto livello su come l'imbracatura è pensata per essere utilizzata.
Materiale aggiuntivo per walkthrough è disponibile su:
ice-wzl ha contribuito con comandi, documentazione e refactoring durante la storia del progetto.docker con questo strumento.Dockerfile in questo repository ridurrà drasticamente i potenziali errori incontrati.Docker installato sul tuo sistema localegit 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
#esegui il tuo nuovo contenitore e accedi a un prompt /bin/bash come root
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
passwd per root e neosu neo e ora sei prontogit clone https://github.com/JusticeRage/FFM.git
cd /FFM
pip install -r requirements.txt
L'obiettivo di un'imbracatura di hacking è agire come un assistente che automatizza compiti comuni durante la fase di post-sfruttamento, ma anche proteggere l'utente da errori che potrebbe commettere.
È una strumentazione della shell. Esegui ./ffm.py per attivarla e puoi iniziare a lavorare immediatamente. I comandi sono suddivisi tra i piccoli moduli sotto commands/, con commands/command_manager.py che gestisce l'individuazione e la registrazione. I gruppi principali sono enumeration, help, stealth, transfer ed execution.
Ci sono due comandi che devi conoscere:
!list per visualizzare tutti i comandi forniti dall'imbracatura.!list tags per vedere i diversi tag sotto cui i comandi possono essere raggruppati!list tags
List of commands available:
enumeration
execution
help
stealth
transfer
!list enumeration (o uno degli altri tag) per vedere i comandi che rientrano in quella categoria.!list enumeration
List of commands available:
!backup-hunter: Cerca file di backup
!info: Restituisce CPU, Architettura, Memoria e Versione del Kernel per la macchina corrente.
!log: Attiva/disattiva la registrazione dell'input e dell'output dell'imbracatura su un file.
!mtime: Restituisce i file modificati negli ultimi X minuti
!os: Stampa la distribuzione della macchina corrente.
!db-hunter: Cerca file .sqlite, .sqlite3 e .db
!sshkeys: Cerca chiavi SSH private e pubbliche sulla macchina corrente.
!suid: Trova binari SUID, SGID sulla macchina corrente.
--snip--
SHIFT+TAB per eseguire il completamento tramite tab sulla macchina locale. Questo potrebbe essere utile se sei connesso tramite ssh a un computer remoto ma hai bisogno di fare riferimento a un file che si trova sulla tua macchina.Questa imbracatura di hacking fornisce alcune funzionalità descritte di seguito. Man mano che vengono descritte, verrà introdotta anche la filosofia di progettazione alla base dello strumento. Non ci si aspetta che tutti i comandi implementati in FFM siano adatti a te. Ognuno ha il suo modo di fare le cose, e personalizzare l'imbracatura per le tue esigenze specifiche richiederà probabilmente di modificare parte del codice e/o scrivere alcuni plugin. È stato fatto un grande sforzo per garantire che questo sia un compito indolore.
!os è un comando estremamente semplice che esegue cat /etc/*release* per mostrare quale sistema operativo sta eseguendo la macchina corrente. È probabilmente più utile come dimostrazione che nel contesto di un'imbracatura di hacking, puoi definire alias che funzionano attraverso i confini delle macchine. Collegati via SSH a qualsiasi computer, digita !os e il comando verrà eseguito. I comandi di enumerazione vivono in commands/enumeration_commands.py, i comandi di aiuto in commands/help_commands.py, e i comandi relativi alla stealth sono suddivisi tra commands/stealth_commands.py, commands/notty_sudo.py e commands/log_control.py.!backup-hunter Cerca file di backup!info Restituisce CPU, Architettura, Memoria e Versione del Kernel per la macchina corrente.!log Attiva/disattiva la registrazione dell'input e dell'output dell'imbracatura su un file. Implementato in commands/log_control.py.!mtime Restituisce i file modificati negli ultimi X minuti. Ad esempio !mtime 5 otterrà tutti i file sulla macchina locale (a cui hai diritto di vedere) che sono stati modificati negli ultimi 5 minuti.!db-hunter Cerca file .sqlite, .sqlite3 e .db e altri file di database!sshkeys Cerca chiavi SSH private e pubbliche sulla macchina corrente.!suid Trova binari SUID, SGID sulla macchina corrente.!strange-dirs Controlla il dispositivo a partire dal percorso specificato dall'utente per directory strane su un host!sudo-version Controlla una versione vulnerabile di sudo!vm Controlla se il dispositivo è una macchina virtuale!download [file remoto] [percorso locale] preleva un file dalla macchina remota e lo copia localmente attraverso il terminale. Questo comando è un po' più complesso perché sono necessari controlli degli errori più rigorosi, ma è un altro comando che puoi facilmente leggere per iniziare. Vive in commands/download_file.py. Nota che richiede xxd o od sulla macchina remota per funzionare correttamente.!download-dir [directory remota] [destinazione locale] trasmette un archivio tar di una directory remota attraverso il terminale e lo estrae localmente senza toccare il filesystem remoto. Vive in commands/download_directory.py. Richiede tar e base64 sulla macchina remota, e usa anche gzip quando disponibile.!upload [file locale] [percorso remoto] funziona esattamente come il comando precedente, tranne che un file locale viene messo sulla macchina remota. Vive in commands/upload_file.py.