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
Strumenti/GitHubGitHub/zenfish/ipmi
Password CrackingRicognizioneMappatura della ReteScansione PorteAnalisi delle VulnerabilitàAudit di ConfigurazioneRaccolta InformazioniPenetration TestingSicurezza HardwareAutenticazione
GitHubzenfish/ipmi
7663 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

ipmi

Roba IPMI dal lavoro DARPA

Vedi Repository

Ho scritto alcuni programmi per esplorare IPMI; ecco alcuni dei risultati. Pensavo di fare il solito ciclo di rilevamento, raccolta dati e audit. Ognuno di questi si è rivelato un problema piuttosto interessante di per sé, almeno per me.

Sito web IPMI

Articoli e quant'altro da http://fish2.com/ipmi

html

Password Cracking

Ecco un piccolo programma Perl che tenta di indovinare un account su un BMC remoto, estrarne l'hash, e poi provare a craccare la sua password (con hash HMAC). Ho scritto un piccolo articolo al riguardo per i curiosi. Pesantemente commentato, potrebbe essere utile.

Ottieni i cipher

La specifica IPMI afferma che puoi ottenere il cipher di un sistema remoto senza autenticazione, ma non conosco alcuno strumento che lo faccia realmente (richiedono tutti autenticazione, anche se ovviamente potresti inserire i byte hex grezzi se volessi!) Quindi ho scritto questo piccolo programma per farlo; per lo più cerca di seguire l'output di ipmitool; così facendo credo di aver trovato un bug in quell'utilità (nell'ultima riga a volte i sistemi emettono della spazzatura che sembra essere interpretata male), ma chi lo sa, non ho abbastanza sistemi per testare. Comunque... ipmi-get-ciphers.py.

Se non altro, utile per individuare i sistemi Cipher0 (nota - questo indica semplicemente i cipher supportati - non significa che siano effettivamente attivi), ma ci sono cose interessanti in giro nel mondo.

Ottieni i dettagli di autenticazione

Due programmi qui, uno è una semplice sonda remota in Python (sto iniziando a odiare Perl, ve lo dico) e un secondo che usa utilità da FreeIPMI per raccogliere dati di configurazione con credenziali.

Un piccolo programma Python (oltre il 50% di commenti inline, 2.5k gzip) che invia un singolo pacchetto a un BMC e analizza la risposta. Cosa si può fare con un solo pacchetto, ci si potrebbe chiedere? 10+ diversi test di sicurezza per IPMI, tanto per cominciare. Beh, per cominciare e per finire, è solo un pacchetto :) Richiede Python, un BMC e un percorso aperto verso la porta UDP 623 per funzionare. L'uso è semplicemente "ipmi-get-auth.py target".

ipmi-get-auth.py / Una descrizione molto breve

Portando questo all'estremo... beh, ecco una sorta di versione mega di quanto sopra che lo fa per tutti i canali, tutti i privilegi, tutti... beh, avete capito. Per i monomaniaci (leggete i commenti o il post che ho scritto per capire perché fa quello che fa!)

mega_chan.py / Mega mega mega ... chan chan chan...

Ottieni ID dispositivo (GUID)

Ed ecco un semplice programma per inviare un pacchetto Get Device ID (vedi p250 della specifica IPMI v2) a un sistema. In teoria, dovrebbe funzionare senza autenticazione. In un piccolo sondaggio ho rilevato che circa il 90% dei sistemi ha risposto (anche se non tutti con informazioni valide!) A volte si possono ottenere il vendor e altre informazioni, come numeri di modello e simili, ma la cosa più interessante è ottenere un ID univoco, tradizionalmente una cosa difficile da ottenere via rete.

get-ipmi-guid.py / Get Device ID

Estrai le password da un file password binario SuperMicro

Supermicro ha avuto alcuni problemi di divulgazione del file delle password dal proprio BMC - per esempio, vedi questo e altri articoli:

a-penetration-testers-guide-to-ipmi

Per usare questo script basta digitare:

dump_SM.py password_file

Funziona per me, nessuna garanzia implicita o esplicita, ecc.

Rilevamento

Beh, se puoi parlare con la porta UDP 623, è abbastanza semplice scoprire se un sistema remoto sta eseguendo IPMI. A meno che tu non sia dentro un data center, però, la maggior parte delle persone blocca UDP. E anche se non lo fanno... la scansione UDP è lenta quanto puoi immaginare. Quindi sto attualmente usando due metodi di base, sfruttando il venerabile Nmap e ipmiping (dagli strumenti GNU FreeIPMI.) La cosa più semplice da fare è:

  • Usa ipmiping per chiedere a un sistema remoto se parla IPMI o no. Una risposta positiva è l'indicazione più forte che un sistema parli IPMI (ma nulla è certo!) Più tecnicamente invia due IPMI chiamate Get Channel Authentication Capabilities tramite un Get Channel datagramma di richiesta Authentication Capabilities sulla porta UDP 623 (due richieste poiché usa UDP e le connessioni non sono garantite.)
    root@kitploit:~
    </p> <p>
    
    Poiché Nmap è molto più efficiente nella scansione di reti su larga scala
    rispetto a ipmiping, questo metodo viene usato solo se Nmap dice che un host
    ha la porta UDP 623 aperta.
    
    </p> <p>
    
    Nel bene o nel male questa porta è spesso bloccata, quindi gran parte del
    tempo altri metodi hanno più probabilità di scoprire indirettamente se
    IPMI è in esecuzione o meno.
    
  • Il secondo metodo è un po' vago e si basa su un po' di induzione (ovvero supposizioni.) Nmap scansiona le porte note per essere associate a IPMI e alle aggiunte dei vendor; UDP 623 è ovvia (la porta IPMI predefinita), ma c'è una varietà di porte (sia UDP che TCP) che da sole potrebbero non dare subito una risposta, ma nel loro insieme possono indicare fortemente la sua presenza. TFTP, SNMP, SSH/SMASH, VNC e molti altri sono tra queste.
    root@kitploit:~
    </p> <p>
    
    Le porte sono pesate in base alla loro capacità indicativa e al fatto che
    Nmap le trovi aperte, filtrate o in altri stati.
    
    </p> <p>
    
    Nmap può anche mostrare i banner dei servizi a cui si connette. Uso
    espressioni regolari per cercare i target - ad esempio le stringhe
    "iLO" e "DRAC" sono buoni indicatori che un sistema potrebbe eseguire
    il servizio Integrated Lights Out di HP, o iLO.
    
    </p> <p>
    
    <strong>Nota:</strong> Attualmente NON uso il metodo del ping
    broadcast (un modo molto rapido per sfrecciare attraverso la sottorete in cui
    ti trovi); semplicemente non ho dati sulla sua efficacia;
    anche se è molto veloce quando funziona, non mi è sembrato che
    consentisse il controllo e l'affidabilità delle scansioni arbitrarie.
    Due dei miei tre sistemi (Dell e HP) hanno risposto a un ping
    RMCP. Nessuno ha risposto a un ping broadcast di idiscover
    (ipmiutil discover). Tutti, invece, hanno risposto al mio strumento
    di audit Python qui sotto.
    
    </p> <p>
    
    Sfortunatamente (ovviamente!) lo spettro delle comunicazioni e delle
    reti entra in gioco - nmap dà un sacco di diverse ragioni
    sul perché una porta è aperta o no (open, closed, filtered, ecc.)
    Un'altra tabella ha una serie di pesi che dà più punti a una porta
    aperta che a un risultato "open|filtered" (come potrebbe dire Nmap).
    Interpretare nmap e i pesi è un po' frustrante,
    ma c'est la vie.
    
    </p> <p>
    
    Prendi tutti i pesi, somma tutti i punti e ottieni un livello di certezza
    IPMI. Nei test ad hoc ho scoperto che 15 punti o
    più sono forti indicatori che il sistema sta eseguendo IPMI.
    
    </p> <p>
    
    Attualmente ho varie soglie (no, forse, probabilmente,
    sì.) Nei test - senza avere accesso noto ad altri server
    oltre ai miei - sembra funzionare ragionevolmente bene. Cioè,
    le cose che ritengo sospette e il mio modello di pensiero
    di base sopra fa effettivamente emergere certi server e
    lascia stare gli host casuali. Ci sono alcuni veri problemi con
    i falsi positivi, però - molti firewall sembrano far credere a nmap che
    ci sia qualcosa su qualsiasi porta (ho pensato di aggiungere una porta rara
    o due (se ascolti qualcosa come la porta 1 e 31313,
    per esempio, probabilmente non la stai *davvero* ascoltando!)
    
    </p> <p>
    
    Ma non vuole essere l'ultima parola sull'argomento. Dovrebbe
    essere abbastanza semplice ottenere alcuni dati decenti sui banner IPMI; la mia
    ipotesi è che sarebbe di gran lunga il modo migliore per scansionare rapidamente grandi
    quantità di sistemi.
    

Ecco quattro programmi Perl per implementare quanto sopra; uno scansiona, uno interpreta e gli altri due servono per la pesatura. È uno strumento di ricerca o una prova di concetto, non uno scanner di produzione, ma produce comunque un output ragionevole.

REQUISITO: Nmap versione 6.

L'uso è abbastanza semplice, anche se un po' strano. Va eseguito come root. Verbose (-v) per un sacco di output.

root@kitploit:~
# standard run:
   ./ipmi_scan.pl -A -v -O yes  192.168.0.0/24
# fast
   ./ipmi_scan.pl -tcp -v 192.168.0.0/24
# kitchen sink
   ./ipmi_scan.pl -A -v -O high 192.168.0.0/24
La scansione creerà una coppia di file di risultati che corrispondono ai nomi dei target (le barre vengono convertite in underscore.) Basta eseguire il post-processore su di essi; passarli attraverso un ordinamento numerico inverso li mette in un ordine più interessante. Tutto ciò che supera 10 lo definirei sospetto, mentre oltre 20 è abbastanza certo che stia eseguendo IPMI.

In questo caso ho usato il flag terse (-t) per ridurre l'output al minimo indispensabile.

root@kitploit:~
./post_ipmi_scan.pl -t 192.168.0.0_24|sort -rn
96.3 192.168.0.69
16.25 192.168.0.46
10.8 192.168.0.23
7.33 192.168.0.202
5.4 192.168.0.189
5.4 192.168.0.179
1.7 192.168.0.9
1.23 192.168.0.1
1.1 192.168.0.8
0.9 192.168.0.251
0.63 192.168.0.55
0.43 silent/192.168.0.250
0.2 pi.fish2.com/192.168.0.14
0.2 fierce.fish2.com/192.168.0.6
0.2 192.168.0.88
0.01 192.168.0.16

Nei risultati sopra, i primi 3 sistemi stanno effettivamente eseguendo IPMI, ma solo l'HP ha detto a Nmap che la porta UDP 623 era aperta - il mio Dell e il SuperMicro hanno restituito la risposta più ambigua "open|filtered", che è abbastanza comunemente un falso allarme, bleah. Forse è meglio semplicemente rassegnarsi e fare il ping IPMI in parallelo con lo scanner (o scrivere un NSE per farlo correttamente in Nmap.)

Audit

Ecco un paio di piccoli programmi Python che - usando gli strumenti FreeIPMI - (a) acquisiscono la configurazione IPMI/BMC di base di un server e (b) fanno un piccolo controllo di sicurezza sui risultati.

Perché... beh, nessuna buona ragione, in realtà. Uno è in python3 e l' altro in python2. Immagino che stia testando la vostra prontezza. I programmi sono pesantemente commentati, specialmente ipmifreely.py, quindi controllatelo per maggiori dettagli su cosa succede. Richiede simplejson e ConfigParser, forse qualcos'altro.

DEVI ASSOLUTAMENTE avere FreeIPMI installato, cosa che, al momento in cui scrivo, azzera le possibilità di Mac e Windows di scaricare un bel file JSON da un server. E dovresti davvero, davvero avere una versione recente. Non dire che non ti avevo avvertito. Ma la vita va avanti.

L'acquisizione dei dati viene eseguita tramite un programma Python (I-check.py) che richiede credenziali valide per ottenere i dati. Converte i risultati in JSON, che a sua volta può essere controllato dallo strumento di audit (ipmifreely.py.) C'è una policy di esempio in "IPMI-policy.ini", dove ho inserito alcuni valori per i test.

I-check.py - acquisisce i dati di configurazione IPMI

Esempio di utilizzo:

root@kitploit:~
# this grabs the configuration stuff; here I'm using it on an HP iLO 3 server
# the output is redirected to a file
$ ./ipmifreely.py -v -u admin -p admin 192.168.0.46 > hp.json
# This takes the JSON file and looks for issues
$ ./I-check.py drac.json
./I-check.py hp.json 
Host:    192.168.0.46
[bmc-config]   Serial_Channel Non_Volatile_Enable_Pef_Alerting = No
[bmc-config]   Serial_Channel Volatile_Enable_Pef_Alerting  = No
[bmc-config]   Serial_Channel Volatile_Enable_Per_Message_Auth = No
[bmc-config]   Serial_Channel Non_Volatile_Enable_Per_Message_Auth   = No
[bmc-config]   Lan_Conf_Security_Keys  K_G   = 0x0000000000000000000000000000000000000000
[bmc-config]   SOL_Conf Force_SOL_Payload_Authentication = No
[bmc-config]   SOL_Conf Force_SOL_Payload_Encryption  = No
[bmc-config]   Lan_Conf_Auth  Callback_Enable_Auth_Type_None   = Yes
[bmc-config]   Lan_Conf_Auth  Operator_Enable_Auth_Type_None   = Yes
[bmc-config]   Lan_Conf_Auth  OEM_Enable_Auth_Type_None  = Yes
[bmc-config]   Lan_Conf_Auth  Admin_Enable_Auth_Type_None   = Yes
[bmc-config]   Lan_Conf_Auth  User_Enable_Auth_Type_None = Yes
[bmc-config]   Rmcpplus_Conf_Privilege Maximum_Privilege_Cipher_Suite_Id_1 = OEM_Proprietary
[bmc-config]   Rmcpplus_Conf_Privilege Maximum_Privilege_Cipher_Suite_Id_0 = OEM_Proprietary
[bmc-config]   Rmcpplus_Conf_Privilege Maximum_Privilege_Cipher_Suite_Id_2 = OEM_Proprietary
[pef-config]   Community_String  Community_String  = public
[pef-config]   PEF_Conf Enable_PEF_Event_Messages  = No

Puoi controllare alcune migliori pratiche di sicurezza IPMI per saperne di più su cosa controllare: cose che considero buone pratiche di sicurezza.

Scarica lo strumento
ipmi_scan.pl - scanner IPMI di base, usa Nmap e, se disponibile, ipmitool
ipmi_scan man page - man page per quanto sopra
post_ipmi_scan.pl - analizza l'output di cui sopra e restituisce alcuni risultati pesati
j_vendor.pl - Alcuni dati di base sui vendor... quale usa quali porte?
j_weights.pl - Alcuni pesi di base per vendor per quanto sopra
ipmifreely.py - analizza l'output di cui sopra e restituisce alcuni risultati
IPMI-policy.ini - file di policy IPMI