23 KiB
22 - Pentesting SSH/SFTP
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Bug bounty tip: sign up for Intigriti, a premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Basic Information
SSH (Secure Shell or Secure Socket Shell) je mrežni protokol koji omogućava sigurnu vezu sa računarom preko nesigurne mreže. Ključan je za očuvanje poverljivosti i integriteta podataka prilikom pristupa udaljenim sistemima.
Podrazumevani port: 22
22/tcp open ssh syn-ack
SSH сервери:
- openSSH – OpenBSD SSH, испоручен у BSD, Linux дистрибуцијама и Windows од Windows 10
- Dropbear – SSH имплементација за окружења са малом меморијом и ресурсима процесора, испоручена у OpenWrt
- PuTTY – SSH имплементација за Windows, клијент се често користи, али је употреба сервера ређа
- CopSSH – имплементација OpenSSH за Windows
SSH библиотеке (имплементирање на серверској страни):
- libssh – мултиплатформска C библиотека која имплементира SSHv2 протокол са везама у Python, Perl и R; користи се од стране KDE за sftp и од стране GitHub за git SSH инфраструктуру
- wolfSSH – SSHv2 серверска библиотека написана у ANSI C и намењена за уграђене, RTOS и окружења ограничена ресурсима
- Apache MINA SSHD – Apache SSHD java библиотека је заснована на Apache MINA
- paramiko – Python SSHv2 протокол библиотека
Енумерација
Узимање банера
nc -vn <IP> 22
Automated ssh-audit
ssh-audit je alat za reviziju konfiguracije ssh servera i klijenta.
https://github.com/jtesta/ssh-audit je ažurirani fork sa https://github.com/arthepsy/ssh-audit/
Karakteristike:
- Podrška za SSH1 i SSH2 protokol servera;
- analizira konfiguraciju SSH klijenta;
- uzima banner, prepoznaje uređaj ili softver i operativni sistem, detektuje kompresiju;
- prikuplja algoritme za razmenu ključeva, host-key, enkripciju i kod za autentifikaciju poruka;
- izlazne informacije o algoritmima (dostupno od, uklonjeno/onemogućeno, nesigurno/slabo/legacy, itd);
- izlazne preporuke za algoritme (dodati ili ukloniti na osnovu prepoznate verzije softvera);
- izlazne informacije o bezbednosti (povezani problemi, dodeljena CVE lista, itd);
- analizira kompatibilnost verzija SSH na osnovu informacija o algoritmima;
- istorijske informacije iz OpenSSH, Dropbear SSH i libssh;
- radi na Linux-u i Windows-u;
- bez 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 šifarski algoritmi
Ovo se otkriva podrazumevano pomoću nmap. Ali možete koristiti i sslcan ili sslyze.
Nmap skripte
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
Bruteforce korisnička imena, lozinke i privatne ključeve
Enumeracija korisničkih imena
U nekim verzijama OpenSSH možete izvršiti vremenski napad za enumeraciju korisnika. Možete koristiti Metasploit modul kako biste iskoristili ovo:
msf> use scanner/ssh/ssh_enumusers
Brute force
Neki uobičajeni ssh kredencijali ovde i ovde i ispod.
Private Key Brute Force
Ako znate neke ssh privatne ključeve koji bi mogli biti korišćeni... hajde da probamo. 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
Or use ssh-keybrute.py
(native python3, lightweight and has legacy algorithms enabled): snowdroppe/ssh-keybrute.
Known badkeys can be found here:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
Weak SSH keys / Debian predictable PRNG
Neki sistemi imaju poznate greške u nasumičnom semenu koje se koristi za generisanje kriptografskog materijala. To može rezultirati dramatično smanjenim prostorom ključeva koji se može probiti. Pre-generisani setovi ključeva generisanih na Debian sistemima pogođenim slabim PRNG-om dostupni su ovde: g0tmi1k/debian-ssh.
Trebalo bi da pogledate ovde kako biste tražili važeće ključeve za žrtvinsku mašinu.
Kerberos
crackmapexec koristeći ssh
protokol može koristiti opciju --kerberos
za autentifikaciju putem kerberos-a.
Za više informacija pokrenite crackmapexec ssh --help
.
Default Credentials
Vendor | Usernames | Passwords |
---|---|---|
APC | apc, device | apc |
Brocade | admin | admin123, password, brocade, fibranne |
Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, 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, user | private, admin, user |
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, default |
SSH-MitM
Ako ste u lokalnoj mreži kao žrtva koja će se povezati na SSH server koristeći korisničko ime i lozinku, mogli biste pokušati da izvršite MitM napad kako biste ukrali te kredencijale:
Napadni put:
- Preusmeravanje saobraćaja: Napadač preusmerava saobraćaj žrtve na svoju mašinu, efikasno presrećući pokušaj povezivanja na SSH server.
- Presretanje i logovanje: Mašina napadača deluje kao proxy, hvatajući korisničke podatke za prijavu pretvarajući se da je legitimni SSH server.
- Izvršenje komandi i prosleđivanje: Na kraju, server napadača loguje korisničke kredencijale, prosleđuje komande pravom SSH serveru, izvršava ih i šalje rezultate nazad korisniku, čineći proces da izgleda besprekorno i legitimno.
SSH MITM radi tačno ono što je opisano iznad.
Da biste uhvatili stvarni MitM, mogli biste koristiti tehnike kao što su ARP spoofing, DNS spoofing ili druge opisane u Network Spoofing attacks.
SSH-Snake
Ako želite da pretražujete mrežu koristeći otkrivene SSH privatne ključeve na sistemima, koristeći svaki privatni ključ na svakom sistemu za nove hostove, onda je SSH-Snake ono što vam treba.
SSH-Snake automatski i rekurzivno obavlja sledeće zadatke:
- Na trenutnom sistemu, pronađite sve SSH privatne ključeve,
- Na trenutnom sistemu, pronađite sve hostove ili odredišta (user@host) koja privatni ključevi mogu prihvatiti,
- Pokušajte da se SSH povežete na sve odredišta koristeći sve otkrivene privatne ključeve,
- Ako se uspešno povežete na odredište, ponovite korake #1 - #4 na povezanom sistemu.
Potpuno se replicira i širi -- i potpuno je bez datoteka.
Config Misconfigurations
Root login
Uobičajeno je da SSH serveri po defaultu dozvoljavaju prijavu korisnika root, što predstavlja značajan sigurnosni rizik. Onemogućavanje prijave root-a je kritičan korak u obezbeđivanju servera. Neovlašćen pristup sa administrativnim privilegijama i brute force napadi mogu se ublažiti ovom promenom.
Da biste onemogućili prijavu root-a u OpenSSH:
- Izmenite SSH konfiguracionu datoteku sa:
sudoedit /etc/ssh/sshd_config
- Promenite podešavanje sa
#PermitRootLogin yes
naPermitRootLogin no
. - Ponovo učitajte konfiguraciju koristeći:
sudo systemctl daemon-reload
- Ponovo pokrenite SSH server da primenite promene:
sudo systemctl restart sshd
SFTP Brute Force
SFTP command execution
Postoji uobičajena greška koja se dešava sa SFTP podešavanjima, gde administratori nameravaju da korisnici razmenjuju datoteke bez omogućavanja daljinskog pristupa shell-u. Iako su korisnici postavljeni sa neinteraktivnim shell-ovima (npr., /usr/bin/nologin
) i ograničeni na određeni direktorijum, ostaje sigurnosna rupa. Korisnici mogu zaobići ova ograničenja tražeći izvršenje komande (kao što je /bin/bash
) odmah nakon prijavljivanja, pre nego što njihov dodeljeni neinteraktivni shell preuzme. Ovo omogućava neovlašćeno izvršenje komandi, potkopavajući nameravane 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 omogućiti samo SFTP: onemogućavanje pristupa shell-u prisiljavanjem start komande i onemogućavanjem TTY pristupa, ali takođe onemogućava sve vrste prosleđivanja portova ili tunelovanja.
SFTP Tunneling
Ako imate pristup SFTP serveru, možete takođe tunelovati svoj saobraćaj kroz ovo, na primer, koristeći uobičajeno prosleđivanje portova:
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
SFTP Symlink
The sftp have the command "symlink". Zbog toga, ako imate prava za pisanje u nekom folderu, možete kreirati symlinks drugih foldera/fajlova. Kako ste verovatno zarobljeni unutar chroot-a, ovo neće biti posebno korisno za vas, ali, ako možete pristupiti kreiranom symlink-u iz no-chroot servisa (na primer, ako možete pristupiti symlink-u sa veba), mogli biste otvoriti symlinkovane fajlove putem veba.
Na primer, da kreirate symlink iz novog fajla "froot" u "/":
sftp> symlink / froot
Ako možete pristupiti datoteci "froot" putem veba, moći ćete da prikažete root ("/") folder sistema.
Metode autentifikacije
U okruženju sa visokom bezbednošću, uobičajena praksa je omogućiti samo autentifikaciju zasnovanu na ključevima ili dvostruku autentifikaciju umesto jednostavne autentifikacije zasnovane na lozinkama. Ali često se jače metode autentifikacije omogućavaju bez onemogućavanja slabijih. Čest slučaj je omogućavanje publickey
u openSSH konfiguraciji i postavljanje kao podrazumevanu metodu, ali ne onemogućavanje password
. Tako da korišćenjem verbose moda SSH klijenta, napadač može videti da je slabija metoda omogućena:
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 neuspehe autentifikacije i nikada ne dobijete priliku da dođete do metode lozinke, možete koristiti opciju PreferredAuthentications
da primorate korišćenje ove metode.
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
Pregled konfiguracije SSH servera je neophodan da bi se proverilo da su samo očekivane metode autorizovane. Korišćenje verbose moda na klijentu može pomoći da se vidi efikasnost konfiguracije.
Config files
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
References
- Možete pronaći zanimljive vodiče o tome kako ojačati SSH na https://www.ssh-audit.com/hardening_guides.html
- https://community.turgensec.com/ssh-hacking-guide
Bug bounty tip: prijavite se za Intigriti, premium bug bounty platformu koju su kreirali hakeri, 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 Automatic Commands
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'
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.