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

335 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 22 - Pentesting SSH/SFTP
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**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**](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](http://www.openssh.org) OpenBSD SSH, isporučen u BSD, Linux distribucijama i Windows-u od Windows 10
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Implementacija SSH-a za okruženja sa malom memorijom i procesorskim resursima, isporučena u OpenWrt-u
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) Implementacija SSH-a za Windows, klijent se često koristi, ali je upotreba servera ređa
* [CopSSH](https://www.itefix.net/copssh) Implementacija OpenSSH-a za Windows
**SSH biblioteke (implementacija na serverskoj strani):**
* [libssh](https://www.libssh.org) Višepatformska C biblioteka koja implementira SSHv2 protokol sa vezama u [Python-u](https://github.com/ParallelSSH/ssh-python), [Perl-u](https://github.com/garnier-quentin/perl-libssh/) i [R-u](https://github.com/ropensci/ssh); koristi je KDE za sftp i GitHub za git SSH infrastrukturu
* [wolfSSH](https://www.wolfssl.com/products/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](https://mina.apache.org/sshd-project/index.html) Apache SSHD java biblioteka zasnovana na Apache MINA-i
* [paramiko](https://github.com/paramiko/paramiko) Python SSHv2 protokolna biblioteka
## Enumeracija
### Preuzimanje banera
```bash
nc -vn <IP> 22
```
### Automatizovana ssh-audit
ssh-audit je alat za proveru konfiguracije ssh servera i klijenata.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) je ažurirana izdanica sa [https://github.com/arthepsy/ssh-audit/](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.
```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>
```
### Javni SSH ključ servera
```bash
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**.
```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 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](../generic-methodologies-and-resources/brute-force.md#ssh)
Neke uobičajene ssh akreditacije [ovde](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) i [ovde](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) 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](https://github.com/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](https://github.com/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**](https://github.com/jtesta/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**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
## 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**](https://github.com/MegaManSec/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
* [**SFTP Grubom silom**](../generic-methodologies-and-resources/brute-force.md#sftp)
### 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](https://community.turgensec.com/ssh-hacking-guide/):
```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
```
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:
```bash
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 "**/**":
```bash
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:
```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
```
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.
```bash
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
```bash
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
```
## Fuzzing
* [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt)
* [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh\_version\_2](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://www.ssh-audit.com/hardening\_guides.html)
* [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**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**](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'
```
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>