Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
manul — Manul è un fuzzatore parallelo guidato dalla copertura per binari open-source e blackbox su Windows, Linux e MacOS | Kitploit
Strumenti/GitHubGitHub/mxmssh/manul
Analisi Dinamica (Sandboxing)Analisi delle VulnerabilitàFuzzingAnalisi di Binari
GitHubmxmssh/manul

manul

Manul è un fuzzatore parallelo guidato dalla copertura per binari open-source e blackbox su Windows, Linux e MacOS

Vedi Repository
335676 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Manul

Travis AppVeyor

Logo

Manul è un fuzzer parallelo guidato dalla copertura per binari open-source e black-box su Windows, Linux e macOS (beta) scritto in puro Python.

Avvio rapido

root@kitploit:~
pip3 install psutil
git clone https://github.com/mxmssh/manul
cd manul
mkdir in
mkdir out
echo "AAAAAA" > in/test
python3 manul.py -i in -o out -n 4 "linux/test/test_afl @@"

Installazione di Radamsa

root@kitploit:~
sudo apt-get install gcc make git wget
git clone https://gitlab.com/akihe/radamsa.git && cd radamsa && make && sudo make install

Non è necessario installare radamsa su Windows, Manul è distribuito con la libreria nativa di radamsa su questa piattaforma.

Elenco di CVE pubbliche

CVE IDsProdottoRilevatore
CVE-2019-9631 CVE-2019-7310 CVE-2019-9959PopplerMaksim Shudrak
CVE-2018-17019 CVE-2018-16807 CVE-2019-12175Bro/ZeekMaksim Shudrak

Se sei riuscito a trovare un nuovo bug usando Manul, contattami e ti aggiungerò all'elenco.

Demo

Breve demo

Dipendenze

  1. Python3 (Python2 è deprecato dal 1° gennaio 2020, ma Manul dovrebbe funzionare ancora con Python2)
  2. psutil
  3. pywin32 (pip install pywin32) su piattaforma Windows (richiesto solo per la modalità di persistenza DBI).

Fuzzing guidato dalla copertura

Attualmente, Manul supporta due tipi di strumentazione: basata su AFL (afl-gcc, afl-clang e afl-clang-fast) e DBI.

Fuzzing guidato dalla copertura (modalità di strumentazione AFL)

Strumenta il tuo target con afl-gcc o afl-clang-fast e Address Sanitizer (raccomandato per risultati migliori). Ad esempio:

root@kitploit:~
CC=afl-gcc CXX=afl-g++ CFLAGS=-fsanitize=address CXXFLAGS=-fsanitize=address cmake <percorso_al_target>
make -j 8
root@kitploit:~
USE_ASAN=1 CC=afl-clang-fast CXX=afl-clang-fast++ cmake <percorso_al_target>
make -j 8

Vedi queste istruzioni per maggiori dettagli.

Fuzzing guidato dalla copertura in modalità DBI

In questa modalità non è necessario strumentare il target, ma è necessario scaricare l'ultima versione del framework DynamoRIO per Windows o Linux.

Manul è distribuito con client x86/x64 precompilati per Linux e Windows. Puoi trovarli nelle seguenti cartelle:

root@kitploit:~
linux/dbi_32|dbi_64/libbinafl.so (client DynamoRIO)
win/dbi_32|dbi_64/binafl.dll

Purtroppo DynamoRIO non è ufficialmente supportato su MacOS.

Utilizzo di DynamoRIO per fare fuzzing di binari black-box

Puoi trovare i pacchetti di rilascio più recenti di DynamoRIO alla pagina di download di DynamoRIO.

Devi decommentare le seguenti righe nel file manul.config e fornire il percorso corretto al launcher e al client di DynamoRIO.

root@kitploit:~
# Scegli il framework DBI per fornire la copertura a Manul ("dynamorio" o "pin"). Esempio dbi = dynamorio
dbi = dynamorio
# Se il parametro dbi non è None, devono essere specificati il percorso del launcher del motore DBI e del client DBI.
dbi_root = /home/max/DynamoRIO/bin64/drrun
dbi_client_root = /home/max/manul/linux/dbi_64/libbinafl.so
dbi_client_libs = None

Inoltre, puoi aumentare le prestazioni della tua campagna di fuzzing black-box utilizzando il fuzzing persistente in memoria. In questa modalità, dovresti istruire Manul a strumentare una particolare funzione (sì, devi trovarla disassemblando il tuo binario) e la eseguirà in un ciclo decommentando le seguenti righe:

root@kitploit:~
dbi_persistence_mode = 1
dbi_target_module = afl_test
dbi_target_method = open_file
#dbi_target_offset = 0x3198 # opzionalmente puoi fornire l'offset di questa funzione invece del nome
dbi_fuzz_iterations = 1000

Gli autori di winAFL forniscono una spiegazione molto chiara su come funziona effettivamente qui. Manul utilizza una larga porzione del codice della libreria di strumentazione di winAFL per comunicare e strumentare un target.

NOTA IMPORTANTE: Dovresti usare il launcher a 32 bit e il client a 32 bit per fare fuzzing di binari a 32 bit, e il launcher a 64 bit e il client a 64 bit per binari a 64 bit!

Compilazione della libreria client DynamoRIO

Per compilare la libreria di strumentazione, devi usare l'ultima versione di DynamoRIO. Il codice sorgente della libreria di strumentazione si trova in dbi_clients_src nella cartella principale di Manul.

root@kitploit:~
Linux a 64 bit

cd dbi_clients_src
wget <DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz> - scarica l'ultimo DynamoRIO
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-x86_64-Linux-X.XX.XXXX-X.tar.gz/cmake
make
root@kitploit:~
Linux a 32 bit
cd dbi_clients_src
wget <DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz> - scarica l'ultimo DynamoRIO
tar xvf DynamoRIO-x86_64-X.XX.XXXX-X.tar.gz
mkdir client_64
cd client_64
CFLAGS=-m32 CXXFLAGS=-m32 cmake ../dr_cov/ -DDynamoRIO_DIR=/home/max/manul/dbi_clients_src/DynamoRIO-i386-Linux-X.XX.XXXX-X.tar.gz/cmake
make

Su Windows, il modo più semplice per compilare la libreria è installare Visual Studio (testato su versioni 2017 e 2013), avviare il Prompt dei comandi degli strumenti incrociati VS20XX ed eseguire i seguenti comandi:

root@kitploit:~
Windows a 64 bit
cd dbi_clients_src
<Scarica ed estrai l'ultima versione di DynamoRIO>
mkdir client_64
cd client_64
cmake -G"Visual Studio 15 Win64" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (o Debug se necessario)
root@kitploit:~
Windows a 32 bit
cd dbi_clients_src
<Scarica ed estrai l'ultima versione di DynamoRIO>
mkdir client_32
cd client_32
cmake -G"Visual Studio 15" ..\dr_cov\ -DDynamoRIO_DIR=C:\Users\max\manul\dbi_clients_src\DynamoRIO-Windows-XXXX.XX.X.X\cmake
cmake --build . --config RelWithDebInfo (o Debug se necessario)

Utilizzo di Intel PIN per fare fuzzing di binari black-box su Linux

Manul inizialmente supportava il fuzzing guidato dalla copertura con Intel PIN, ma a causa delle basse prestazioni e dell'elevato overhead di manutenzione, questo non è più supportato.

Argomenti da riga di comando

Le opzioni più frequentemente utilizzate possono essere fornite tramite riga di comando. Ulteriori opzioni sono supportate tramite file di configurazione (manul.config).

root@kitploit:~
Esempio: python3 manul.py -i corpus -o out_dir -n 40 "target @@"

argomenti posizionali:
  target_binary  Il binario target e le opzioni da eseguire (non dimenticare le virgolette, es. "target e @@").

argomenti opzionali:
  -h, --help     mostra questo messaggio di aiuto ed esce
  -n NFUZZERS    Numero di fuzzer paralleli
  -s             Esegui fuzzing stupido (nessuna strumentazione del codice)
  -c CONFIG      Percorso del file di configurazione con opzioni aggiuntive (vedi la sezione Opzioni del File di Configurazione sotto)
  -r             Ripristina sessione precedente

Parametri richiesti:
  -i INPUT       Percorso della directory con il corpus iniziale
  -o OUTPUT      Percorso della directory di output

Opzioni del File di Configurazione

Manul è distribuito con il file predefinito manul.config in cui l'utente può trovare tutte le opzioni supportate ed esempi di utilizzo. Le opzioni devono essere specificate nel formato Formato: <nome_opzione> = <valore>. Il simbolo # può essere usato per ignorare una riga.

Dizionario

dict = /home/max/dictionaries/test.dict. La strategia di mutazione di AFL permette all'utente di specificare una lista di token personalizzati che possono essere inseriti in punti casuali del file fuzzato. Manul supporta questa funzionalità tramite questa opzione (preferiti percorsi assoluti).

Pesi dei mutatori

mutator_weights=afl:7,radamsa:2,my_mutator:1. I pesi dei mutatori permettono all'utente di dire a Manul quante mutazioni per 10 esecuzioni devono essere eseguite da un certo fuzzer. In questo esempio, il mutatore AFL verrà eseguito in 7/10 mutazioni, Radamsa in 2/10 e un mutatore personalizzato my_mutator riceverà 1/10. Se si desidera disabilitare un certo mutatore, il peso deve essere impostato a 0 (es. mutator_weights=afl:0,radamsa:1,my_mutator:9).

Seme deterministico (Opzione Radamsa)

deterministic_seed = False|True. Impostando True, le mutazioni di Radamsa diventeranno deterministiche, quindi ogni esecuzione di Manul porterà agli stessi output.

Riepilogo per thread

print_per_thread = False|True. Abilitando questa opzione, Manul stamperà un riepilogo per ogni thread eseguito invece del riepilogo totale.

Disabilita percorsi volatili

disable_volatile_bytes = False|True Abilitando questa opzione, Manul non metterà in blacklist i percorsi volatili.

Fork server di AFL (solo UNIX)

forkserver_on = False|True Abilita o disabilita il fork server di AFL.

Opzioni DBI

dbi = dynamorio|pin. Questa opzione dice a Manul quale framework DBI verrà utilizzato per strumentare il target.

dbi_root = <percorso>. Questa opzione dice a Manul dove trovare il launcher principale del framework DBI.

dbi_client_root = <percorso>. Questa opzione dice a Manul dove trovare il client DBI per eseguire la strumentazione.

dbi_client_libs = nome_#1,nome_#2|None. Questa opzione può essere usata per specificare una lista di librerie che devono essere strumentate insieme al target principale (ad esempio, hai un eseguibile che carica la libreria target più altre in cui vuoi cercare bug).

dbi_persistence_mode = 0|1|2. Questa opzione viene utilizzata per scegliere tra le modalità di persistenza DBI. 0 - nessuna persistenza, 1 - persistenza standard (wrapping delle funzioni), 2 - non ancora supportata.

Se dbi-persistence_mode = 1|2 devono essere specificate le seguenti opzioni:

dbi_target_module = <nome modulo>. Manul cercherà di trovare la funzione target nel modulo specificato qui.

dbi_target_method = <nome funzione>. Nome della funzione da avvolgere per la persistenza.

dbi_target_offset = <offset della funzione, es. 0x3198>. Offset della funzione da avvolgere per la persistenza. Questa opzione può essere usata al posto di dbi_target_method se non sono disponibili simboli di debug.

dbi_fuzz_iterations = 500. Il numero di iterazioni di fuzzing da eseguire in memoria prima che l'intero programma riparta. Puoi giocare con questo argomento per trovare il valore che funziona meglio con il tuo target.

dbi_thread_coverage = False. Strumenta la copertura solo dal thread che ha eseguito la funzione target (non ancora supportato).

Timeout

timeout = 10. Tempo di attesa prima di killare il target e inviare il caso di test successivo.

init_wait

init_wait = 1. Questa opzione può essere usata per impostare un timeout necessario per l'inizializzazione del target.

Opzioni Netslave e Netmaster

Le opzioni net_config_master e net_config_slave sono utilizzate per distribuire istanze di Manul sulla rete. Devi eseguire i seguenti 3 passaggi per eseguire il fuzzing distribuito.

  1. Crea un file con una lista di host nel formato: IP:porta dove verranno eseguiti i tuoi slave.
  2. Avvia tutte le istanze slave di Manul su macchine remote (con tutte le opzioni richieste e il percorso del binario target) e abilita la seguente opzione: net_config_slave = 0.0.0.0:1337. Manul avvierà l'istanza e attenderà una connessione in entrata dall'istanza master sulla porta 1337.
  3. Avvia l'istanza master e fornisci il file con la lista di istanze slave creato al Passo 1 utilizzando net_config_master = nome_file.

Modalità di debug

debug = False|True - stampa informazioni di debug.

logging_enable = False|True - salva informazioni di debug nel log.

Logo

manul_logo = False|True - stampa il logo di Manul all'inizio.

Disabilita statistiche

no_stats = False|True - salva le statistiche.

Frequenza di sincronizzazione bitmap (5000 raccomandato per la modalità DBI)

sync_freq = 10000. Permette all'utente di cambiare la frequenza di sincronizzazione della bitmap di copertura. Questa opzione dice a Manul quanto spesso deve sincronizzare la copertura tra le istanze di fuzzing parallele. Un valore più basso diminuisce le prestazioni ma aumenta la coordinazione tra le istanze.

Percorso personalizzato per salvare l'output

#custom_path = test_path - questa opzione permette di salvare il caso di test in una cartella personalizzata (se il target vuole caricarlo da un posto predefinito).

Fuzzing tramite linea di comando (sperimentale)

cmd_fuzzing = True|False. Se questa opzione è abilitata, Manul fornirà l'input al target tramite linea di comando invece di salvarlo in un file.

Ignora segnali

user_signals = 6,2,1|None. L'utente può dire a Manul quali segnali dal target devono essere ignorati (non considerati come crash).

Fuzzing di rete (sperimentale)

target_ip_port = 127.0.0.1:7715|None - utilizzato per specificare IP e PORTA del target. target_protocol = tcp|tcp - utilizzato per specificare il protocollo per inviare l'input al target tramite rete. net_sleep_between_cases = 0.0. Questa opzione può essere usata per definire un ritardo tra i casi di test inviati al target.

Attualmente, il fuzzing di rete è una funzionalità sperimentale (vedi issues per maggiori dettagli).

Aggiunta di un mutatore personalizzato

Un mutatore personalizzato può essere aggiunto nei seguenti tre passaggi: Passo 1. Crea un file Python (.py) e dagli un nome (es. example_mutator.py)

Passo 2. Crea due funzioni def init(fuzzer_id) e def mutate(data). Vedi example_mutator per maggiori dettagli. Manul chiamerà la funzione init durante l'inizializzazione del fuzzing e mutate per ogni file fornito nel target.

Passo 3. Abilita il mutatore specificandone il nome usando mutator_weights in manul.config. Ad esempio: mutator_weights=afl:2,radamsa:0,example_mutator:8.

NOTA: I mutatori AFL e Radamsa devono sempre essere specificati. Se vuoi disabilitare AFL e/o Radamsa, assegna loro peso 0.

Dettagli tecnici

TBD

Schermata di stato

Schermata di stato

Scarica lo strumento