# 22 - Pentesting SSH/SFTP
{% hint style="success" %}
学习和实践 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
学习和实践 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (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 %}
**漏洞赏金提示**:**注册** **Intigriti**,一个由黑客为黑客创建的高级 **漏洞赏金平台**!今天就加入我们 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
## 基本信息
**SSH(安全外壳或安全套接字外壳)** 是一种网络协议,能够在不安全的网络上与计算机建立安全连接。它在访问远程系统时对于维护数据的机密性和完整性至关重要。
**默认端口:** 22
```
22/tcp open ssh syn-ack
```
**SSH 服务器:**
* [openSSH](http://www.openssh.org) – OpenBSD SSH,自 Windows 10 起在 BSD、Linux 发行版和 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) – 多平台 C 库,实现 SSHv2 协议,支持 [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 MINA 的 Apache SSHD Java 库
* [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` (native python3, lightweight and has legacy algorithms enabled): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### 已知的坏密钥可以在这里找到:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
#### 弱SSH密钥 / Debian可预测的PRNG
一些系统在生成加密材料时使用的随机种子存在已知缺陷。这可能导致密钥空间显著减少,从而可以被暴力破解。受弱PRNG影响的Debian系统上生成的预生成密钥集可以在这里找到:[g0tmi1k/debian-ssh](https://github.com/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**](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。
它是完全自我复制和自我传播的——并且完全无文件。
## 配置错误
### 根登录
SSH服务器默认允许root用户登录,这构成了重大安全风险。 **禁用root登录** 是保护服务器的关键步骤。通过进行此更改,可以减轻未经授权的管理权限访问和暴力攻击的风险。
**在OpenSSH中禁用根登录:**
1. **编辑SSH配置文件**: `sudoedit /etc/ssh/sshd_config`
2. **将设置更改** 从 `#PermitRootLogin yes` 到 **`PermitRootLogin no`**。
3. **使用以下命令重新加载配置**: `sudo systemctl daemon-reload`
4. **重启SSH服务器** 以应用更改: `sudo systemctl restart sshd`
### SFTP暴力破解
* [**SFTP暴力破解**](../generic-methodologies-and-resources/brute-force.md#sftp)
### SFTP命令执行
在SFTP设置中常见的一个疏忽是,管理员希望用户在不启用远程shell访问的情况下交换文件。尽管将用户设置为非交互式shell(例如,`/usr/bin/nologin`)并将其限制在特定目录中,但仍然存在安全漏洞。 **用户可以通过在登录后立即请求执行命令(如`/bin/bash`)来规避这些限制**,在其指定的非交互式shell接管之前。这允许未经授权的命令执行,破坏了预期的安全措施。
[示例来自这里](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 访问来禁用 shell 访问,同时还禁用所有类型的端口转发或隧道。
### SFTP Tunneling
如果您可以访问 SFTP 服务器,您还可以通过此方式隧道您的流量,例如使用常见的端口转发:
```bash
sudo ssh -L :: -N -f @
```
### SFTP Symlink
The **sftp** have the command "**symlink**". Therefore, if you have **可写权限** in some folder, you can create **symlinks** of **其他文件/文件夹**. As you are probably **被困** inside a chroot this **对你来说不会特别有用**, but, if you can **访问** the created **symlink** from a **no-chroot** **服务** (for example, if you can access the symlink from the web), you could **通过网络打开链接的文件**.
For example, to create a **symlink** from a new file **"**_**froot**_**" to "**_**/**_**"**:
```bash
sftp> symlink / froot
```
如果您可以通过网络访问文件 "_froot_",您将能够列出系统的根 ("/") 文件夹。
### 认证方法
在高安全性环境中,通常的做法是仅启用基于密钥或双因素认证,而不是简单的基于密码的单因素认证。但通常情况下,较强的认证方法被启用而没有禁用较弱的认证方法。一个常见的情况是在 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
```
## 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
* 你可以在 [https://www.ssh-audit.com/hardening\_guides.html](https://www.ssh-audit.com/hardening\_guides.html) 找到有关如何加固 SSH 的有趣指南
* [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
**Bug bounty tip**: **注册** **Intigriti**,一个由黑客为黑客创建的高级 **bug bounty 平台**!今天就加入我们 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
{% 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 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
学习与实践 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (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 %}