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

343 lines
23 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
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**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**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## Temel Bilgiler
**SSH (Secure Shell veya Secure Socket Shell)**, güvensiz bir ağ üzerinden bir bilgisayara güvenli bir bağlantı sağlayan bir ağ protokolüdür. Uzak sistemlere erişirken 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](http://www.openssh.org) OpenBSD SSH, BSD, Linux dağıtımları ve Windows 10'dan itibaren Windows'ta yerleşik
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) Düşük bellek ve işlemci kaynaklarına sahip ortamlar için SSH uygulaması, OpenWrt'de yerleşik
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) Windows için SSH uygulaması, istemcisi yaygın olarak kullanılır ancak sunucu kullanımı daha nadirdir
* [CopSSH](https://www.itefix.net/copssh) Windows için OpenSSH uygulaması
**SSH kütüphaneleri (sunucu tarafını uygulayan):**
* [libssh](https://www.libssh.org) SSHv2 protokolünü uygulayan çok platformlu C kütüphanesi, [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) ve [R](https://github.com/ropensci/ssh) ile bağlamaları vardır; KDE tarafından sftp için ve GitHub tarafından git SSH altyapısı için kullanılır
* [wolfSSH](https://www.wolfssl.com/products/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](https://mina.apache.org/sshd-project/index.html) Apache SSHD java kütüphanesi Apache MINA'ya dayanmaktadır
* [paramiko](https://github.com/paramiko/paramiko) Python SSHv2 protokol kütüphanesi
## Sayım
### Banner Yakalama
```bash
nc -vn <IP> 22
```
### Automated ssh-audit
ssh-audit, ssh sunucu ve istemci yapılandırma denetimi için bir araçtır.
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) güncellenmiş bir fork'tur [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
**Özellikler:**
* SSH1 ve SSH2 protokol sunucu desteği;
* SSH istemci yapılandırmasını analiz etme;
* banner 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
```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>
```
[See it in action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### Sunucunun Genel SSH Anahtarı
```bash
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
```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`
## Kullanıcı adları, şifreler ve özel anahtarlar için brute force
### Kullanıcı Adı Sayımı
OpenSSH'nin bazı 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](../generic-methodologies-and-resources/brute-force.md#ssh)
Bazı yaygın ssh kimlik bilgileri [burada](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) ve [burada](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) ve aşağıda.
### Özel Anahtar Brute Force
Kullanılabilecek bazı ssh özel anahtarlarını biliyorsanız... deneyelim. nmap betiğini kullanabilirsiniz:
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
Ya da MSF yardımcı modülü:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
Or use `ssh-keybrute.py` (native python3, lightweight and has legacy algorithms enabled): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### Bilinen kötü anahtarlar burada bulunabilir:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
#### Zayıf SSH anahtarları / Debian tahmin edilebilir PRNG
Bazı sistemler, kriptografik materyal oluşturmak için kullanılan rastgele tohumda bilinen hatalara sahiptir. Bu, bruteforce edilebilecek önemli ölçüde azaltılmış bir anahtar alanına yol açabilir. Zayıf PRNG'den etkilenen Debian sistemlerinde önceden oluşturulmuş anahtar setleri burada mevcuttur: [g0tmi1k/debian-ssh](https://github.com/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ğrulama** yapmak 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, cihaz | 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 olarak yerel ağda iseniz ve kullanıcı adı ve şifre ile SSH sunucusuna bağlanmaya çalışıyorsanı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 **saptar**, böylece SSH sunucusuna bağlantı girişimini **yakalar**.
* **Yakalama ve Günlükleme:** Saldırganın makinesi, meşru SSH sunucusu gibi davranarak kullanıcının giriş bilgilerini **yakalar**.
* **Komut Yürütme ve İletme:** Son olarak, saldırganın sunucusu **kullanıcının kimlik bilgilerini kaydeder**, **komutları** gerçek SSH sunucusuna **ilerletir**, **yürütür** ve **sonuçları geri gönderir**, böylece işlem kesintisiz ve meşru görünür.
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) yukarıda tarif edilenleri tam olarak yapar.
Gerçek MitM'yi gerçekleştirmek için ARP sahtekarlığı, DNS sahtekarlığı veya [**Ağ Sahtekarlığı saldırıları**](../generic-methodologies-and-resources/pentesting-network/#spoofing) gibi teknikleri kullanabilirsiniz.
## SSH-Snake
Eğer keşfedilen SSH özel anahtarlarını kullanarak bir ağı geçmek istiyorsanız ve her sistemdeki her özel anahtarı yeni ana bilgisayarlar için kullanmak istiyorsanız, [**SSH-Snake**](https://github.com/MegaManSec/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ı@ana bilgisayar) bulun,
3. Keşfedilen tüm özel anahtarları kullanarak tüm hedeflere SSH bağlantısı kurmaya çalışın,
4. Eğer 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 İçin:**
1. **SSH yapılandırma dosyasını düzenleyin:** `sudoedit /etc/ssh/sshd_config`
2. **Ayarı değiştirin:** `#PermitRootLogin yes`'i **`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 Brute Force**](../generic-methodologies-and-resources/brute-force.md#sftp)
### 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 kaçırma vardır. Kullanıcıları etkileşimli olmayan shell'lerle (örneğin, `/usr/bin/nologin`) ayarlayıp belirli bir dizine sınırlamalarına 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](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
```
Aşağıda kullanıcı `noraj` için güvenli SFTP yapılandırmasının bir örneği verilmiştir (`/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 verecektir: başlangıç komutunu zorlayarak shell erişimini devre dışı bırakmak ve TTY erişimini devre dışı bırakmakla birlikte, her türlü port yönlendirmeyi veya tünellemeyi de devre dışı bırakmaktadır.
### SFTP Tünelleme
Eğer bir SFTP sunucusuna erişiminiz varsa, trafiğinizi bunun üzerinden tünelleme yapabilirsiniz, örneğin yaygın port yönlendirmesini kullanarak:
```bash
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
```
### SFTP Symlink
The **sftp** have the command "**symlink**". Therefor, if you have **yazma hakları** in some folder, you can create **symlinks** of **diğer klasörler/dosyalar**. As you are probably **tuzağa düşmüş** inside a chroot this **özellikle faydalı olmayacak** for you, but, if you can **erişim sağlamak** the created **symlink** from a **no-chroot** **service** (for example, if you can access the symlink from the web), you could **web üzerinden symlinkli dosyaları açabilirsiniz**.
For example, to create a **symlink** from a new file **"**_**froot**_**" to "**_**/**_**"**:
```bash
sftp> symlink / froot
```
Eğer "_froot_" dosyasına web üzerinden erişebiliyorsanız, 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`'un 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 etkin olduğunu görebilir:
```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
```
Ö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.
```bash
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. İstemcide ayrıntılı mod kullanmak, yapılandırmanın etkinliğini görmekte yardımcı olabilir.
### Config dosyaları
```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)
## References
* SSH'yi güçlendirmek için ilginç kılavuzlar bulabilirsiniz [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>
**Bug bounty ipucu**: **Intigriti** için **kayıt olun**, **hackers tarafından, hackers için oluşturulmuş premium bir bug bounty platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresine katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
{% 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" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}