20 KiB
Raw Blame History

22 - Pentesting SSH/SFTP

{{#include ../banners/hacktricks-training.md}}

Temel Bilgiler

SSH (Güvenli Kabuk veya Güvenli Soket Kabuk), güvensiz bir ağ üzerinden bir bilgisayara güvenli bir bağlantı sağlamayı mümkün kılan bir ağ protokolüdür. Uzak sistemlere erişim sağlarken verilerin gizliliğini ve bütünlüğünü korumak için gereklidir.

Varsayılan port: 22

22/tcp open  ssh     syn-ack

SSH sunucuları:

  • openSSH OpenBSD SSH, BSD, Linux dağıtımları ve Windows 10'dan itibaren Windows'ta yerleşik
  • Dropbear Düşük bellek ve işlemci kaynaklarına sahip ortamlar için SSH uygulaması, OpenWrt'de yerleşik
  • PuTTY Windows için SSH uygulaması, istemcisi yaygın olarak kullanılır ancak sunucu kullanımı daha nadirdir
  • CopSSH Windows için OpenSSH uygulaması

SSH kütüphaneleri (sunucu tarafını uygulayan):

  • libssh SSHv2 protokolünü uygulayan çok platformlu C kütüphanesi, Python, Perl ve R ile bağlamalar içerir; KDE tarafından sftp için ve GitHub tarafından git SSH altyapısı için kullanılır
  • wolfSSH ANSI C ile yazılmış ve gömülü, RTOS ve kaynak kısıtlı ortamlar için hedeflenmiş SSHv2 sunucu kütüphanesi
  • Apache MINA SSHD Apache SSHD java kütüphanesi Apache MINA'ya dayanmaktadır
  • paramiko Python SSHv2 protokol kütüphanesi

Sayım

Banner Alma

nc -vn <IP> 22

Otomatik ssh-audit

ssh-audit, ssh sunucu ve istemci yapılandırma denetimi için bir araçtır.

https://github.com/jtesta/ssh-audit güncellenmiş bir çatallamadır https://github.com/arthepsy/ssh-audit/

Özellikler:

  • SSH1 ve SSH2 protokol sunucu desteği;
  • SSH istemci yapılandırmasını analiz etme;
  • afiş alma, cihaz veya yazılım ve işletim sistemini tanıma, sıkıştırmayı tespit etme;
  • anahtar değişimi, anahtar, şifreleme ve mesaj kimlik doğrulama kodu algoritmalarını toplama;
  • algoritma bilgilerini çıktı olarak verme (mevcut olduğu tarih, kaldırılmış/devre dışı, güvensiz/zayıf/eski, vb.);
  • algoritma önerilerini çıktı olarak verme (tanınan yazılım sürümüne göre ekleme veya kaldırma);
  • güvenlik bilgilerini çıktı olarak verme (ilgili sorunlar, atanan CVE listesi, vb.);
  • algoritma bilgisine dayalı SSH sürüm uyumluluğunu analiz etme;
  • OpenSSH, Dropbear SSH ve libssh'den tarihsel bilgiler;
  • Linux ve Windows'ta çalışır;
  • bağımlılık yok
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>

See it in action (Asciinema)

Sunucunun Genel SSH Anahtarı

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

Zayıf Şifreleme Algoritmaları

Bu, varsayılan olarak nmap tarafından keşfedilir. Ancak sslcan veya sslyze de kullanabilirsiniz.

Nmap betikleri

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

Kullanıcı adları, şifreler ve özel anahtarlar için brute force

Kullanıcı Adı Sayımı

Bazı OpenSSH sürümlerinde, kullanıcıları saymak için bir zamanlama saldırısı yapabilirsiniz. Bunu istismar etmek için bir metasploit modülü kullanabilirsiniz:

msf> use scanner/ssh/ssh_enumusers

Brute force

Bazı yaygın ssh kimlik bilgileri burada ve burada ve aşağıda.

Özel Anahtar Kaba Kuvvet

Eğer kullanılabilecek bazı ssh özel anahtarlarını biliyorsanız... deneyelim. nmap script'ini kullanabilirsiniz:

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

MSF yardımcı modülü için:

msf> use scanner/ssh/ssh_identify_pubkeys

Or use ssh-keybrute.py (native python3, lightweight and has legacy algorithms enabled): snowdroppe/ssh-keybrute.

Bilinen kötü anahtarlar burada bulunabilir:

{{#ref}} https://github.com/rapid7/ssh-badkeys/tree/master/authorized {{#endref}}

Zayıf SSH anahtarları / Debian tahmin edilebilir PRNG

Bazı sistemlerde kriptografik materyal oluşturmak için kullanılan rastgele tohumda bilinen hatalar vardır. Bu, önemli ölçüde azaltılmış bir anahtar alanına yol açabilir ve bu da brute force ile kırılabilir. Zayıf PRNG'den etkilenen Debian sistemlerinde önceden oluşturulmuş anahtar setleri burada mevcuttur: g0tmi1k/debian-ssh.

Kurban makinesi için geçerli anahtarları aramak amacıyla buraya bakmalısınız.

Kerberos

crackmapexec ssh protokolünü kullanarak kerberos ile kimlik doğrulamak için --kerberos seçeneğini kullanabilir.
Daha fazla bilgi için crackmapexec ssh --help komutunu çalıştırın.

Varsayılan Kimlik Bilgileri

Satıcı Kullanıcı Adları Şifreler
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

Eğer kurbanın SSH sunucusuna kullanıcı adı ve şifre ile bağlanacağı yerel ağdaysanız, bu kimlik bilgilerini çalmak için MitM saldırısı gerçekleştirmeyi deneyebilirsiniz:

Saldırı yolu:

  • Trafik Yönlendirme: Saldırgan, kurbanın trafiğini kendi makinesine yönlendirir, böylece SSH sunucusuna bağlantı girişimini yakalar.
  • Yakalama ve Kaydetme: Saldırganın makinesi, meşru SSH sunucusu gibi davranarak kullanıcının giriş bilgilerini yakalar.
  • Komut Çalıştırma ve İletme: Son olarak, saldırganın sunucusu kullanıcının kimlik bilgilerini kaydeder, komutları gerçek SSH sunucusuna ilerletir, bunları çalıştırır ve sonuçları kullanıcıya gönderir, süreci kesintisiz ve meşru gösterir.

SSH MITM yukarıda tarif edilenleri tam olarak yapar.

Gerçek MitM'yi gerçekleştirmek için ARP spoofing, DNS spoofing veya Ağ Spoofing saldırıları gibi teknikleri kullanabilirsiniz.

SSH-Snake

Eğer keşfedilen SSH özel anahtarlarını kullanarak bir ağı geçmek istiyorsanız, her sistemdeki her özel anahtarı yeni ana bilgisayarlar için kullanarak, SSH-Snake ihtiyacınız olan şeydir.

SSH-Snake aşağıdaki görevleri otomatik ve yinelemeli olarak gerçekleştirir:

  1. Mevcut sistemde herhangi bir SSH özel anahtarını bulun,
  2. Mevcut sistemde özel anahtarların kabul edilebileceği herhangi bir ana bilgisayar veya hedef (kullanıcı@host) bulun,
  3. Keşfedilen tüm özel anahtarları kullanarak tüm hedeflere SSH bağlantısı kurmayı deneyin,
  4. Bir hedefe başarıyla bağlanılırsa, bağlı olunan sistemde #1 - #4 adımlarını tekrar edin.

Tamamen kendini çoğaltan ve kendini yayabilen - ve tamamen dosyasızdır.

Yapılandırma Hataları

Root girişi

SSH sunucularının varsayılan olarak root kullanıcı girişine izin vermesi yaygındır, bu da önemli bir güvenlik riski oluşturur. Root girişini devre dışı bırakmak, sunucuyu güvence altına almanın kritik bir adımıdır. Bu değişikliği yaparak yetkisiz erişim ve brute force saldırılarını azaltabilirsiniz.

OpenSSH'de Root Girişini Devre Dışı Bırakmak için:

  1. SSH yapılandırma dosyasını düzenleyin: sudoedit /etc/ssh/sshd_config
  2. Ayarı değiştirin: #PermitRootLogin yes ifadesini PermitRootLogin no olarak değiştirin.
  3. Yapılandırmayı yeniden yükleyin: sudo systemctl daemon-reload
  4. Değişiklikleri uygulamak için SSH sunucusunu yeniden başlatın: sudo systemctl restart sshd

SFTP Brute Force

SFTP komut yürütme

SFTP kurulumlarında, yöneticilerin kullanıcıların dosya alışverişi yapmasını sağlamak için uzaktan shell erişimini etkinleştirmemesiyle ilgili yaygın bir gözden geçirme hatası vardır. Kullanıcıları etkileşimli olmayan shell'lerle (örneğin, /usr/bin/nologin) ayarlayıp belirli bir dizine kısıtlama getirmelerine rağmen, bir güvenlik açığı kalır. Kullanıcılar, giriş yaptıktan hemen sonra bir komutun (örneğin /bin/bash) yürütülmesini talep ederek bu kısıtlamaları aşabilirler, bu da yetkisiz komut yürütmeye olanak tanır ve amaçlanan güvenlik önlemlerini zayıflatır.

Buradan örnek:

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

İşte kullanıcı noraj için güvenli SFTP yapılandırması (/etc/ssh/sshd_config openSSH):

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

Bu yapılandırma yalnızca SFTP'ye izin verecek: başlangıç komutunu zorlayarak shell erişimini devre dışı bırakacak ve TTY erişimini devre dışı bırakacak, ayrıca her türlü port yönlendirmeyi veya tünellemeyi de devre dışı bırakacaktır.

SFTP Tünelleme

Eğer bir SFTP sunucusuna erişiminiz varsa, trafiğinizi bunun üzerinden tünelleyebilirsiniz, örneğin yaygın port yönlendirmesini kullanarak:

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

The sftp have the command "symlink". Therefor, if you have writable rights in some folder, you can create symlinks of other folders/files. As you are probably trapped inside a chroot this won't be specially useful for you, but, if you can access the created symlink from a no-chroot service (for example, if you can access the symlink from the web), you could open the symlinked files through the web.

For example, to create a symlink from a new file "froot" to "/":

sftp> symlink / froot

Eğer "froot" dosyasına web üzerinden erişiminiz varsa, sistemin kök ("/") klasörünü listeleyebilirsiniz.

Kimlik Doğrulama Yöntemleri

Yüksek güvenlikli ortamlarda, basit faktör şifre tabanlı kimlik doğrulama yerine yalnızca anahtar tabanlı veya iki faktörlü kimlik doğrulamanın etkinleştirilmesi yaygın bir uygulamadır. Ancak genellikle daha güçlü kimlik doğrulama yöntemleri, daha zayıf olanların devre dışı bırakılmadan etkinleştirilir. Sık karşılaşılan bir durum, openSSH yapılandırmasında publickey'nin etkinleştirilmesi ve varsayılan yöntem olarak ayarlanması, ancak password'ün devre dışı bırakılmamasıdır. Bu nedenle, SSH istemcisinin ayrıntılı modunu kullanarak bir saldırgan, daha zayıf bir yöntemin etkinleştirildiğini görebilir:

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

Örneğin, bir kimlik doğrulama hatası limiti ayarlandıysa ve şifre yöntemine ulaşma şansınız yoksa, bu yöntemi kullanmaya zorlamak için PreferredAuthentications seçeneğini kullanabilirsiniz.

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

SSH sunucu yapılandırmasını gözden geçirmek, yalnızca beklenen yöntemlerin yetkilendirildiğinden emin olmak için gereklidir. İstemcideki ayrıntılı mod, yapılandırmanın etkinliğini görmekte yardımcı olabilir.

Yapılandırma dosyaları

ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa

Fuzzing

References

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'

{{#include ../banners/hacktricks-training.md}}