Questa è la porta MIPS che è presente nei dispositivi SerComm, router e gateway domestici (Linksys, Netgear, Cisco) utilizzati per gli aggiornamenti del firmware.
Questo è gestito da un scfgmgr
processo in ascolto sulla porta 32764.
Quando si accede tramite telnet, i dati preceduti da ScMM
o MMcS
(a seconda dell'endianità del sistema) sembrano essere restituiti.
È un protocollo binario molto semplice con intestazione (byte 0xC) seguito da un payload.
Struttura dell'intestazione:
typedef struct scfgmgr_header_s {
unsigned long magic;
int cmd;
unsigned long len;
} scfgmgr_header;
Questo si basa su fonti Cisco GPL (ad es. Wap4410n_v2.0.1.0_gpl.tgz su ftp-eng.cisco.com disattivato).
Per informazioni effettive, vedere la descrizione di elvanderb e il codice Python di esempio .
Attualmente è famoso per l'overflow del buffer basato su heap che può darti pieno accesso al dispositivo ( una backdoor ). Questo è stato scoperto da Eloi Vanderbeken nel Natale 2013, tuttavia è stato probabilmente conosciuto dagli hacker cinesi nel 2008 ( file cgi ).
Ecco come funziona.
Overflow del buffer basato su heap:
messaggi:
Quindi l'uso di un semplice messaggio traboccante può fornire molti dettagli interessanti:
Tuttavia, ciò potrebbe causare il ripristino della configurazione, quindi non farlo a casa.
Ecco alcuni comandi invertiti eseguiti dal router eseguiti tramite questa porta.
nvram
- Configurazione del dump.
get var
- Ottieni la configurazione var
possibile overflow del buffer basato su stack (se la variabile è controllata dall'utente)
set var
- Imposta la configurazione var
buffer overflow basato su stack, buffer di output (dimensione ≈ 0x10000) è nello stack.
commit nvram
- Leggi nvram / dev / mtdblock / 3 da / tmp / nvram e controlla CRC
imposta nvram (/ dev / mtdblock / 3) da / tmp / nvram; controlla CRC
Imposta la modalità bridge su ON (non sono sicuro, non ho avuto il tempo di testarlo)
nvram_set(“wan_mode”, bridgedonly)
nvram_set(“wan_encap”, 0)
nvram_set(“wan_vpi”, 8)
nvram_set(“wan_vci”, 81)
system(“/usr/bin/killall br2684ctl”)
system(“/usr/bin/killall udhcpd”)
system(“/usr/bin/killall -9 atm_monitor”)
system(“/usr/sbin/rc wan stop >/dev/null 2>&1”)
system(“/usr/sbin/atm_monitor&”)
Mostra la velocità misurata di Internet (download / upload)
cmd (sì, è una shell ...)
comandi speciali:
- esci, ciao, esci -> esci ... (vivo = 0)
- cd: cambia directory (un po 'WTF)
altri comandi:
- overflow intero nella gestione stdout (?) non sfruttabile ma comunque ...
- buffer overflow sull'output cmd (di nuovo lo stesso buffer) ...
scrivi file
- nome del file nel payload
- root dir = / tmp
- l'attraversamento della directory potrebbe essere possibile (non testato ma è un open (sprintf (“/ tmp /% s”, payload)) ...)
versione di ritorno
restituire il modem router ip
- nvram_get ( “lan_ipaddr”)
ripristina le impostazioni di default
- nvram_set (“restore_default”, 1)
- nvram_commit
read / dev / mtdblock / 0 [-4: -2]
- non so cosa sia, non ho avuto il tempo di provarlo
dump nvram su disco (/ tmp / nvram) e commit
Fonte: (presentazione) Come Linksys mi ha salvato il Natale!
Normalmente quel tipo di porte dovrebbe essere ufficialmente da IANA .
Questo è ciò che unSpawn ha risposto a LinuxQuestions nel 2007 in relazione a questa porta:
Se è una porta assegnata ufficialmente da IANA (con un numero compreso tra 0 e circa 30000), il suo numero dovrebbe corrispondere a un servizio in / etc / services ("numero di servizi getent"), il file dei servizi di uno scanner come Nmap o online database come Sans 'ISC.
Si noti che l'utilizzo della porta effimera può essere configurato localmente utilizzando il /proc/sys/net/ipv4/ip_local_port_range
sysctl
. Un vecchio valore predefinito era 1024-5000, per i server viene utilizzato un valore di 32768-61000 e alcune applicazioni richiedono qualcosa come 1025-65535.
Nota anche che si tratta di mappature statiche da numero a servizio e mentre per esempio / etc / services dirà TCP/22
corrispondenze SSH che non devono essere il caso in una situazione particolare,
Altrimenti se si tratta di una porta per la quale non si conosce quale processo è stato associato ad esso, se si ha accesso all'host è possibile interrogarlo utilizzando netstat -anp
, lsof -w -n -i protocol:portnumber
oppure fuser -n protocol portnumber
. Questo è il metodo più accurato,
Altrimenti, se non si ha accesso all'host, è possibile interrogarlo, ad esempio, tramite telnet. Questo non è un metodo accurato e nel caso di un host compromesso potresti avvisare l'intruso che stai affrontando.
Guarda anche: