È possibile scoprire gli host nel file known_hosts?


115

Vorrei vedere quali host sono nel mio file known_hosts ma non sembra essere leggibile dall'uomo. È possibile leggerlo?

Più specificamente c'è un host a cui posso collegarmi tramite diversi nomi e voglio scoprire quale impronta digitale mi aspetto dal mio file hosts noto.

Aggiornamento: sto usando OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 mar 2009

Una riga del mio file known_hosts è simile a questa,

|1|guO7PbLLb5FWIpxNZHF03ESTTKg=|r002DA8L2JUYRVykUh7jcVUHeYE= ssh-rsa AAAAB3NzaC1yc2EAAFADAQABAAABAQDWp73ulfigmbbzif051okmDMh5yZt/DlZnsx3DEOYHu3Nu/+THJnUAfkfEc1XkOFiFgbUyK/08Ty0K6ExUaffb1ERfXXyyp63rpCTHOPonSrnK7adl7YoPDd4BcIUZd1Dk7HtuShMmuk4l83X623cr9exbfm+DRaeyFNMFSEkMzztBYIkhpA2DWlDkd90OfVAvyoOrJPxztmIZR82qu/5t2z58sJ6Jm2xdp2ckySgXulq6S4k+hnnGuz2p1klviYCWGJMZfyAB+V+MTjGGD/cj0SkL5v/sa/Fie1zcv1SLs466x3H0kMllz6gAk0/FMi7eULspwnIp65g45qUAL3Oj

Risposte:


135

Sei stato HashKnownHostsimpostato su " yes" nel tuo ssh_configfile, quindi i nomi host non sono disponibili in testo normale.

Se conosci il nome host che stai cercando in anticipo, puoi cercarlo con:

    ssh-keygen -H -F hostname

Ecco la sezione pertinente dalla ssh-keygen(1)pagina man:

 -F hostname
         Search for the specified hostname in a known_hosts file, listing
         any occurrences found.  This option is useful to find hashed host
         names or addresses and may also be used in conjunction with the
         -H option to print found keys in a hashed format.

3
Gli host conosciuti con hash significano essenzialmente che non è possibile? cioè ho bisogno di sapere il nome dell'host per vedere le sue informazioni?
Colin Newell,

7
@ColinNewell Esatto, devi conoscere i nomi host. È una misura di sicurezza per impedire a un utente malintenzionato di raccogliere nomi host / indirizzi IP di altre caselle che frequenti in caso di compromissione della macchina.
DP

1
Non aver paura quando non c'è alcun output, ma prova non il nome host completo completo, ma il nome host.
matematica

6
Non sshd_config, ma ssh_config.
Fish Monitor,

9
@pdo - il tuo comando non funziona sempre. Se l'host ha SSH sulla porta diversa da 22, il formato in known_hostsè diverso. Quindi devi usare il seguente comando: ssh-keygen -H -F [host.example.com]:2222
Martin Vegter,

17

Per i futuri ricercatori, questo articolo (non disclaimer: non sono affiliato) ha uno script Perl relativamente semplice per forzare l'hashing di IP e nomi host known_hosts.

http://blog.rootshell.be/2010/11/03/bruteforcing-ssh-known_hosts-files/

Permette di partire da un determinato indirizzo IP. Potrebbe anche essere facilmente modificato per usare un dizionario.

Inoltre, a giugno 2014, il progetto John the Ripper ha aggiunto il supporto per il cracking known_hosts , che può trarre vantaggio da più core della CPU, GPU, modifica del dizionario, ecc.

Puoi anche utilizzare questo snippet nmap per generare un dizionario di tutti gli indirizzi IP RFC1918 da utilizzare come dizionario:

nmap -sL -Pn -n 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 |\
    grep '^Nmap scan report for' | cut -d\  -f5 >ips.list

1
Esiste anche un'implementazione di Python con funzionalità simili, disponibile su: blog.tremily.us/posts/known_hosts
Lars Nordin,

Lars Nordin, grazie per la punta. Ho inviato le informazioni di Remily al team di John lo Squartatore e hanno aggiunto il supporto per questo in bleeding-jumbo: openwall.com/lists/john-users/2014/07/02/2
Royce Williams

1
Ed ecco come farlo con hashcat: up1ink.tumblr.com/post/132370869368/…
Royce Williams,

4

Does ssh-keygen -l -f ~/.ssh/known_hostsaiutare? (Usandoti -vpuoi anche ottenere piccole belle mappe del tesoro, ad es

+--[ RSA 2048]----+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+

2
Non nel senso più stretto no, è ancora tutto base64. la spiegazione di pdo del fatto che sia hash ha suggerito che è una cosa a senso unico, quindi credo di essere bloccato a meno che non conosca il nome host.
Colin Newell,

Questo mi ha aiutato. Quello che volevo specificamente era una combinazione. Per trovare l'impronta digitale ssh precedentemente verificata, è possibile eseguire:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw il

uh, ssh-keygen -l -F <hostname>è ancora più semplice
isaaclw,

2

C'è una stringa host / ip all'inizio di ogni riga "known_hosts" (prima della stringa "ssh-dss" o "ssh-rsa"):

hostgn6 ssh-dss AAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExIThOj3Yexynu+wSRGjMm4GfF+og2kAljZyUjhBFeM+WYbJzcDSDB [...] ==
yumyumn6.dik6.dir2g.some.net ssh-dss AAAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExITh [...] ==

2
... e così awk '{print $1}' known_hostsfa il trucco. Tenere presente che i server in ascolto su porte non standard finiscono come, diciamo, [some-server]:5555in known_hosts.
sabato

3
Purtroppo non nel mio. Il mio assomiglia di più ai dati codificati in base64. I dati sono anche delimitati da pipe nel mio file.
Colin Newell,

Quale software ssh stai usando allora (supponevamo che stavi usando il software openssh quasi standard)?
Ouki,

Ho aggiunto ulteriori dettagli alla mia domanda.
Colin Newell,

7
Come affermato da @pdo, il tuo sshd come "HashKnownHosts" è impostato su on, che può apparire un po 'anale, ma lo è per motivi di sicurezza. E ovviamente non c'è modo di invertire semplicemente gli hash e ottenere i nomi host dai tuoi "host_stati".
Ouki,

2

Utilizzare l' -lopzione per ssh-keygenelencare le impronte digitali e l' -Fopzione per cercare un nome host nel known_hostsfile.

$ ssh-keygen -l -F sdf.org
# Host sdf.org found: line 835 type RSA
2048 6e:cd:53:4f:75:a1:e8:5b:63:74:32:4f:0c:85:05:17 |1|9J47PEllvWk/HJ6LPz5pOB2/7rc=|ld0BtQh5V3NdhBHBwR/ZqSv8bqY= (RSA)

È possibile utilizzare ssh-keyscanper confrontare l'impronta digitale nella propria known_hostscon quella dal server.

$ ssh-keyscan sdf.org | awk '{print $3}' | base64 -d | openssl md5 -c
# sdf.org SSH-2.0-OpenSSH_7.1
# sdf.org SSH-2.0-OpenSSH_7.1
no hostkey alg
(stdin)= 6e:cd:53:4f:75:a1:e8:5b:63:74:32:4f:0c:85:05:17
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.