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

343 lines
21 KiB
Markdown
Raw Permalink 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" %}
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>支持 HackTricks</summary>
* 查看 [**订阅计划**](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 来分享黑客技巧。
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**漏洞赏金提示****注册** **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 用于 sftpGitHub 用于 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 <IP> 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] <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)
### 服务器的公钥 SSH
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### 弱加密算法
这可以通过**nmap**默认发现。但你也可以使用**sslcan**或**sslyze**。
### Nmap脚本
```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`
## 暴力破解用户名、密码和私钥
### 用户名枚举
在某些版本的 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 <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
```
### 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)
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**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 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
学习与实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>支持 HackTricks</summary>
* 查看 [**订阅计划**](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 来分享黑客技巧。
</details>
{% endhint %}