Czy można znaleźć hosty w pliku znane_hosty?

115

Chciałbym zobaczyć, jakie hosty znajdują się w moim pliku znane_hosty, ale wydaje się, że nie jest czytelny dla człowieka. Czy można to przeczytać?

Mówiąc dokładniej, istnieje host, z którym mogę się połączyć za pomocą kilku nazw i chcę dowiedzieć się, jakiego odcisku palca oczekuję od mojego znanego pliku hosts.

Aktualizacja: Używam OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 marca 2009

Linia z mojego pliku znane_hosty wygląda mniej więcej tak:

|1|guO7PbLLb5FWIpxNZHF03ESTTKg=|r002DA8L2JUYRVykUh7jcVUHeYE= ssh-rsa AAAAB3NzaC1yc2EAAFADAQABAAABAQDWp73ulfigmbbzif051okmDMh5yZt/DlZnsx3DEOYHu3Nu/+THJnUAfkfEc1XkOFiFgbUyK/08Ty0K6ExUaffb1ERfXXyyp63rpCTHOPonSrnK7adl7YoPDd4BcIUZd1Dk7HtuShMmuk4l83X623cr9exbfm+DRaeyFNMFSEkMzztBYIkhpA2DWlDkd90OfVAvyoOrJPxztmIZR82qu/5t2z58sJ6Jm2xdp2ckySgXulq6S4k+hnnGuz2p1klviYCWGJMZfyAB+V+MTjGGD/cj0SkL5v/sa/Fie1zcv1SLs466x3H0kMllz6gAk0/FMi7eULspwnIp65g45qUAL3Oj
Colin Newell
źródło
Jeśli nie jest mieszany, możesz użyć: unix.stackexchange.com/questions/236192/...
Benjamin Goodacre

Odpowiedzi:

134

W pliku HashKnownHostsustawiono „ yesssh_config, więc nazwy hostów nie są dostępne w postaci zwykłego tekstu.

Jeśli znasz nazwę hosta, którego szukasz z wyprzedzeniem, możesz wyszukać ją za pomocą:

    ssh-keygen -H -F hostname

Oto odpowiednia sekcja ze strony podręcznika ssh-keygen(1):

 -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
źródło
3
Czy znane hashujące hosty zasadniczo oznaczają, że nie jest to możliwe? tzn. muszę znać nazwę hosta, aby zobaczyć jego informacje?
Colin Newell,
7
@ColinNewell Zgadza się, musisz znać nazwy hostów. Jest to środek bezpieczeństwa, aby powstrzymać atakującego przed zbieraniem nazw hostów / adresów IP innych skrzynek, które często odwiedzasz w przypadku naruszenia bezpieczeństwa komputera.
pdo
1
Nie bój się, gdy w ogóle nie ma danych wyjściowych, ale spróbuj zamiast pełnej nazwy hosta zamiast nazwy hosta.
matematyka
6
Nie sshd_config, ale ssh_config.
Fish Monitor
9
@pdo - twoje polecenie nie zawsze działa. Jeśli host ma SSH na porcie innym niż 22, wówczas format w known_hostsjest inny. Następnie musisz użyć następującego polecenia: ssh-keygen -H -F [host.example.com]:2222
Martin Vegter
17

Dla przyszłych poszukiwaczy ten artykuł (nie zrzeczenie się odpowiedzialności: nie jestem afilowany) zawiera stosunkowo prosty skrypt Perla do brutalnego wymuszania adresów IP i nazw hostów known_hosts.

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

Umożliwia rozpoczęcie od określonego adresu IP. Można go również łatwo zmodyfikować, aby używał słownika.

Ponadto w czerwcu 2014 r. Projekt John the Ripper dodał obsługę crackowania znanych hostów, która może korzystać z wielu rdzeni procesora, procesorów graficznych, manipulacji słownikami itp.

Możesz także użyć tego fragmentu nmap, aby wygenerować słownik wszystkich adresów IP RFC1918, który będzie używany jako słownik:

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
źródło
1
Istnieje również implementacja Pythona z podobnymi funkcjami, można znaleźć na stronie: blog.tremily.us/posts/known_hosts
Lars Nordin
Lars Nordin, dzięki za wskazówkę. Przesłałem informacje Remily do zespołu Johna Rozpruwacza, a oni dodali wsparcie dla tego w bleeding-jumbo: openwall.com/lists/john-users/2014/07/02/2
Royce Williams
1
A oto jak to zrobić za pomocą hashcat: up1ink.tumblr.com/post/132370869368/...
Royce Williams
4

Czy ssh-keygen -l -f ~/.ssh/known_hostspomaga (Korzystając z -vciebie otrzymujesz również ładne małe mapy skarbów, np

+--[ RSA 2048]----+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+
sr_
źródło
2
Nie w najściślejszym sensie nie, to wszystko wciąż jest base64. Wyjaśnienie pdo tego, że jest mieszane, sugeruje, że jest to jedna rzecz, więc myślę, że utknąłem, chyba że znam nazwę hosta.
Colin Newell,
To mi pomogło. To, czego konkretnie chciałem, to połączenie. Aby znaleźć wcześniej zweryfikowany odcisk palca ssh, możesz uruchomić:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw
uh, ssh-keygen -l -F <hostname>jest jeszcze
prostsze
2

Na początku każdej linii „znane_ hosty” znajduje się ciąg hosta / ip (przed ciągiem „ssh-dss” lub „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
źródło
2
... i tak awk '{print $1}' known_hostsrobi sztuczka. Należy pamiętać, że serwery nasłuchujące na niestandardowych portach kończą się jako, powiedzmy, [some-server]:5555w known_hosts.
sr_
3
Niestety nie w moim. Mój wygląda bardziej jak dane zakodowane w standardzie base64. Dane są również rozdzielane potokami w moim pliku.
Colin Newell,
Z jakiego oprogramowania ssh wtedy korzystasz (zakładaliśmy, że używasz prawie standardowego oprogramowania openssh)?
Ouki,
Dodałem więcej szczegółów do mojego pytania.
Colin Newell,
7
Jak stwierdził @pdo, twój sshd jako „HashKnownHosts” jest włączony, co może wydawać się nieco analne, ale dotyczy bezpieczeństwa. Oczywiście nie ma sposobu, aby po prostu odwrócić skróty i uzyskać nazwy hostów z „znanych_hostów”.
Ouki,
2

Użyj -lopcji, aby ssh-keygenwyświetlić listę odcisków palców, oraz -Fopcji wyszukiwania nazwy hosta w known_hostspliku.

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

Możesz użyć ssh-keyscando porównania odcisku palca w twoim z odciskiem known_hostsz serwera.

$ 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.
źródło