Puncte:9

Cum pot să știu dacă serverul SSH care rulează curent este OpenSSH sau Dropbear?

drapel in

Dacă intru în dosar /etc/ssh/ssh_config, pot vedea „$OpenBSD” în partea de sus a fișierului. Cu toate acestea, dacă schimb portul implicit la o valoare diferită, nu pare să funcționeze. Un coleg m-a informat că pentru că Dropbear este serverul de software aici, nu OpenSSH.

Există vreo modalitate de a fi sigur? Nu găsesc un răspuns pe google.

eckes avatar
drapel cn
Puteți utiliza netstat sau ss cu opțiunea -p pentru a vedea PID-ul și apoi puteți verifica procesul de rulare pentru calea și linia de comandă.
Puncte:24
drapel cz

Conectați-vă la portul ssh (de exemplu, 22) și inspectați bannerul.

$ nc 10.0.0.10 22
SSH-2.0-OpenSSH_8.6
Mark avatar
drapel tz
În interesul completității, bannerul Dropbear începe cu „SSH-2.0-dropbear”.
TooTea avatar
drapel in
Pentru cei care nu au chef să se joace cu o conexiune brută, aceleași informații pot fi extrase conectându-se cu `ssh -v localhost` și căutând `remote software version dropbear` sau `remote software version OpenSSH_something`.
Puncte:6
drapel rs

Majoritatea (dacă nu toate?) serverele SSH trimit un fel de șir de versiuni imediat după conectare. Într-un mic proiect de cercetare de-al meu, am încercat să mapez versiunea serverului SSH într-un spațiu IPv4 mare și ceea ce am făcut a fost practic port adresa nc.

L-am introdus într-un script perl cu un timeout pentru o procesare mai ușoară din partea mea, precum și un timeout opțional cu o valoare implicită:

#!/usr/bin/perl
folosiți avertismente;
folosiți strict;

exceptând cazul în care ($ARGV[0] && $ARGV[1]) { die „Utilizare: ./raw nume de gazdă port [timeout]\n” }
my $timeout = '10s';
dacă ($ARGV[2]) { $timeout = $ARGV[2] }

my $response = `timeout $timeout nc $ARGV[0] $ARGV[1]`;
imprimă $răspuns;

Testarea acestuia pe un server din rețeaua mea:

./sshbanner.pl 172.16.16.11 22
SSH-2.0-OpenSSH_5.3
Patrick Mevzek avatar
drapel cn
„Majoritatea (dacă nu toate?) serverele SSH trimit un fel de șir de versiuni imediat după conectare.” Deoarece este obligatoriu conform standardului, a se vedea §4.2 din RFC 4253: „Când conexiunea a fost stabilită, ambele părți TREBUIE să trimită un șir de identificare.". Un software care nu face acest lucru nu implementează SSH în mod corespunzător (și nu va reuși să interacționeze cu alte instrumente care vorbesc SSH cel mai probabil)
drapel cn
@PatrickMevzek Trebuie să trimiteți niște șir, dar cred că un șir aleator sau gol ar funcționa și nu ar putea identifica prea multe.
Patrick Mevzek avatar
drapel cn
@PaÅloEbermann „Trebuie să trimiți niște șir” da, așa spune standardul și am citat RFC. Deci "dacă nu toate?" ca răspuns este redundant/inutil. Orice server SSH care nu trimite acest lucru (nimic), NU implementează protocolul SSH
Patrick Mevzek avatar
drapel cn
@SnakeDoc Doar pentru că Perl nu este absolut necesar aici, puteți rula comanda internă `timeout ...` direct în shell-ul dvs., Perl nu adaugă nimic acolo (dar dacă mulțumește utilizatorului, nu este cu adevărat o problemă. .. `Utilizare`, totuși, nu se potrivește cu exemplul dat :-)), și aș sfătui întotdeauna să NU plătiți din Perl (sau orice altă limbă), mai ales dacă plătiți pentru a face lucruri pe care limba le poate face nativ/prin biblioteci.Perl are `Net::Socket` care ar fi modalitatea corectă de a face `nc` și, de asemenea, are tot ce este necesar pentru a implementa timeout-uri.
drapel pn
Pentru a extinde comentariul lui @PatrickMevzek, RFC afirmă că șirul de identificare va avea forma „SSH-protoversion-softwareversion SP comments CR LF” unde protoversiunea este „2.0” și numai comentariile sunt opționale. - Acum, deoarece sunt open-source și cineva ar putea teoretic să construiască OpenSSH cu un ID DropBear, nu puteți fi 100% sigur prin aceasta, dar asta ar fi modalitatea de a paria!
drapel us
bash are tot ce ai nevoie `citește a
Puncte:3
drapel cn

Dacă sunteți pe server, uitați-vă la procesul atașat la portul de rețea unde ssh Este de așteptat (22 sau altceva).

Poți să folosești netstat sau ss pentru asta. Apoi veți putea găsi linia de comandă completă a serverului care rulează, care poate fi suficientă pentru a-l identifica sau puteți utiliza alte opțiuni:

  • alergare siruri de caractere pe acesta este într-adevăr ultimul curs de acțiuni, dar poate da rezultate (cu siguranță veți găsi înapoi și șirul care este raportat de server de la distanță, așa cum arată alte răspunsuri)
  • puteți găsi fișierele deschise pe care le are procesul (căutați în /proc/$PID/fd) care poate oferi fie o legătură către un fișier de configurare, fie un fișier jurnal și, în mod ideal, fișierul jurnal ar oferi suficiente informații pentru a identifica ce proces este acesta.

Sau, în funcție de sistemul și configurația dvs., de exemplu, puteți utiliza listă-unități systemctl pentru a vedea exact ce rulează în prezent și care este ssh server (apoi prin inspectare systemd unitate, veți vedea ce linie de comandă este și alte informații)

Dacă sunteți extern la server, atunci vedeți alte răspunsuri, dar nu există nicio garanție că a fost returnat de la serverul de la distanță este adevărul, se poate afișa ca orice dorește.

O altă opțiune de la distanță ar fi să faci niște „amprentare SSH”.Nu am văzut asta direct, dar sunt sigur că există. Practic, prin testarea diferitelor tipuri de conexiuni, se pot determina unele informații din partea de la distanță, pe lângă ceea ce pretinde a fi. Presupun că mai multe scanere de vulnerabilități au astfel de lucruri.

Puncte:1
drapel cn

Poți să folosești ps pentru a obține lista proceselor și grep ieșirea pentru sshd.
Cu aceasta, veți obține calea către binarul executabil {{ de ex /usr/sbin/sshd sau ceva de genul ăsta }}.
Apoi puteți executa acest binar cu -? pentru a obține ajutor și informații despre utilizare. Această ieșire va conține Numele definitiv al pachetului {{ de exemplu OpenSSH sau Dropbear sau ceva de genul }}.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.