È possibile accedere a un server SSH con una sottorete non configurata correttamente?


18

Abbiamo un server in cui uno dei nostri ingegneri ha configurato male la sottorete e ora siamo bloccati fuori da questo server e l'unico accesso che conosco funzionerebbe è una console seriale di IDC (significa chiedere a un ingegnere IDC di aiutarci con questo) .

Cosa è stato configurato male:

address 192.168.1.9 # Original address there was
netmask 255.255.255.254 # Misconfigured, originally should've been .240

Per curiosità: c'è un modo per evitare di chiamare IDC e in qualche modo connettersi a questo host tramite SSH (quindi possiamo correggere la configurazione)?

Risposte:


25

Devi essere in grado di accedere a un altro host sullo stesso segmento di rete. Alcuni dei modi per ottenere l'accesso all'host non configurato correttamente richiedono root sull'host intermedio, ma esiste anche un modo semplice per ottenere l'accesso senza bisogno di root sull'host intermedio.

Il modo semplice per accedere all'host tramite IPv6

ssh -o ProxyCommand='ssh -W [fe80::42:ff:fe:42%%eth0]:%p user@intermediate-host' root@target-server

I seguenti valori di esempio in precedenza necessità comando necessari per essere sostituiti con valori corretti per il caso d'uso: fe80::42:ff:fe:42, eth0, user, intermediate-host, e target-server.

Spiegazione dettagliata di come funziona

ProxyCommandè una funzione ssh da utilizzare quando non è possibile aprire una connessione TCP direttamente all'host di destinazione. L'argomento ProxyCommandè un comando di cui utilizzare stdin / stdout anziché una connessione TCP.

-Wviene utilizzato per aprire un port forwarding singolo e collegarlo a stdin / stdout. Questo si adatta bene insieme a ProxyCommand.

fe80::42:ff:fe:42%%eth0è l'indirizzo del collegamento locale dell'host di destinazione. Si noti che a causa ProxyCommanddell'utilizzo %come carattere di escape, il comando ssh digitato deve utilizzare %%in quella posizione. Puoi trovare tutti gli indirizzi link-local sul segmento eseguendo ssh user@intermediate-host ping6 -nc2 ff02::1%eth0.

L'utilizzo di indirizzi IPv6 di collegamento locale a questo scopo è in genere il modo più semplice perché è abilitato per impostazione predefinita su tutti i sistemi moderni e gli indirizzi di collegamento locale continuano a funzionare anche se sia gli stack IPv4 che IPv6 sono gravemente configurati in modo errato.

Ritorno a IPv4

Se IPv6 è completamente disabilitato sull'host non configurato correttamente (assolutamente sconsigliato), potrebbe essere necessario ricorrere all'uso di IPv4. Dal momento che IPv4 non ha indirizzi link-local come fa IPv6, l'accesso all'host non configurato correttamente utilizzando IPv4 diventa più complicato e necessita dell'accesso root sull'host intermedio.

Se l'host non configurato correttamente fosse ancora in grado di utilizzare il suo gateway predefinito, sarà possibile accedervi dall'esterno. Probabilmente la maschera di rete non configurata correttamente ha anche rotto il gateway predefinito a causa dello stack che si rifiuta di utilizzare un gateway al di fuori del prefisso coperto dalla maschera di rete. In tal caso, l'host non configurato correttamente sarà in grado di comunicare solo con 192.168.1.8 perché è l'unico altro indirizzo IP nella sottorete attualmente accessibile a questo host configurato in modo errato.

Se hai un login su 192.168.1.8, potresti essere in grado di ssh da lì a 192.168.1.9. Se 192.168.1.8 non è attualmente assegnato, è possibile assegnarlo temporaneamente a qualsiasi host sul segmento su cui si dispone dell'accesso root.


E fe80::42:ff:fe:42l'indirizzo è di ...? il mio server configurato male suppongo?
Alexey Kamenskiy,

@AlexKey Sì, deve essere sostituito con l'indirizzo IPv6 link-local del server configurato in modo errato.
Kasperd,

1
Qualche esempio di accesso tramite IPv4 (nel caso di IPv6 è disabilitato)?
Alexey Kamenskiy,

@AlexKey Nel caso in cui IPv6 sia disabilitato, penso che si debba passare attraverso 192.168.1.8 perché sembra essere l'unico altro IP al di sotto del prefisso configurato.
Kasperd,

1
@Lenniey apparentemente per ragioni come questa domanda (almeno).
Alexey Kamenskiy,

9

kasperdha pubblicato un'ottima risposta abbastanza dettagliata da consentirmi di imparare a recuperare dalla situazione nella domanda. Questa risposta è l'esatta procedura dettagliata di come l'ho fatta.

  1. SSH sul server sulla stessa rete fisica
  2. Utilizzando arp -ao ip neighbor listcome roottrovare l'indirizzo MAC del server configurato in modo errato.
  3. Utilizzando MAC per il convertitore link-local trovare link-local per server configurato in modo errato
  4. Ora SSH può server come qualsiasi utente tramite ssh user@link-local%devdove:
    • utente - nome utente per il quale siamo autorizzati a SSH
    • link-local: indirizzo IPv6 assegnato automaticamente ripristinato al passaggio 3
    • dev è un'interfaccia fisica da cui questo server è raggiungibile (ad es. eth0)

2

È necessario caricare un indirizzo IP all'interno della sottorete configurata della destinazione, non solo nell'intervallo desiderato.

Se invii un pacchetto a 10.0.0.2 con sottorete 255.255.255.248 da, ad esempio, 10.0.0.220, 10.0.0.2 guarderà la sua maschera di sottorete per capire come rispondere. Poiché .220 è WAAY fuori dalla sottorete 255.255.255.248, invece .2 deve inviare la risposta al gateway predefinito.

Quindi, se è possibile caricare un indirizzo IP all'interno della stessa sottorete di .2, ad es. 10.0.0.3, quindi funzionerà.

Nel tuo caso specifico, per 10.0.0.9, la sottorete 255.255.255.254 ha solo 1 indirizzo IP aggiuntivo , vale a dire 10.0.0.8. Quindi, se puoi caricare quell'indirizzo IP, dovresti essere in grado di SSH.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.