24 KiB
22 - SSH/SFTPのペンテスト
**htARTE(HackTricks AWS Red Team Expert)**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitterで私をフォローする 🐦 @carlospolopm。
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
![](/Mirrors/hacktricks/media/commit/ae8446be562852ec0e7e81f9a19afadd28df9539/.gitbook/assets/image%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29.png)
**SSH(Secure ShellまたはSecure Socket Shell)**は、セキュアな接続を可能にするネットワークプロトコルであり、セキュリティの保護されていないネットワークを介してコンピュータに安全に接続します。リモートシステムにアクセスする際にデータの機密性と整合性を維持するために重要です。
デフォルトポート: 22
22/tcp open ssh syn-ack
SSHサーバー:
- openSSH – OpenBSD SSH、BSD、Linuxディストリビューション、およびWindows(Windows 10以降)に搭載されています
- Dropbear – 低メモリおよびプロセッサリソース環境向けのSSH実装で、OpenWrtに搭載されています
- PuTTY – Windows向けのSSH実装で、クライアントは一般的に使用されていますが、サーバーの使用は稀です
- CopSSH – Windows向けのOpenSSHの実装
SSHライブラリ(サーバーサイド実装):
- libssh – SSHv2プロトコルを実装したマルチプラットフォームのCライブラリで、Python、Perl、およびR向けのバインディングがあります。KDEではsftpに使用され、GitHubではgit SSHインフラに使用されています
- wolfSSH – ANSI Cで記述されたSSHv2サーバーライブラリで、組み込み、RTOS、およびリソース制約の環境向けです
- Apache MINA SSHD – Apache SSHD javaライブラリはApache MINAに基づいています
- paramiko – Python SSHv2プロトコルライブラリ
列挙
バナーの取得
nc -vn <IP> 22
自動化されたssh-audit
ssh-auditはsshサーバーおよびクライアントの構成監査のためのツールです。
https://github.com/jtesta/ssh-auditはhttps://github.com/arthepsy/ssh-audit/からの更新されたフォークです。
機能:
- SSH1およびSSH2プロトコルサーバーサポート;
- SSHクライアント構成の分析;
- バナーの取得、デバイスまたはソフトウェアおよびオペレーティングシステムの認識、圧縮の検出;
- 鍵交換、ホストキー、暗号化およびメッセージ認証コードアルゴリズムの収集;
- アルゴリズム情報の出力(利用可能な期間、削除/無効化、安全でない/弱い/レガシーなど);
- アルゴリズムの推奨事項の出力(認識されたソフトウェアバージョンに基づいて追加または削除);
- セキュリティ情報の出力(関連する問題、割り当てられたCVEリストなど);
- アルゴリズム情報に基づいたSSHバージョンの互換性の分析;
- OpenSSH、Dropbear SSH、libsshからの履歴情報;
- LinuxおよびWindowsで実行可能;
- 依存関係なし
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>
サーバーの公開SSHキー
ssh-keyscan -t rsa <IP> -p <PORT>
弱い暗号アルゴリズム
これはデフォルトでnmapによって発見されます。しかし、sslscanやsslyzeを使用することもできます。
Nmapスクリプト
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
ユーザー名の列挙
一部のOpenSSHバージョンでは、タイミング攻撃を使用してユーザーを列挙することができます。これを悪用するためにmetasploitモジュールを使用できます:
msf> use scanner/ssh/ssh_enumusers
Brute force
プライベートキーの総当たり攻撃
使用可能なsshプライベートキーを知っている場合は、試してみましょう。nmapスクリプトを使用できます:
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
または、MSF補助モジュール:
msf> use scanner/ssh/ssh_identify_pubkeys
既知の悪用された鍵はこちらで見つけることができます:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
弱いSSH鍵 / Debianの予測可能なPRNG
一部のシステムには、暗号資料を生成するために使用されるランダムシードに既知の欠陥があります。これにより、総当たり攻撃が可能な鍵空間が著しく減少する可能性があります。弱いPRNGによって影響を受けたDebianシステムで生成された事前生成された鍵セットはこちらで入手できます:g0tmi1k/debian-ssh。
被害者マシンの有効な鍵を検索するためにここを見ておくべきです。
Kerberos
crackmapexecはssh
プロトコルを使用して、--kerberos
オプションを使用してkerberos経由で認証できます。
詳細についてはcrackmapexec ssh --help
を実行してください。
デフォルトの資格情報
ベンダー | ユーザー名 | パスワード |
---|---|---|
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は上記の内容を正確に実行します。
実際のMitMを実行するために、ARPスプーフィング、DNSスプーフィングなどの手法を使用することができます。ネットワークスプーフィング攻撃で説明されている他の手法もあります。
SSH-Snake
発見されたSSHプライベートキーを使用してシステム上をトラバースし、新しいホストのために各プライベートキーを各システムで利用する場合、SSH-Snakeが必要です。
SSH-Snakeは以下のタスクを自動的に再帰的に実行します:
- 現在のシステムでSSHプライベートキーを見つける
- 現在のシステムで、プライベートキーが受け入れられる可能性のあるホストや宛先(user@host)を見つける
- 発見されたすべてのプライベートキーを使用してすべての宛先にSSHを試みる
- 宛先に正常に接続された場合、接続されたシステムでステップ#1〜#4を繰り返す
これは完全に自己複製および自己伝播し、完全にファイルレスです。
設定のミス構成
ルートログイン
SSHサーバーがデフォルトでルートユーザーログインを許可することは一般的ですが、これは重大なセキュリティリスクを引き起こします。ルートログインを無効にすることは、サーバーを保護するための重要なステップです。この変更により、管理特権を持たない不正アクセスや総当たり攻撃を緩和することができます。
OpenSSHでルートログインを無効にする方法:
sudoedit /etc/ssh/sshd_config
を使用してSSH構成ファイルを編集します- 設定を
#PermitRootLogin yes
から**PermitRootLogin no
**に変更します。 sudo systemctl daemon-reload
を使用して構成を再読み込みします- 変更を適用するためにSSHサーバーを再起動するには
sudo systemctl restart sshd
を使用します。
SFTP総当たり攻撃
SFTPコマンド実行
SFTPセットアップで一般的に見られるのは、管理者がリモートシェルアクセスを有効にせずにユーザー間でファイルを交換することを意図しているが、セキュリティ上の問題が残っていることです。ユーザーに対して非対話シェル(例:/usr/bin/nologin
)を設定し、特定のディレクトリに制限することであっても、セキュリティの抜け穴が残ります。ユーザーは、指定された非対話シェルが引き継がれる前に、ログイン直後にコマンド(例:/bin/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
この設定では、シェルアクセスを無効にして、開始コマンドを強制し、TTYアクセスを無効にするだけでなく、すべての種類のポート転送やトンネリングも無効にします。
SFTPトンネリング
SFTPサーバーへのアクセス権がある場合、一般的なポート転送を使用してトラフィックをトンネリングすることもできます。
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
SFTP シンボリックリンク
sftp には symlink コマンドがあります。したがって、あるフォルダで 書き込み権限 がある場合、他のフォルダ/ファイル の シンボリックリンク を作成できます。おそらくあなたは chroot に 閉じ込められている ため、これはあまり 特に役立たない かもしれませんが、作成した シンボリックリンク に no-chroot サービス から アクセス できる場合(たとえば、ウェブからシンボリックリンクにアクセスできる場合)、ウェブを介してシンボリックリンクされたファイルを開く ことができます。
たとえば、新しいファイル "froot" から "/" への シンボリックリンク を作成するには:
sftp> symlink / froot
認証方法
高セキュリティ環境では、単純なパスワード認証よりも鍵ベース認証や二要素認証を有効にすることが一般的です。しかし、より強力な認証方法を有効にしつつも、より弱い認証方法を無効にしないケースがよく見られます。典型的なケースとして、openSSH構成でpublickey
を有効にし、デフォルトの方法として設定するが、password
を無効にしないことがあります。したがって、SSHクライアントの冗長モードを使用することで、攻撃者はより弱い認証方法が有効になっていることを確認できます。
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
オプションを使用して、このメソッドを強制的に使用することができます。
ssh -v 192.168.1.94 -o PreferredAuthentications=password
...
debug1: Next authentication method: password
SSHサーバーの構成を確認することは重要です。予期されるメソッドのみが認可されていることを確認する必要があります。クライアントで詳細モードを使用すると、構成の効果を確認できます。
構成ファイル
ssh_config
sshd_config
authorized_keys
ssh_known_hosts
known_hosts
id_rsa
Fuzzing
- https://packetstormsecurity.com/files/download/71252/sshfuzz.txt
- https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2
References
- You can find interesting guides on how to harden SSH in https://www.ssh-audit.com/hardening_guides.html
- https://community.turgensec.com/ssh-hacking-guide
![](/Mirrors/hacktricks/media/commit/ae8446be562852ec0e7e81f9a19afadd28df9539/.gitbook/assets/image%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29%20%281%29.png)
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
{% embed url="https://www.stmcyber.com/careers" %}
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'
ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスウォッグを入手する
- The PEASS Familyを発見し、独占的なNFTsコレクションをご覧ください
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitterで私をフォローする 🐦 @carlospolopm。**
- ハッキングトリックを共有するために、PRを HackTricks および HackTricks Cloud githubリポジトリに提出してください。