22 KiB
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:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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:
- Na trenutnom sistemu, pronađite bilo koje privatne SSH ključeve,
- Na trenutnom sistemu, pronađite bilo koje hostove ili destinacije (korisnik@host) na koje bi privatni ključevi mogli biti prihvaćeni,
- Pokušajte da se SSH povežete na sve destinacije koristeći sve otkrivene privatne ključeve,
- 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:
- Uredite SSH konfiguracionu datoteku sa:
sudoedit /etc/ssh/sshd_config
- Promenite postavku sa
#PermitRootLogin yes
naPermitRootLogin no
. - Ponovo učitajte konfiguraciju koristeći:
sudo systemctl daemon-reload
- 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.
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
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2
Reference
- Možete pronaći zanimljive vodiče o jačanju SSH na https://www.ssh-audit.com/hardening_guides.html
- https://community.turgensec.com/ssh-hacking-guide
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:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte Porodicu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.