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
modbus-scanner — Scanner di rilevamento Modbus/TCP multithread scritto in C utilizzando libmodbus. | Kitploit
Strumenti/GitHubGitHub/k3ystr0k3r/modbus-scanner
Scanner di VulnerabilitàMappatura della ReteScansione PorteSicurezza SCADA/ICSRaccolta InformazioniSicurezza di Rete
GitHubk3ystr0k3r/modbus-scanner

modbus-scanner

Scanner di rilevamento Modbus/TCP multithread scritto in C utilizzando libmodbus.

Vedi Repository
52 giorni faNon ancora revisionato

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

Scanner di Rilevamento Modbus

Uno scanner C multithread per il rilevamento di servizi Modbus/TCP che utilizza libmodbus.

Lo scanner non si basa esclusivamente sulla porta TCP 502 aperta. Invece, stabilisce una connessione Modbus/TCP e invia una richiesta Modbus a livello applicativo. Una risposta Modbus valida viene utilizzata come indicatore principale della presenza di un servizio Modbus.


Modbus/TCP

Modbus è un protocollo di comunicazione industriale comunemente utilizzato da PLC, RTU, HMI, sistemi SCADA, sensori, contatori e altri dispositivi industriali.

Modbus/TCP trasporta il protocollo applicativo Modbus su TCP.

La porta Modbus/TCP standard è:

root@kitploit:~
TCP/502

Un flusso di comunicazione tipico è:

root@kitploit:~
Scanner
   |
   | Connessione TCP → 502
   |
   | Richiesta Modbus/TCP
   v
Dispositivo Modbus
   |
   | Risposta Modbus/TCP
   v
Scanner

A differenza dei protocolli che forniscono un banner immediatamente dopo la connessione, Modbus/TCP richiede generalmente che il client invii una richiesta Modbus valida prima che il dispositivo produca una risposta a livello applicativo.


Metodo di Rilevamento

Lo scanner esegue il rilevamento in due fasi.

1. Connessione TCP

Lo scanner tenta di stabilire una connessione TCP verso:

root@kitploit:~
<target>:502

Se la connessione non può essere stabilita, il target viene considerato come non rispondente a Modbus/TCP.

Tuttavia, una porta TCP/502 aperta di per sé non è considerata prova sufficiente della presenza di Modbus.

2. Sonda a livello applicativo Modbus

Dopo la connessione, lo scanner invia una richiesta Modbus utilizzando libmodbus.

La sonda principale è:

root@kitploit:~
modbus_read_input_registers(ctx, 0, 1, &reg);

Questo genera un Codice di Funzione Modbus:

root@kitploit:~
0x04 - Lettura Registri di Ingresso

La richiesta chiede al target un registro di ingresso a partire dall'indirizzo 0.

Se il target restituisce una risposta Modbus valida, lo scanner considera il servizio rilevato.


Struttura del Pacchetto Modbus/TCP

Un pacchetto Modbus/TCP è composto da:

root@kitploit:~
+----------------------+----------------------+
| Intestazione MBAP    | PDU                  |
+----------------------+----------------------+

Intestazione MBAP:
+------------------+
| ID Transazione   | 2 byte
| ID Protocollo    | 2 byte
| Lunghezza        | 2 byte
| Identificatore   | 1 byte
| Unità            |
+------------------+

PDU:
+------------------+
| Codice Funzione  | 1 byte
| Dati             | N byte
+------------------+

L'intestazione MBAP è specifica di Modbus/TCP.


Pacchetto di Rilevamento Primario

La prima sonda dello scanner utilizza il Codice di Funzione 0x04.

Una richiesta rappresentativa è:

root@kitploit:~
00 01 00 00 00 06 01 04 00 00 00 01

Scomposizione:

root@kitploit:~
00 01        Identificatore Transazione
00 00        Identificatore Protocollo
00 06        Lunghezza
01           Identificatore Unità
04           Codice Funzione
00 00        Indirizzo di Partenza
00 01        Quantità

Identificatore Transazione

root@kitploit:~
00 01

Identifica la transazione.

Il valore può variare perché l'identificatore di transazione è normalmente gestito dalla libreria client Modbus.

Identificatore Protocollo

root@kitploit:~
00 00

Un valore di 0 identifica Modbus.

Lunghezza

root@kitploit:~
00 06

Specifica il numero di byte successivi al campo lunghezza.

Identificatore Unità

root@kitploit:~
01

Identifica l'unità Modbus target.

Codice Funzione

root@kitploit:~
04

Il Codice di Funzione 0x04 significa:

root@kitploit:~
Lettura Registri di Ingresso

Indirizzo di Partenza

root@kitploit:~
00 00

Lo scanner parte dall'indirizzo di registro 0.

Quantità

root@kitploit:~
00 01

Lo scanner richiede un registro.


Risposta Attesa

Una risposta di successo alla richiesta contiene il Codice di Funzione 0x04 e i dati del registro richiesto.

Una risposta rappresentativa potrebbe essere:

root@kitploit:~
00 01 00 00 00 05 01 04 02 00 00

Scomposizione:

root@kitploit:~
00 01        Identificatore Transazione
00 00        Identificatore Protocollo
00 05        Lunghezza
01           Identificatore Unità
04           Codice Funzione
02           Conteggio Byte
00 00        Valore Registro

La parte importante per il rilevamento è che il target elabori con successo la richiesta Modbus e restituisca una risposta Modbus valida a livello applicativo.

Il valore effettivo del registro dipende dal dispositivo.


Perché la Porta 502 da Sola Non è Sufficiente

Semplicemente verificare:

root@kitploit:~
TCP/502 = APERTA

non dimostra necessariamente che il servizio sia Modbus.

I numeri di porta sono convenzioni. Un'applicazione diversa può essere in ascolto su TCP/502, e un dispositivo Modbus può anche comportarsi diversamente a seconda della sua configurazione.

Lo scanner utilizza quindi:

root@kitploit:~
Connettività TCP
        +
Risposta protocollo Modbus
        =
Rilevamento Modbus

Questo rende il rilevamento a livello applicativo più significativo di una semplice scansione delle porte.


Rilevamento di Fallback

Alcuni dispositivi potrebbero non rispondere alla richiesta iniziale 0x04 a causa della loro configurazione dei registri o dei codici di funzione supportati.

Lo scanner tenta quindi una seconda richiesta se la prima fallisce:

root@kitploit:~
modbus_read_bits(ctx, 0, 1, bits);

Questo utilizza il Codice di Funzione:

root@kitploit:~
0x01 - Lettura Bobine

Una richiesta rappresentativa è:

root@kitploit:~
00 02 00 00 00 06 01 01 00 00 00 01

Scomposizione:

root@kitploit:~
00 02        Identificatore Transazione
00 00        Identificatore Protocollo
00 06        Lunghezza
01           Identificatore Unità
01           Codice Funzione
00 00        Indirizzo di Partenza
00 01        Quantità

Lo scanner considera il target rilevato quando una delle due operazioni Modbus riceve una risposta di successo.


Flusso di Rilevamento

root@kitploit:~
             IP Target
                 |
                 v
          Connessione TCP
             porta 502
                 |
          +------+------+
          |             |
        Fallita      Connessa
          |             |
          v             v
       Ignora      Funzione 0x04
                        |
                 +------+------+
                 |             |
               Valida       Fallita
                 |             |
                 v             v
            MODBUS TROVATO   Funzione 0x01
                               |
                        +------+------+
                        |             |
                      Valida       Fallita
                        |             |
                        v             v
                   MODBUS TROVATO    Nessun rilevamento

Implementazione

Lo scanner utilizza libmodbus per costruire e analizzare i pacchetti Modbus/TCP invece di costruire manualmente i frame del protocollo.

L'operazione principale è:

root@kitploit:~
modbus_read_input_registers(ctx, 0, 1, &reg);

Se questa fallisce:

root@kitploit:~
modbus_read_bits(ctx, 0, 1, bits);

La connessione viene quindi chiusa e il contesto libmodbus viene liberato.

Questo mantiene la gestione del protocollo all'interno della libreria Modbus mentre lo scanner gestisce:

  • Enumerazione dei target
  • Threading
  • Gestione delle connessioni
  • Rilevamento
  • Tracciamento dell'avanzamento
  • Registrazione dei risultati

Timeout

Lo scanner utilizza timeout brevi per la connessione e la risposta:

root@kitploit:~
#define TIMEOUT_SEC 2

Questo impedisce a un singolo host irraggiungibile o non reattivo di bloccare un worker per un periodo di tempo eccessivo.

Le reti industriali possono contenere dispositivi con risposte relativamente lente, quindi i valori di timeout potrebbero dover essere regolati a seconda dell'ambiente.


Multithreading

I target vengono suddivisi tra più thread worker.

Ad esempio:

root@kitploit:~
Thread 1 → target 1–64
Thread 2 → target 65–128
Thread 3 → target 129–192
Thread 4 → target 193–254

Ogni worker tenta indipendentemente il rilevamento Modbus/TCP.

Questo consente di testare più host contemporaneamente invece di attendere ogni target in sequenza.


Considerazioni Importanti sul Rilevamento

Un risultato positivo significa che il target ha risposto con successo a una richiesta Modbus compresa dallo scanner.

Non identifica necessariamente:

  • Il produttore del dispositivo
  • Il modello del dispositivo
  • La versione del firmware
  • Il programma PLC
  • Il contenuto dei registri
  • Se il dispositivo è vulnerabile

Queste sono attività separate di fingerprinting o valutazione.

Lo scanner è principalmente uno strumento di rilevamento del servizio Modbus/TCP.


Limitazioni

Il metodo di rilevamento è intenzionalmente conservativo.

Un dispositivo può essere in grado di supportare Modbus ma fallire il rilevamento se:

  • TCP/502 è filtrato
  • Un firewall blocca la richiesta
  • Il dispositivo richiede un ID Unità diverso
  • Il codice di funzione richiesto non è supportato
  • Il dispositivo non espone l'indirizzo richiesto
  • Il dispositivo è temporaneamente non disponibile
  • La latenza di rete supera il timeout configurato

Pertanto:

root@kitploit:~
Nessuna risposta ≠ Definitivamente non Modbus

Significa che lo scanner non ha potuto ottenere una risposta di successo utilizzando le sonde che ha tentato.


Compilazione

Installa le dipendenze richieste e compila con:

root@kitploit:~
make

Oppure direttamente:

root@kitploit:~
gcc -Wall -Wextra -O2 -o modbus modbus.c -lmodbus -lpthread

Esegui:

root@kitploit:~
./modbus -i 192.168.1.0 -s /24 -t 10 -o results.txt

Esempio:

root@kitploit:~
[+] Modbus rilevato: 192.168.1.20:502
[+] Modbus rilevato: 192.168.1.42:502

[+] Scansionati: 254 | Trovati: 2 Modbus
[+] Risultati salvati in: results.txt

Riepilogo

Lo scanner rileva i servizi Modbus/TCP eseguendo un'interazione effettiva con il protocollo piuttosto che affidandosi esclusivamente al rilevamento della porta TCP.

Il processo di rilevamento è:

root@kitploit:~
Connetti a TCP/502
        ↓
Invia Codice di Funzione Modbus 0x04
        ↓
Ricevi risposta Modbus valida?
        ↓
      SÌ → Modbus rilevato
        |
       NO
        ↓
Invia Codice di Funzione Modbus 0x01
        ↓
Ricevi risposta Modbus valida?
        ↓
      SÌ → Modbus rilevato
        |
       NO
        ↓
   Nessun rilevamento

Il principio chiave è semplice:

Rileva il protocollo, non solo la porta.

Scarica lo strumento