¿Es posible encontrar los hosts en el archivo known_hosts?

115

Me gustaría ver qué hosts hay en mi archivo known_hosts, pero no parece ser legible para humanos. ¿Es posible leerlo?

Más específicamente, hay un host al que puedo conectarme a través de varios nombres y quiero saber cuál es la huella digital que espero de mi archivo de hosts conocido.

Actualización: estoy usando OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 mar 2009

Una línea de mi archivo known_hosts se parece a esto,

|1|guO7PbLLb5FWIpxNZHF03ESTTKg=|r002DA8L2JUYRVykUh7jcVUHeYE= ssh-rsa AAAAB3NzaC1yc2EAAFADAQABAAABAQDWp73ulfigmbbzif051okmDMh5yZt/DlZnsx3DEOYHu3Nu/+THJnUAfkfEc1XkOFiFgbUyK/08Ty0K6ExUaffb1ERfXXyyp63rpCTHOPonSrnK7adl7YoPDd4BcIUZd1Dk7HtuShMmuk4l83X623cr9exbfm+DRaeyFNMFSEkMzztBYIkhpA2DWlDkd90OfVAvyoOrJPxztmIZR82qu/5t2z58sJ6Jm2xdp2ckySgXulq6S4k+hnnGuz2p1klviYCWGJMZfyAB+V+MTjGGD/cj0SkL5v/sa/Fie1zcv1SLs466x3H0kMllz6gAk0/FMi7eULspwnIp65g45qUAL3Oj
Colin Newell
fuente
Si no tiene hash, puede usar: unix.stackexchange.com/questions/236192/…
Benjamin Goodacre

Respuestas:

135

Has HashKnownHostsconfigurado " yes" en tu ssh_configarchivo, por lo que los nombres de host no están disponibles en texto sin formato.

Si conoce el nombre de host que está buscando con anticipación, puede buscarlo con:

    ssh-keygen -H -F hostname

Aquí está la sección relevante de la ssh-keygen(1)página del manual:

 -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.
pdo
fuente
3
¿Hash hosts conocidos esencialmente significa que no es posible? Es decir, ¿necesito saber el nombre del host para ver su información?
Colin Newell
77
@ColinNewell Así es, necesita saber el nombre de host (s). Es una medida de seguridad para evitar que un atacante recopile nombres de host / direcciones IP de otras cajas que frecuenta si su máquina se ve comprometida.
pdo
1
No se asuste cuando no haya salida en absoluto, pero intente no con el nombre de host completo, sino con el nombre de host.
matemáticas
66
No sshd_config, sino ssh_config.
Fish Monitor
99
@pdo: su comando no siempre funciona. Si el host tiene SSH en un puerto que no sea 22, entonces el formato known_hostses diferente. Luego debe usar el siguiente comando: ssh-keygen -H -F [host.example.com]:2222
Martin Vegter
17

Para futuros buscadores, este artículo (sin descargo de responsabilidad: no estoy afiliado) tiene un script de Perl relativamente simple para forzar direcciones IP y nombres de host con fuerza bruta known_hosts.

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

Permite comenzar desde una dirección IP particular. También podría modificarse fácilmente para usar un diccionario.

Además, en junio de 2014, el proyecto John the Ripper agregó soporte para el craqueo de hosts conocidos , que puede aprovechar múltiples núcleos de CPU, GPU, administración de diccionarios, etc.

También puede usar este fragmento de nmap para generar un diccionario de todas las direcciones IP RFC1918 para usar como diccionario:

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
Royce Williams
fuente
1
También hay una implementación de Python con características similares, se puede encontrar en: blog.tremily.us/posts/known_hosts
Lars Nordin
Lars Nordin, gracias por el dato. Envié la información de Remily al equipo de John the Ripper, y agregaron apoyo para esto en sangrienta jumbo: openwall.com/lists/john-users/2014/07/02/2
Royce Williams
1
Y aquí está cómo hacerlo con hashcat: up1ink.tumblr.com/post/132370869368/…
Royce Williams el
4

No ssh-keygen -l -f ~/.ssh/known_hostsayudar? (Utilizando -vtambién obtienes bonitos mapas del tesoro, por ejemplo

+--[ RSA 2048]----+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+
sr_
fuente
2
No en el sentido más estricto, no, todo sigue siendo base64. La explicación de pdo de que está en hash sugiere que es una cosa unidireccional, así que supongo que estoy atascado a menos que sepa el nombre de host.
Colin Newell
Eso me ayudo. Lo que quería específicamente era una combinación. Para encontrar la huella digital ssh previamente verificada, puede ejecutar:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw
eh, ssh-keygen -l -F <hostname>es aún más simple
isaaclw
2

Hay una cadena / ip de host al principio de cada línea "hosts_hosts "(antes de la cadena" 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 [...] ==
Ouki
fuente
2
... y así awk '{print $1}' known_hostsfunciona el truco. Tenga en cuenta que los servidores que escuchan en puertos no estándar terminan como, por ejemplo, [some-server]:5555en known_hosts.
Sr_
3
Lamentablemente no en la mía. El mío se parece más a los datos codificados en base64. Los datos también están delimitados por tuberías en mi archivo.
Colin Newell
¿Qué software ssh estás usando entonces (suponíamos que estabas usando el software openssh casi estándar)?
Ouki
He agregado más detalles a mi pregunta.
Colin Newell
77
Según lo indicado por @pdo, su sshd como "HashKnownHosts" está activado, lo que puede parecer un poco anal, pero es una preocupación de seguridad. Y, por supuesto, no hay forma de revertir los hashes y obtener los nombres de host de sus "hosts_hosts ".
Ouki
2

Use la -lopción para ssh-keygenenumerar huellas digitales y la -Fopción de buscar un nombre de host en su known_hostsarchivo.

$ 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)

Puede usar ssh-keyscanpara comparar la huella digital en su known_hostscon la del servidor.

$ 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
xn.
fuente