22 - Pentesting SSH/SFTP

Reading time: 13 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

SSH (Secure Shell of Secure Socket Shell) is 'n netwerkprotokol wat 'n veilige verbinding met 'n rekenaar oor 'n onveilige netwerk moontlik maak. Dit is noodsaaklik om die vertroulikheid en integriteit van data te handhaaf wanneer toegang tot afstandstelsels verkry word.

Standaard poort: 22

22/tcp open  ssh     syn-ack

SSH bedieners:

  • openSSH – OpenBSD SSH, verskaf in BSD, Linux verspreidings en Windows sedert Windows 10
  • Dropbear – SSH implementasie vir omgewings met lae geheue en verwerker hulpbronne, verskaf in OpenWrt
  • PuTTY – SSH implementasie vir Windows, die kliĂ«nt word algemeen gebruik maar die gebruik van die bediener is selde
  • CopSSH – implementasie van OpenSSH vir Windows

SSH biblioteke (wat bediener-kant implementeer):

  • libssh – multiplatform C biblioteek wat die SSHv2 protokol implementeer met bindings in Python, Perl en R; dit word deur KDE vir sftp en deur GitHub vir die git SSH infrastruktuur gebruik
  • wolfSSH – SSHv2 bediener biblioteek geskryf in ANSI C en gemik op ingebedde, RTOS, en hulpbron-beperkte omgewings
  • Apache MINA SSHD – Apache SSHD java biblioteek is gebaseer op Apache MINA
  • paramiko – Python SSHv2 protokol biblioteek

Enumerasie

bash
nc -vn <IP> 22

Geoutomatiseerde ssh-audit

ssh-audit is 'n hulpmiddel vir ssh bediener & kliënt konfigurasie oudit.

https://github.com/jtesta/ssh-audit is 'n opgedateerde fork van https://github.com/arthepsy/ssh-audit/

Kenmerke:

  • SSH1 en SSH2 protokol bediener ondersteuning;
  • analiseer SSH kliĂ«nt konfigurasie;
  • gryp banner, herken toestel of sagteware en bedryfstelsel, detecteer kompressie;
  • versamel sleutel-uitruil, gasheer-sleutel, enkripsie en boodskap verifikasiekode algoritmes;
  • voer algoritme-inligting uit (beskikbaar sedert, verwyder/uitgeskakel, onveilig/swak/oud, ens.);
  • voer algoritme-aanbevelings uit (voeg by of verwyder gebaseer op herkenbare sagteware weergawe);
  • voer sekuriteitsinligting uit (verwante probleme, toegewyde CVE lys, ens.);
  • analiseer SSH weergawe kompatibiliteit gebaseer op algoritme-inligting;
  • historiese inligting van OpenSSH, Dropbear SSH en libssh;
  • loop op Linux en Windows;
  • geen afhanklikhede
bash
usage: ssh-audit.py [-1246pbcnjvlt] <host>

-1,  --ssh1             force ssh version 1 only
-2,  --ssh2             force ssh version 2 only
-4,  --ipv4             enable IPv4 (order of precedence)
-6,  --ipv6             enable IPv6 (order of precedence)
-p,  --port=<port>      port to connect
-b,  --batch            batch output
-c,  --client-audit     starts a server on port 2222 to audit client
software config (use -p to change port;
use -t to change timeout)
-n,  --no-colors        disable colors
-j,  --json             JSON output
-v,  --verbose          verbose output
-l,  --level=<level>    minimum output level (info|warn|fail)
-t,  --timeout=<secs>   timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit <IP>

Dit in aksie sien (Asciinema)

Publieke SSH-sleutel van bediener

bash
ssh-keyscan -t rsa <IP> -p <PORT>

Swak Kodeer Algoritmes

Dit word standaard deur nmap ontdek. Maar jy kan ook sslcan of sslyze gebruik.

Nmap skripte

bash
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
nmap -p22 <ip> --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods

Shodan

  • ssh

Brute force gebruikersname, wagwoorde en privaat sleutels

Gebruikersnaam Enumerasie

In sommige weergawes van OpenSSH kan jy 'n tydsaanval maak om gebruikers te enumerate. Jy kan 'n metasploit-module gebruik om dit te benut:

msf> use scanner/ssh/ssh_enumusers

Brute force

Sommige algemene ssh geloofsbriewe hier en hier en hieronder.

Private Key Brute Force

As jy van sommige ssh private sleutels weet wat gebruik kan word... kom ons probeer dit. Jy kan die nmap skrip gebruik:

https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html

Of die MSF hulpmodule:

msf> use scanner/ssh/ssh_identify_pubkeys

Or gebruik ssh-keybrute.py (natuurlike python3, liggewig en het erfenis algoritmes geaktiveer): snowdroppe/ssh-keybrute.

Bekende slegte sleutels kan hier gevind word:

ssh-badkeys/authorized at master \xc2\xb7 rapid7/ssh-badkeys \xc2\xb7 GitHub

Swak SSH sleutels / Debian voorspelbare PRNG

Sommige stelsels het bekende foute in die random saad wat gebruik word om kriptografiese materiaal te genereer. Dit kan lei tot 'n dramaties verminderde sleutelruimte wat gebruteforced kan word. Voor-gegenerate stel sleutels wat op Debian stelsels wat deur swak PRNG geraak word, gegenereer is, is hier beskikbaar: g0tmi1k/debian-ssh.

Jy moet hier kyk om geldige sleutels vir die slagoffer masjien te soek.

Kerberos

crackmapexec wat die ssh protokol gebruik, kan die opsie --kerberos gebruik om te autentiseer via kerberos.
Vir meer inligting, voer crackmapexec ssh --help uit.

Standaard Kredensiale

VerskafferGebruikersnameWagwoorde
APCapc, toestelapc
Brocadeadminadmin123, wagwoord, brocade, fibranne
Ciscoadmin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladminadmin, Admin123, standaard, wagwoord, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, aanval, blender, changeme
Citrixroot, nsroot, nsmaint, vdiadmin, kvm, cli, adminC1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, publiek, rootadmin, wanscaler
D-Linkadmin, gebruikerprivaat, admin, gebruiker
Dellroot, gebruiker1, admin, vkernel, clicalvin, 123456, wagwoord, vkernel, Stor@ge!, admin
EMCadmin, root, sysadminEMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc
HP/3Comadmin, root, vcx, app, spvar, bestuur, hpsupport, opc_opadmin, wagwoord, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, toegang, konfig, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !bestuur, !admin
Huaweiadmin, root123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123
IBMUSERID, admin, bestuurder, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, stelsel, toestel, ufmcli, klantPASSW0RD, passw0rd, admin, wagwoord, Passw8rd, iadmin, apc, 123456, cust0mer
Junipernetscreennetscreen
NetAppadminnetapp123
Oracleroot, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2userchangeme, ilom-admin, ilom-operator, welcome1, oracle
VMwarevi-admin, root, hqadmin, vmware, adminvmware, vmw@re, hqadmin, standaard

SSH-MitM

As jy in die plaaslike netwerk is soos die slagoffer wat gaan aansluit by die SSH bediener met gebruikersnaam en wagwoord, kan jy probeer om 'n MitM-aanval uit te voer om daardie kredensiale te steel:

Aanvalspad:

  • Verkeersherleiding: Die aanvaller aflei die slagoffer se verkeer na hul masjien, wat effektief die verbinding poging na die SSH bediener afvang.
  • Afvang en Logboekhouding: Die aanvaller se masjien funksioneer as 'n proxy, vang die gebruiker se aanmeldbesonderhede op deur voor te gee om die wettige SSH bediener te wees.
  • Opdraguitvoering en Relay: Laastens, die aanvaller se bediener registreer die gebruiker se kredensiale, stuur die opdragte na die werklike SSH bediener, voert dit uit, en stuur die resultate terug na die gebruiker, wat die proses glad en wettig laat voorkom.

SSH MITM doen presies wat hierbo beskryf is.

Om die werklike MitM uit te voer, kan jy tegnieke soos ARP spoofing, DNS spoofing of ander wat in die Netwerk Spoofing aanvalle beskryf word, gebruik.

SSH-Snake

As jy 'n netwerk wil deurkruis met ontdekte SSH privaat sleutels op stelsels, wat elke privaat sleutel op elke stelsel vir nuwe gaste gebruik, dan is SSH-Snake wat jy nodig het.

SSH-Snake voer die volgende take outomaties en herhalend uit:

  1. Op die huidige stelsel, vind enige SSH privaat sleutels,
  2. Op die huidige stelsel, vind enige gaste of bestemmings (gebruiker@gas) wat die privaat sleutels mag aanvaar,
  3. Probeer om SSH in al die bestemmings in te gaan met al die ontdekte privaat sleutels,
  4. As 'n bestemming suksesvol gekoppel is, herhaal stappe #1 - #4 op die gekoppelde stelsel.

Dit is heeltemal self-repliserend en self-propagasies -- en heeltemal fileloos.

Konfig Misconfigurasies

Root aanmelding

Dit is algemeen dat SSH bedieners root gebruiker aanmelding standaard toelaat, wat 'n beduidende sekuriteitsrisiko inhou. Deaktiveer root aanmelding is 'n kritieke stap in die beveiliging van die bediener. Ongeoorloofde toegang met administratiewe regte en gebruteforceerde aanvalle kan verminder word deur hierdie verandering te maak.

Om Root Aanmelding in OpenSSH te Deaktiveer:

  1. Wysig die SSH konfigurasie lĂȘer met: sudoedit /etc/ssh/sshd_config
  2. Verander die instelling van #PermitRootLogin yes na PermitRootLogin no.
  3. Herlaai die konfigurasie met: sudo systemctl daemon-reload
  4. Herbegin die SSH bediener om veranderinge toe te pas: sudo systemctl restart sshd

SFTP Gebruteforce

SFTP opdraguitvoering

Daar is 'n algemene oorsig wat plaasvind met SFTP opstellings, waar administrateurs bedoel dat gebruikers lĂȘers moet uitruil sonder om afstandshell toegang te aktiveer. Ten spyte van die instelling van gebruikers met nie-interaktiewe shells (bv. /usr/bin/nologin) en hulle te beperk tot 'n spesifieke gids, bly 'n sekuriteitslek. Gebruikers kan hierdie beperkings omseil deur die uitvoering van 'n opdrag (soos /bin/bash) onmiddellik na aanmelding te vra, voordat hul aangewese nie-interaktiewe shell oorneem. Dit stel ongeoorloofde opdraguitvoering in staat, wat die beoogde sekuriteitsmaatreĂ«ls ondermyn.

Voorbeeld van hier:

bash
ssh -v noraj@192.168.1.94 id
...
Password:
debug1: Authentication succeeded (keyboard-interactive).
Authenticated to 192.168.1.94 ([192.168.1.94]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending command: id
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
uid=1000(noraj) gid=100(users) groups=100(users)
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2480 bytes, in 0.1 seconds
Bytes per second: sent 43133.4, received 44349.5
debug1: Exit status 0

$ ssh noraj@192.168.1.94 /bin/bash

Hier is 'n voorbeeld van 'n veilige SFTP-konfigurasie (/etc/ssh/sshd_config – openSSH) vir die gebruiker noraj:

Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no

Hierdie konfigurasie sal slegs SFTP toelaat: dit deaktiveer skulp toegang deur die beginopdrag af te dwing en deaktiveer TTY toegang, maar deaktiveer ook alle vorme van poort forwarding of tunneling.

SFTP Tunneling

As jy toegang tot 'n SFTP bediener het, kan jy ook jou verkeer deur hierdie tunneling, byvoorbeeld deur die algemene poort forwarding, stuur:

bash
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>

Die sftp het die opdrag "symlink". Daarom, as jy skryfrechte in 'n sekere gids het, kan jy symlinks van ander gidse/lĂȘers skep. Aangesien jy waarskynlik gevang is binne 'n chroot, sal dit nie spesiaal nuttig vir jou wees nie, maar, as jy die geskepte symlink van 'n no-chroot diens kan toegang (byvoorbeeld, as jy die symlink van die web kan toegang), kan jy die symlinked lĂȘers deur die web oopmaak.

Byvoorbeeld, om 'n symlink van 'n nuwe lĂȘer "froot" na "/" te skep:

bash
sftp> symlink / froot

As jy toegang tot die lĂȘer "froot" via die web kan kry, sal jy in staat wees om die wortel ("/") gids van die stelsel te lys.

Verifikasie metodes

In 'n hoë sekuriteit omgewing is dit 'n algemene praktyk om slegs sleutel-gebaseerde of twee-faktor verifikasie in te skakel eerder as die eenvoudige faktor wagwoord-gebaseerde verifikasie. Maar dikwels word die sterker verifikasie metodes geaktiveer sonder om die swakkeres te deaktiveer. 'n Gereelde geval is om publickey op openSSH-konfigurasie in te skakel en dit as die standaard metode in te stel, maar nie password te deaktiveer nie. So deur die uitgebreide modus van die SSH-kliënt te gebruik, kan 'n aanvaller sien dat 'n swakker metode geaktiveer is:

bash
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019
...
debug1: Authentications that can continue: publickey,password,keyboard-interactive

As 'n beperking op die aantal autentikasiefoute gestel is en jy nooit die kans kry om die wagwoordmetode te bereik nie, kan jy die PreferredAuthentications opsie gebruik om te dwing om hierdie metode te gebruik.

bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password

Die hersiening van die SSH-bediener konfigurasie is nodig om te kontroleer dat slegs verwagte metodes gemagtig is. Die gebruik van die uitgebreide modus op die kliënt kan help om die doeltreffendheid van die konfigurasie te sien.

Config files

bash
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

References

HackTricks Automatiese Opdragte

Protocol_Name: SSH
Port_Number: 22
Protocol_Description: Secure Shell Hardening

Entry_1:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 {IP} ssh

Entry_2:
Name: consolesless mfs enumeration
Description: SSH enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ssh/ssh_version; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use scanner/ssh/ssh_enumusers; set RHOSTS {IP}; set RPORT 22; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ssh/juniper_backdoor; set RHOSTS {IP}; set RPORT 22; run; exit'

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks