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

20 KiB
Raw Blame History

22 - 对SSH/SFTP的渗透测试

通过 htARTE (HackTricks AWS 红队专家)从零到英雄学习AWS黑客攻击

支持HackTricks的其他方式

如果你对黑客职业感兴趣,并且想要黑入不可黑的系统 - 我们正在招聘! (需要流利的波兰语书写和口语能力).

{% embed url="https://www.stmcyber.com/careers" %}

基本信息

SSH或Secure Shell或Secure Socket Shell 是一种网络协议,为用户提供了一种通过不安全网络安全访问计算机的安全方式。

默认端口: 22

22/tcp open  ssh     syn-ack

SSH服务器

  • openSSH OpenBSD SSH包含在BSD、Linux发行版和Windows 10以后的Windows版本中
  • Dropbear 为内存和处理器资源有限的环境设计的SSH实现包含在OpenWrt中
  • PuTTY Windows平台的SSH实现客户端常用但服务器端使用较少
  • CopSSH Windows平台的OpenSSH实现

SSH库实现服务器端

  • libssh 多平台C语言库实现SSHv2协议提供PythonPerlR的绑定它被KDE用于sftp也被GitHub用于git SSH基础设施
  • wolfSSH 用ANSI C编写的SSHv2服务器库针对嵌入式、RTOS和资源受限环境
  • Apache MINA SSHD 基于Apache MINA的Apache SSHD Java库
  • paramiko Python SSHv2协议库

枚举

Banner 抓取

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>

查看动作演示 (Asciinema)

服务器的公共SSH密钥

ssh-keyscan -t rsa <IP> -p <PORT>

弱密码算法

nmap 默认会发现这个问题。但你也可以使用 sslcansslyze

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

暴力破解用户名、密码和私钥

用户名枚举

在某些版本的OpenSSH中您可以进行时序攻击来枚举用户。您可以使用metasploit模块来利用这一点

msf> use scanner/ssh/ssh_enumusers

暴力破解

一些常见的ssh凭据在这里这里,以及下面。

私钥暴力破解

如果你知道一些可能会用到的ssh私钥...让我们尝试一下。你可以使用nmap脚本

https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html

或者MSF辅助模块

msf> use scanner/ssh/ssh_identify_pubkeys

或使用 ssh-keybrute.py(原生 python3轻量级且启用了传统算法snowdroppe/ssh-keybrute

已知的不安全密钥可以在这里找到:

{% 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服务器的受害者处于同一本地网络你可以尝试执行中间人攻击来窃取这些凭证:

攻击路径:

  • 用户流量被重定向到攻击机器
  • 攻击者监控尝试连接到SSH服务器的尝试并将它们重定向到其SSH服务器
  • 攻击者的SSH服务器首先配置为记录所有输入的数据包括用户的密码其次向用户想要连接的合法SSH服务器发送命令以执行它们然后将结果返回给合法用户

SSH MITM 正是执行上述描述的操作。

为了捕获实际的中间人攻击你可以使用ARP欺骗、DNS欺骗或在 网络欺骗攻击 中描述的其他技术。

配置错误

Root登录

默认情况下大多数SSH服务器实现将允许root登录建议禁用它因为如果这个账户的凭证泄露攻击者将直接获得管理权限这也将允许攻击者对这个账户进行暴力破解攻击。

如何为openSSH禁用root登录

  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命令执行

SFTP配置中的另一个常见SSH配置错误通常可以看到。大多数时候当创建一个SFTP服务器时管理员希望用户有一个SFTP访问权限来共享文件但不希望在机器上获得远程shell。所以他们认为创建一个用户给他分配一个占位符shell/usr/bin/nologin/usr/bin/false并将他限制在一个监狱中足以避免shell访问或对整个文件系统的滥用。但他们错了用户可以在默认命令或shell执行之前请求在认证后立即执行一个命令。因此为了绕过将拒绝shell访问的占位符shell只需在之前请求执行一个命令例如 /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

这种配置将仅允许SFTP通过强制启动命令禁用shell访问并禁用TTY访问但也禁用所有类型的端口转发或隧道。

SFTP 隧道

如果你可以访问SFTP服务器你也可以通过它隧道转发你的流量例如使用常见的端口转发

sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>

SFTP 符号链接

sftp 支持 "symlink" 命令。因此,如果你在某个文件夹中拥有可写权限,你可以创建指向其他文件夹/文件符号链接。由于你可能被限制在一个 chroot 环境中,这并不特别有用,但是,如果你能够通过一个非 chroot 服务访问创建的符号链接(例如,如果你能够通过网页访问该符号链接),你可以通过网页打开链接的文件

例如,创建一个从新文件 "froot" 到 "/"符号链接

sftp> symlink / froot

如果您可以通过网络访问文件 "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

参考资料

如果你对黑客职业感兴趣,并且想要黑进那些不可黑的系统 - 我们正在招聘!需要流利的波兰语书写和口语)。

{% embed url="https://www.stmcyber.com/careers" %}

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'

从零到英雄学习AWS黑客技术通过 htARTE (HackTricks AWS Red Team Expert)

支持HackTricks的其他方式