hacktricks/network-services-pentesting/pentesting-ssh.md

22 KiB
Raw Blame History

22 - Pentesting SSH/SFTP

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Bug bounty savet: registrujte se za Intigriti, premium platformu za bug bounty kreiranu od hakera, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Osnovne informacije

SSH (Secure Shell ili Secure Socket Shell) je mrežni protokol koji omogućava sigurnu vezu sa računarom preko nesigurne mreže. Neophodan je za održavanje poverljivosti i integriteta podataka prilikom pristupa udaljenim sistemima.

Podrazumevani port: 22

22/tcp open  ssh     syn-ack

SSH serveri:

  • openSSH OpenBSD SSH, isporučen u BSD, Linux distribucijama i Windows-u od Windows 10
  • Dropbear Implementacija SSH-a za okruženja sa malom memorijom i procesorskim resursima, isporučena u OpenWrt-u
  • PuTTY Implementacija SSH-a za Windows, klijent se često koristi, ali je upotreba servera ređa
  • CopSSH Implementacija OpenSSH-a za Windows

SSH biblioteke (implementacija na serverskoj strani):

  • libssh Višepatformska C biblioteka koja implementira SSHv2 protokol sa vezama u Python-u, Perl-u i R-u; koristi je KDE za sftp i GitHub za git SSH infrastrukturu
  • wolfSSH SSHv2 serverska biblioteka napisana u ANSI C i namenjena za ugrađene sisteme, RTOS, i okruženja sa ograničenim resursima
  • Apache MINA SSHD Apache SSHD java biblioteka zasnovana na Apache MINA-i
  • paramiko Python SSHv2 protokolna biblioteka

Enumeracija

Preuzimanje banera

nc -vn <IP> 22

Automatizovana ssh-audit

ssh-audit je alat za proveru konfiguracije ssh servera i klijenata.

https://github.com/jtesta/ssh-audit je ažurirana izdanica sa https://github.com/arthepsy/ssh-audit/

Funkcionalnosti:

  • Podrška za SSH1 i SSH2 protokole servera;
  • analiza konfiguracije SSH klijenta;
  • prikupljanje banera, prepoznavanje uređaja ili softvera i operativnog sistema, otkrivanje kompresije;
  • prikupljanje algoritama razmene ključeva, host-ključeva, enkripcije i algoritama za kod autentikacije poruka;
  • informacije o algoritmima (dostupno od kada, uklonjeno/onemogućeno, nesigurno/slabo/zastarelo, itd);
  • preporuke za algoritme (dodavanje ili uklanjanje na osnovu prepoznate verzije softvera);
  • informacije o bezbednosti (povezani problemi, dodeljena lista CVE, itd);
  • analiza kompatibilnosti verzije SSH na osnovu informacija o algoritmima;
  • istorijske informacije iz OpenSSH, Dropbear SSH i libssh;
  • radi na Linuxu i Windowsu;
  • nema zavisnosti.
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>

Javni SSH ključ servera

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

Slabi kriptografski algoritmi

Ovo se podrazumevano otkriva pomoću nmap-a. Ali možete koristiti i sslcan ili sslyze.

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 usernames, passwords and private keys

Enumeracija korisničkih imena

U nekim verzijama OpenSSH-a možete izvršiti napad vremenskim usklađivanjem kako biste enumerisali korisnike. Možete koristiti metasploit modul kako biste iskoristili ovo:

msf> use scanner/ssh/ssh_enumusers

Brute force

Neke uobičajene ssh akreditacije ovde i ovde i ispod.

Brute Force Napad na Privatni Ključ

Ako znate neke ssh privatne ključeve koji bi mogli biti korišćeni... pokušajmo. Možete koristiti nmap skriptu:

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

Ili MSF pomoćni modul:

msf> use scanner/ssh/ssh_identify_pubkeys

Ili koristite ssh-keybrute.py (nativan python3, lagan i podržava zastarele algoritme): snowdroppe/ssh-keybrute.

Poznati loši ključevi mogu se pronaći ovde:

{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}

Slabi SSH ključevi / Debian predvidljiv PRNG

Neke sisteme karakteriše poznata greška u slučajnom semenu koje se koristi za generisanje kriptografskog materijala. To može rezultirati dramatično smanjenim prostorom ključeva koji mogu biti probijeni. Pre-generisani setovi ključeva generisanih na Debian sistemima pogođenim slabim PRNG-om dostupni su ovde: g0tmi1k/debian-ssh.

Treba da pogledate ovde kako biste tražili validne ključeve za žrtveni računar.

Kerberos

crackmapexec koristeći ssh protokol može koristiti opciju --kerberos za autentifikaciju putem kerberosa.
Za više informacija pokrenite crackmapexec ssh --help.

Podrazumevane akreditacije

Proizvođač Korisnička imena Lozinke
APC apc, uređaj apc
Brocade admin admin123, password, brocade, fibranne
Cisco admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin admin, Admin123, podrazumevano, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme
Citrix root, nsroot, nsmaint, vdiadmin, kvm, cli, admin C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler
D-Link admin, korisnik privatno, admin, korisnik
Dell root, user1, admin, vkernel, cli calvin, 123456, password, vkernel, Stor@ge!, admin
EMC admin, root, sysadmin EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc
HP/3Com admin, root, vcx, app, spvar, manage, hpsupport, opc_op admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin
Huawei admin, root 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123
IBM USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer
Juniper netscreen netscreen
NetApp admin netapp123
Oracle root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user changeme, ilom-admin, ilom-operator, welcome1, oracle
VMware vi-admin, root, hqadmin, vmware, admin vmware, vmw@re, hqadmin, podrazumevano

SSH-MitM

Ako se nalazite u lokalnoj mreži kao žrtva koja će se povezati na SSH server koristeći korisničko ime i lozinku, možete izvesti MitM napad da ukradete te akreditacije:

Put napada:

  • Preusmeravanje saobraćaja: Napadač preusmerava žrtvin saobraćaj ka svojoj mašini, efikasno interceptujući pokušaj povezivanja na SSH server.
  • Interceptovanje i beleženje: Mašina napadača deluje kao proxy, hvatajući korisnikove prijavne detalje pretvarajući se da je legitimni SSH server.
  • Izvršavanje komandi i prosleđivanje: Na kraju, server napadača beleži korisnikove akreditacije, prosleđuje komande pravom SSH serveru, izvršava ih i šalje rezultate korisniku, čineći proces izgleda neprekidno i legitimno.

SSH MITM upravo radi ono što je opisano gore.

Da biste izveli stvarni MitM napad, možete koristiti tehnike poput ARP spoofinga, DNS spoofinga ili drugih opisanih u Napadima na mrežno falsifikovanje.

SSH-Snake

Ako želite da pretrčavate mrežu koristeći otkrivene privatne SSH ključeve na sistemima, koristeći svaki privatni ključ na svakom sistemu za nove hostove, onda vam je potreban SSH-Snake.

SSH-Snake automatski i rekurzivno obavlja sledeće zadatke:

  1. Na trenutnom sistemu, pronađite bilo koje privatne SSH ključeve,
  2. Na trenutnom sistemu, pronađite bilo koje hostove ili destinacije (korisnik@host) na koje bi privatni ključevi mogli biti prihvaćeni,
  3. Pokušajte da se SSH povežete na sve destinacije koristeći sve otkrivene privatne ključeve,
  4. Ako je destinacija uspešno povezana, ponovite korake #1 - #4 na povezanom sistemu.

Potpuno je samoreplikativan i samopropagirajući - i potpuno bez datoteka.

Konfiguracijske greške

Root prijava

Često je da SSH serveri dozvoljavaju prijavu korisnika root podrazumevano, što predstavlja značajan sigurnosni rizik. Onemogućavanje root prijave je ključni korak u obezbeđivanju servera. Neovlašćen pristup sa administratorskim privilegijama i napadi grubom silom mogu se umanjiti ovom promenom.

Da biste onemogućili root prijavu u OpenSSH:

  1. Uredite SSH konfiguracionu datoteku sa: sudoedit /etc/ssh/sshd_config
  2. Promenite postavku sa #PermitRootLogin yes na PermitRootLogin no.
  3. Ponovo učitajte konfiguraciju koristeći: sudo systemctl daemon-reload
  4. Restartujte SSH server da biste primenili promene: sudo systemctl restart sshd

SFTP Grubom silom

Izvršavanje komandi putem SFTP-a

Postoji česta greška u postavkama SFTP-a, gde administratori nameravaju da korisnici razmenjuju fajlove bez omogućavanja udaljenog pristupa ljusci. Uprkos postavljanju korisnika sa neinteraktivnim ljuskama (npr. /usr/bin/nologin) i ograničavanjem ih na određeni direktorijum, ostaje sigurnosna rupa. Korisnici mogu zaobići ove restrikcije tražeći izvršavanje komande (kao što je /bin/bash) odmah nakon prijavljivanja, pre nego što njihova određena neinteraktivna ljuska preuzme kontrolu. To omogućava neovlašćeno izvršavanje komandi, podrivajući namenjene sigurnosne mere.

Primer odavde:

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

Evo primera sigurne SFTP konfiguracije (/etc/ssh/sshd_config - openSSH) za korisnika noraj:

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

Ova konfiguracija će dozvoliti samo SFTP: onemogućavanje pristupa ljusci forsiranjem start komande i onemogućavanje TTY pristupa, ali takođe onemogućavanje svih vrsta port forwarding-a ili tuneliranja.

SFTP Tuneliranje

Ako imate pristup SFTP serveru, takođe možete tunelirati svoj saobraćaj kroz njega, na primer, koristeći uobičajeno port forwarding:

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

SFTP Simbolična veza

SFTP ima komandu "symlink". Dakle, ako imate prava za pisanje u nekom folderu, možete kreirati simbolične veze ka drugim folderima/datotekama. Pošto ste verovatno zarobljeni unutar chroot-a, ovo neće biti posebno korisno za vas, ali, ako možete pristupiti kreiranoj simboličnoj vezi iz servisa bez chroot-a (na primer, ako možete pristupiti simboličnoj vezi preko veba), možete otvoriti datoteke preko simbolične veze preko veba.

Na primer, da kreirate simboličnu vezu od nove datoteke "froot" do "/":

sftp> symlink / froot

Metodi autentifikacije

U visoko bezbednom okruženju, uobičajena praksa je omogućiti samo autentifikaciju zasnovanu na ključu ili dvofaktornu autentifikaciju umesto jednostavne autentifikacije zasnovane na lozinci. Međutim, često se jači metodi autentifikacije omoguće bez onemogućavanja slabijih. Čest slučaj je omogućavanje publickey u konfiguraciji openSSH-a i postavljanje kao podrazumevanog metoda, ali ne i onemogućavanje password. Dakle, korišćenjem režima verbose SSH klijenta, napadač može videti da je omogućen slabiji metod:

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

Na primer, ako je postavljen limit za neuspelu autentifikaciju i nikada ne dobijete priliku da dođete do metode za unos lozinke, možete koristiti opciju PreferredAuthentications da biste prisilili korišćenje ove metode.

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

Pregled konfiguracije SSH servera je neophodan kako bi se proverilo da li su dozvoljene samo očekivane metode. Korišćenje verbose moda na klijentu može pomoći da se vidi efikasnost konfiguracije.

Konfiguracioni fajlovi

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

Reference

Savet o bug bounty programu: registrujte se na Intigriti, premijum platformu za bug bounty kreiranu od strane hakera, za hakere! Pridružite nam se na https://go.intigriti.com/hacktricks danas, i počnite da zarađujete nagrade do $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

HackTricks Automatske Komande

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'

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks: