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

22 KiB
Raw Blame History

22 - Pentesting SSH/SFTP

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Bug bounty wenk: teken aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit by ons aan by https://go.intigriti.com/hacktricks vandag, en begin om belonings tot $100,000 te verdien!

{% embed url="https://go.intigriti.com/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 vir die handhawing van die vertroulikheid en integriteit van data wanneer toegang tot afgeleë stelsels verkry word.

Verstekpoort: 22

22/tcp open  ssh     syn-ack

SSH bedieners:

  • openSSH OpenBSD SSH, versend in BSD, Linux verspreidings en Windows sedert Windows 10
  • Dropbear SSH implementering vir omgewings met lae geheue en verwerkerhulpbronne, versend in OpenWrt
  • PuTTY SSH implementering vir Windows, die klient word algemeen gebruik maar die gebruik van die bediener is skaars
  • CopSSH implementering van OpenSSH vir Windows

SSH biblioteke (implementering van bedienerkant):

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

Opname

Banner Gaping

nc -vn <IP> 22

Geoutomatiseerde ssh-audit

ssh-audit is 'n gereedskap vir die ouditering van ssh-bediener- en klientkonfigurasie.

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

Kenmerke:

  • SSH1 en SSH2 protokolbediener-ondersteuning;
  • analiseer SSH-klientkonfigurasie;
  • gryp banier, herken toestel of sagteware en bedryfstelsel, ontdek kompressie;
  • versamel sleuteluitruil, gasheer-sleutel, enkripsie en boodskap-verifikasiekode-algoritmes;
  • uitvoer algoritme-inligting (beskikbaar sedert, verwyder/afgeskakel, onveilig/swak/oud, ens.);
  • uitvoer algoritme-aanbevelings (voeg by of verwyder gebaseer op herkenning van sagteware-weergawe);
  • uitvoer van sekuriteitsinligting (verwante kwessies, toegewysde CVE-lys, ens.);
  • analiseer SSH-weergawe-verenigbaarheid gebaseer op algoritme-inligting;
  • historiese inligting van OpenSSH, Dropbear SSH en libssh;
  • hardloop op Linux en Windows;
  • geen afhanklikhede
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>

Openbare SSH-sleutel van bediener

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

Swakke Sifer Algoritmes

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

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 private sleutels

Gebruikersnaamopnoeming

In sommige weergawes van OpenSSH kan jy 'n tydaanval maak om gebruikers te ontsluit. Jy kan 'n metasploit-module gebruik om dit uit te buit:

msf> use scanner/ssh/ssh_enumusers

Brute force

Sommige algemene ssh-inligting hier en hier en hieronder.

Privaatsleutel Brute Force

As jy van sommige ssh-privaatsleutels weet wat gebruik kan word... probeer dit. Jy kan die nmap-skrip gebruik:

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

Of die MSF bykomende module:

msf> use scanner/ssh/ssh_identify_pubkeys

Of gebruik ssh-keybrute.py (nativese python3, lig en het erfenis algoritmes geaktiveer): snowdroppe/ssh-keybrute.

Bekende slegte sleutels kan hier gevind word:

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

Swak SSH sleutels / Debian voorspelbare PRNG

Sommige stelsels het bekende foute in die lukrake saad wat gebruik word om kriptografiese materiaal te genereer. Dit kan lei tot 'n dramaties verminderde sleutelruimte wat gekraak kan word. Vooraf gegenereerde stelle sleutels wat gegenereer is op Debian stelsels wat geraak is deur swak PRNG is beskikbaar hier: g0tmi1k/debian-ssh.

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

Kerberos

crackmapexec wat die ssh protokol gebruik kan die opsie --kerberos gebruik om te authentiseer via kerberos.
Vir meer inligting hardloop crackmapexec ssh --help.

Standaard Gelde

Vervaardiger Gebruikersname Wagwoorde
APC apc, toestel apc
Brocade admin admin123, wagwoord, brocade, fibranne
Cisco admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin admin, Admin123, verstek, wagwoord, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, verander_dit, 12345, ipics, pnadmin, diamond, hsadb, c, cc, aanval, blender, verandermy
Citrix root, nsroot, nsmaint, vdiadmin, kvm, cli, admin C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, openbaar, rootadmin, wanscaler
D-Link admin, gebruiker privaat, admin, gebruiker
Dell root, user1, admin, vkernel, cli calvin, 123456, wagwoord, vkernel, Stor@ge!, admin
EMC admin, root, sysadmin EMCPMAdm7n, Wagwoord#1, Wagwoord123#, sysadmin, verandermy, emc
HP/3Com admin, root, vcx, app, spvar, bestuur, hpsupport, opc_op admin, wagwoord, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, toegang, opstelling, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !bestuur, !admin
Huawei admin, root 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123
IBM USERID, admin, bestuurder, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, stelsel, toestel, ufmcli, kliënt PASSW0RD, passw0rd, admin, wagwoord, Passw8rd, iadmin, apc, 123456, kliënt
Juniper netscreen netscreen
NetApp admin netapp123
Oracle root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user verandermy, ilom-admin, ilom-operator, welcome1, oracle
VMware vi-admin, root, hqadmin, vmware, admin vmware, vmw@re, hqadmin, verstek

SSH-MitM

As jy in die plaaslike netwerk is as die slagoffer wat gaan koppel aan die SSH-bediener deur gebruikersnaam en wagwoord kan jy probeer om 'n MitM-aanval uit te voer om daardie gelde te steel:

Aanvalpad:

  • Verkeersomleiding: Die aanvaller stuur die slagoffer se verkeer na hul masjien, wat effektief die koppelingspoging na die SSH-bediener onderskep.
  • Onderskepping en Loggin: Die aanvaller se masjien tree op as 'n proksi, vang die gebruiker se aanmeldingsbesonderhede deur voor te gee as die regmatige SSH-bediener.
  • Opdraguitvoering en Deurbestuur: Laastens, die aanvaller se bediener log die gebruiker se gelde, stuur die opdragte na die regte SSH-bediener, voer dit uit, en stuur die resultate terug na die gebruiker, wat die proses laat voorkom asof dit naatloos en regmatig is.

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 gebruik wat beskryf word in die Netwerkspoofing-aanvalle.

SSH-Slang

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

SSH-Slang 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 gasheer of bestemmings (gebruiker@gasheer) wat die privaat sleutels mag aanvaar,
  3. Probeer om na al die bestemmings te SSH met al die ontdekte privaat sleutels,
  4. As 'n bestemming suksesvol gekoppel word, herhaal stappe #1 - #4 op die gekoppelde stelsel.

Dit is heeltemal selfvermeerderend en selfverspreidend -- en heeltemal sonder lêers.

Konfigurasie Foute

Root aanmelding

Dit is algemeen vir SSH-bediener om standaard rootgebruiker aanmelding toe te laat, wat 'n beduidende sekuriteitsrisiko inhou. Deaktivering van root aanmelding is 'n kritieke stap in die beveiliging van die bediener. Onbevoegde toegang met administratiewe regte en brutale aanvalle kan geminimaliseer 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-herlaai
  4. Herlaai die SSH-bediener om veranderinge toe te pas: sudo systemctl herlaai sshd

SFTP Brutale Aanval

SFTP opdraguitvoering

Daar is 'n algemene oorsig met SFTP-opstelle, waar administrateurs beoog dat gebruikers lêers kan uitruil sonder om afgeleë skeltoegang in te skakel. Ten spyte van die instelling van gebruikers met nie-interaktiewe skille (bv., /usr/bin/nologin) en hulle beperk tot 'n spesifieke gids, bly 'n sekuriteitsloophole. Gebruikers kan hierdie beperkings omseil deur die uitvoering van 'n opdrag aan te vra (soos /bin/bash) onmiddellik na aanmelding, voordat hulle aangewese nie-interaktiewe skel oorneem. Dit maak onbevoegde opdraguitvoering moontlik, wat die bedoelde sekuriteitsmaatreëls ondermyn.

Voorbeeld van hier:

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: deaktiveer skel-toegang deur die beginopdrag te forseer en deaktiveer TTY-toegang, maar ook alle soorte poort deurvoer of tonneling te deaktiveer.

SFTP Tonneling

As jy toegang het tot 'n SFTP-bediener, kan jy ook jou verkeer deur hierdie tonnel, byvoorbeeld deur die algemene poort deurvoering, lei:

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

Die sftp het die opdrag "symlink". Daarom, as jy skryfregte in 'n sekere gids het, kan jy symlinks van ander gidsies/lêers skep. Aangesien jy waarskynlik vasgevang is binne 'n chroot, sal dit nie besonders nuttig vir jou wees nie, maar as jy die geskepte symlink van 'n geen-chroot diens kan bereik (byvoorbeeld, as jy die symlink van die web kan bereik), kan jy die symlinked lêers deur die web oopmaak.

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

sftp> symlink / froot

Indien jy die lêer "froot" via die web kan bereik, sal jy in staat wees om die hoof ("/") vouer van die stelsel te lys.

Verifikasiemetodes

In 'n hoë sekuriteitsomgewing is dit 'n algemene praktyk om slegs sleutelgebaseerde of tweefaktor-verifikasie moontlik te maak eerder as die eenvoudige faktor wagwoordgebaseerde verifikasie. Maar dikwels word die sterker verifikasiemetodes moontlik gemaak sonder om die swakkeres uit te skakel. 'n Gereelde geval is om publickey in die openSSH-konfigurasie moontlik te maak en dit as die verstekmetode in te stel, maar om nie password uit te skakel nie. Dus kan 'n aanvaller deur die oordrewe modus van die SSH-klient te gebruik, sien dat 'n swakker metode moontlik gemaak is:

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

Byvoorbeeld, as 'n verifikasie-mislukkingslimiet ingestel 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.

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

Konfigurasie lêers

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

Verwysings

Bug bounty wenk: teken aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit by ons aan by https://go.intigriti.com/hacktricks vandag, en begin om belonings te verdien tot $100,000!

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

HackTricks Outomatiese 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'

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: