# 22 - Pentesting SSH/SFTP
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* 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.
{% endhint %}
**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" %}
## 基本情報
**SSH (Secure Shell or Secure Socket Shell)** は、未保護のネットワークを介してコンピュータに安全に接続するためのネットワークプロトコルです。リモートシステムにアクセスする際のデータの機密性と完全性を維持するために不可欠です。
**デフォルトポート:** 22
```
22/tcp open ssh syn-ack
```
**SSHサーバー:**
* [openSSH](http://www.openssh.org) – OpenBSD SSH、BSD、LinuxディストリビューションおよびWindows 10以降のWindowsに搭載
* [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – 低メモリおよびプロセッサリソースの環境向けのSSH実装、OpenWrtに搭載
* [PuTTY](https://www.chiark.greenend.org.uk/\~sgtatham/putty/) – Windows用のSSH実装、クライアントは一般的に使用されるが、サーバーの使用はまれ
* [CopSSH](https://www.itefix.net/copssh) – Windows用のOpenSSHの実装
**SSHライブラリ(サーバーサイドを実装):**
* [libssh](https://www.libssh.org) – SSHv2プロトコルを実装するマルチプラットフォームCライブラリ、[Python](https://github.com/ParallelSSH/ssh-python)、[Perl](https://github.com/garnier-quentin/perl-libssh/)および[R](https://github.com/ropensci/ssh)のバインディングがある; KDEのsftpやGitHubのgit SSHインフラストラクチャで使用されている
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – ANSI Cで書かれたSSHv2サーバーライブラリ、組み込み、RTOS、およびリソース制約のある環境向け
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD JavaライブラリはApache MINAに基づいている
* [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2プロトコルライブラリ
## 列挙
### バナーグラビング
```bash
nc -vn 22
```
### 自動化されたssh-audit
ssh-auditは、sshサーバーとクライアントの設定監査のためのツールです。
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit)は、[https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)からの更新されたフォークです。
**特徴:**
* SSH1およびSSH2プロトコルサーバーのサポート;
* SSHクライアント設定の分析;
* バナーを取得し、デバイスまたはソフトウェアとオペレーティングシステムを認識し、圧縮を検出;
* キー交換、ホストキー、暗号化およびメッセージ認証コードアルゴリズムを収集;
* アルゴリズム情報を出力(利用可能な時期、削除/無効、危険/弱/レガシーなど);
* アルゴリズムの推奨事項を出力(認識されたソフトウェアバージョンに基づいて追加または削除);
* セキュリティ情報を出力(関連する問題、割り当てられたCVEリストなど);
* アルゴリズム情報に基づいてSSHバージョンの互換性を分析;
* OpenSSH、Dropbear SSHおよびlibsshからの履歴情報;
* LinuxおよびWindowsで実行;
* 依存関係なし
```bash
usage: ssh-audit.py [-1246pbcnjvlt]
-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 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= minimum output level (info|warn|fail)
-t, --timeout= timeout (in seconds) for connection and reading
(default: 5)
$ python3 ssh-audit
```
[See it in action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
### サーバーの公開SSHキー
```bash
ssh-keyscan -t rsa -p
```
### 弱い暗号アルゴリズム
これはデフォルトで**nmap**によって発見されます。しかし、**sslcan**や**sslyze**を使用することもできます。
### Nmapスクリプト
```bash
nmap -p22 -sC # Send default nmap scripts for SSH
nmap -p22 -sV # Retrieve version
nmap -p22 --script ssh2-enum-algos # Retrieve supported algorythms
nmap -p22 --script ssh-hostkey --script-args ssh_hostkey=full # Retrieve weak keys
nmap -p22 --script ssh-auth-methods --script-args="ssh.user=root" # Check authentication methods
```
### Shodan
* `ssh`
## ユーザー名、パスワード、プライベートキーのブルートフォース
### ユーザー名列挙
OpenSSHのいくつかのバージョンでは、タイミング攻撃を行ってユーザーを列挙することができます。これを利用するためにmetasploitモジュールを使用できます:
```
msf> use scanner/ssh/ssh_enumusers
```
### [ブルートフォース](../generic-methodologies-and-resources/brute-force.md#ssh)
一般的なssh認証情報は[こちら](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt)と[こちら](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt)および以下にあります。
### プライベートキーのブルートフォース
使用できるsshプライベートキーをいくつか知っている場合... 試してみましょう。nmapスクリプトを使用できます:
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
またはMSF補助モジュール:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
Or use `ssh-keybrute.py` (ネイティブPython3、軽量でレガシーアルゴリズムが有効): [snowdroppe/ssh-keybrute](https://github.com/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
一部のシステムには、暗号材料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、ブルートフォース攻撃が可能な大幅に減少したキー空間が生じる可能性があります。弱いPRNGの影響を受けたDebianシステムで生成された事前生成されたキーセットは、ここで入手可能です: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
被害者のマシンの有効なキーを検索するために、ここを確認する必要があります。
### Kerberos
**crackmapexec**は、`ssh`プロトコルを使用して、**kerberos経由で認証**するために`--kerberos`オプションを使用できます。\
詳細については、`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
もしあなたが被害者と同じローカルネットワークにいて、ユーザー名とパスワードを使用してSSHサーバーに接続しようとしている場合、**MitM攻撃を実行してその認証情報を盗むことができます:**
**攻撃経路:**
* **トラフィックのリダイレクト:** 攻撃者は被害者のトラフィックを自分のマシンに**転送**し、SSHサーバーへの接続試行を**傍受**します。
* **傍受とログ記録:** 攻撃者のマシンは**プロキシ**として機能し、正当なSSHサーバーを装ってユーザーのログイン情報を**キャプチャ**します。
* **コマンド実行と中継:** 最後に、攻撃者のサーバーは**ユーザーの認証情報をログ記録し**、**コマンドを**実際のSSHサーバーに**転送し**、**実行**し、**結果をユーザーに返します**。これにより、プロセスがシームレスで正当なものに見えます。
[**SSH MITM**](https://github.com/jtesta/ssh-mitm)は、上記の説明通りのことを正確に行います。
実際のMitMをキャプチャするためには、ARPスプーフィング、DNSスプーフィング、または[**ネットワークスプーフィング攻撃**](../generic-methodologies-and-resources/pentesting-network/#spoofing)で説明されている他の技術を使用できます。
## SSH-Snake
発見されたSSHプライベートキーを使用してネットワークを横断し、各システムの各プライベートキーを新しいホストに利用する場合、[**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake)が必要です。
SSH-Snakeは以下のタスクを自動的かつ再帰的に実行します:
1. 現在のシステムで、任意のSSHプライベートキーを見つける。
2. 現在のシステムで、プライベートキーが受け入れられる可能性のあるホストまたは宛先(user@host)を見つける。
3. 発見されたすべてのプライベートキーを使用して、すべての宛先にSSH接続を試みる。
4. 宛先に正常に接続できた場合、接続したシステムでステップ#1 - #4を繰り返す。
これは完全に自己複製し、自己伝播し、完全にファイルレスです。
## Config Misconfigurations
### Root login
SSHサーバーがデフォルトでrootユーザーのログインを許可することは一般的であり、これは重大なセキュリティリスクをもたらします。**rootログインを無効にすること**は、サーバーを保護するための重要なステップです。この変更を行うことで、管理者権限を持つ不正アクセスやブルートフォース攻撃を軽減できます。
**OpenSSHでRoot Loginを無効にする方法:**
1. `sudoedit /etc/ssh/sshd_config`でSSH設定ファイルを編集します。
2. 設定を`#PermitRootLogin yes`から**`PermitRootLogin no`**に変更します。
3. `sudo systemctl daemon-reload`を使用して設定を再読み込みします。
4. 変更を適用するためにSSHサーバーを再起動します: `sudo systemctl restart sshd`
### SFTP Brute Force
* [**SFTP Brute Force**](../generic-methodologies-and-resources/brute-force.md#sftp)
### SFTP command execution
SFTPセットアップにおいて一般的な見落としが発生します。管理者はユーザーがリモートシェルアクセスを有効にせずにファイルを交換できるように意図していますが、非対話型シェル(例: `/usr/bin/nologin`)を設定し、特定のディレクトリに制限しても、セキュリティの抜け穴が残ります。**ユーザーはログイン後すぐにコマンド(例: `/bin/bash`)の実行を要求することで、これらの制限を回避できます**。これにより、不正なコマンド実行が可能になり、意図されたセキュリティ対策が損なわれます。
[こちらからの例](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
```
以下は、ユーザー `noraj` のための安全な SFTP 構成の例です(`/etc/ssh/sshd_config` – openSSH):
```
Match User noraj
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PermitTTY no
```
この設定は、SFTPのみを許可します:開始コマンドを強制することでシェルアクセスを無効にし、TTYアクセスを無効にするだけでなく、すべての種類のポートフォワーディングやトンネリングも無効にします。
### SFTPトンネリング
SFTPサーバーにアクセスできる場合、一般的なポートフォワーディングを使用して、トラフィックをこの経由でトンネルすることもできます:
```bash
sudo ssh -L :: -N -f @
```
### SFTP Symlink
**sftp** には "**symlink**" コマンドがあります。したがって、特定のフォルダに **書き込み権限** がある場合、**他のフォルダ/ファイル** の **シンボリックリンク** を作成できます。おそらく **chroot** 内に **閉じ込められている** ため、これはあなたにとって特に役に立たないでしょうが、作成した **シンボリックリンク** に **no-chroot** **サービス** からアクセスできる場合(たとえば、ウェブからシンボリックリンクにアクセスできる場合)、**ウェブを通じてシンボリックリンクされたファイルを開く** ことができます。
たとえば、新しいファイル **"**_**froot**_**" から "**_**/**_**"** への **シンボリックリンク** を作成するには:
```bash
sftp> symlink / froot
```
If you can access the file "_froot_" via web, you will be able to list the root ("/") folder of the system.
### 認証方法
高セキュリティ環境では、単純なパスワードベースの認証の代わりに、キーベースまたは二要素認証のみを有効にすることが一般的な慣行です。しかし、しばしば強力な認証方法が有効になっていても、弱い方法が無効になっていないことがあります。よくあるケースは、openSSHの設定で`publickey`を有効にし、デフォルトの方法として設定するが、`password`を無効にしないことです。そのため、SSHクライアントの詳細モードを使用すると、攻撃者は弱い方法が有効になっていることを見ることができます:
```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
```
例えば、認証失敗の制限が設定されていて、パスワードメソッドに到達する機会がない場合、`PreferredAuthentications`オプションを使用してこのメソッドを強制的に使用させることができます。
```bash
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
```
SSHサーバーの設定を確認することは、予期される方法のみが承認されていることを確認するために必要です。クライアントで詳細モードを使用すると、設定の有効性を確認するのに役立ちます。
### 設定ファイル
```bash
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
```
## ファジング
* [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)
## 参考文献
* SSHを強化する方法に関する興味深いガイドは[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)
**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは**ハッカーによって、ハッカーのために作られたプレミアムバグバウンティプラットフォーム**です!今日[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)で私たちに参加し、最大**$100,000**のバウンティを獲得し始めましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
## HackTricks 自動コマンド
```
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ハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCPハッキングを学び、実践する:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricksをサポートする
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
{% endhint %}