Red Team之22 - SSH/SFTP渗透测试

admin 2022年12月10日21:30:44评论246 views字数 7263阅读24分12秒阅读模式

基本信息

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

默认端口: 22

  1. 22/tcp open  ssh     syn-ack

SSH 服务:

  • openSSH – OpenBSD SSH,从 Windows 10 开始在 BSD、Linux 发行版和 Windows 中提供

  • Dropbear – 用于低内存和处理器资源环境的 SSH 实现,在 OpenWrt 中提供

  • PuTTY – Windows 的 SSH 实现,客户端常用,服务器端使用较少

  • CopSSH – Windows 的 OpenSSH 实施

SSH 库(实现服务器端):

  • libssh – 多平台 C 库,在Python、Perl和R中实现 SSHv2 协议绑定;它被 KDE 用于 sftp,GitHub 用于 git SSH 基础设施

  • wolfSSH – 用 ANSI C 编写的 SSHv2 服务器库,面向嵌入式、RTOS 和资源受限环境

  • Apache MINA SSHD – Apache SSHD Java 库基于 Apache MINA

  • paramiko – Python SSHv2 协议库

枚举

Banner 抓取

  1. nc -vn <IP> 22

自动 ssh 审计

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 上运行;

    • 没有依赖

    • <

  1. usage: ssh-audit.py [-1246pbcnjvlt] <host>

  2.   -1,  --ssh1             force ssh version 1 only

  3.   -2,  --ssh2             force ssh version 2 only

  4.   -4,  --ipv4             enable IPv4 (order of precedence)

  5.   -6,  --ipv6             enable IPv6 (order of precedence)

  6.   -p,  --port=<port>      port to connect

  7.   -b,  --batch            batch output

  8.   -c,  --client-audit     starts a server on port 2222 to audit client

  9.                               software config (use -p to change port;

  10.                               use -t to change timeout)

  11.   -n,  --no-colors        disable colors

  12.   -j,  --json             JSON output

  13.   -v,  --verbose          verbose output

  14.   -l,  --level=<level>    minimum output level (info|warn|fail)

  15.   -t,  --timeout=<secs>   timeout (in seconds) for connection and reading

  16.                               (default: 5)

  17. $ python3 ssh-audit <IP>

https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp

服务器的公共 SSH 密钥

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

弱密码算法

This is discovered by default by nmap. But you can also use sslcan or sslyze.

Nmap 脚本

  1. nmap -p22 <ip> -sC # 为SSH发送默认的nmap脚本

  2. nmap -p22 <ip> -sV # 检索版本

  3. nmap -p22 <ip> --script ssh2-enum-algos # 检索支持的算法

  4. nmap -p22 <ip> --script ssh-hostkey --script-args ssh_hostkey=full # 检索弱密钥

  5. nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # 检查认证方式

Shodan

  • ssh

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

用户名枚举

在某些版本的 OpenSSH 中,您可以进行定时攻击来枚举用户。您可以使用 metasploit 模块来利用它:

  1. msf> use scanner/ssh/ssh_enumusers

私钥/公钥 BF

如果您知道一些可以使用的 ssh 私钥...让我们试试吧。您可以使用 nmap 脚本:

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

或者 MSF 辅助模块:

  1. msf> use scanner/ssh/ssh_identify_pubkeys

Kerberos

使用该协议的crackmapexec ssh 可以使用该选项通过 kerberos --kerberos 进行身份验证。 请运行。 crackmapexec ssh--help.

默认凭证

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-中间人

如果您在本地网络中作为受害者使用用户名和密码连接到 SSH 服务器,您可以尝试执行 MitM 攻击以窃取这些凭据:

攻击路径:

  • 用户流量被重定向到攻击机器

  • 攻击者监视连接到 SSH 服务器的尝试并将它们重定向到其 SSH 服务器

  • 攻击者的SSH服务器配置,首先,记录所有输入的数据,包括用户的密码,其次,向用户想要连接的合法SSH服务器发送命令,执行它们,然后将结果返回给合法用户

SSH MITM完全按照上面描述的进行操作。

为了捕获执行实际的 MitM,您可以使用 ARP 欺骗、DNS 欺骗技术。

配置错误

Root 登录

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

如何禁用 openSSH 的 root 登录:

  1. 编辑 SSH 服务器配置 sudoedit/etc/ssh/sshd_config

  2. 换成 #PermitRootLogin yes _ PermitRootLoginno

  3. 考虑更改配置: sudo systemctl daemon-reload

  4. 重新启动 SSH 服务器 sudo systemctl restart sshd

SFTP命令执行

另一个常见的 SSH 配置错误经常出现在 SFTP 配置中。大多数时候,在创建 SFTP 服务器时,管理员希望用户具有 SFTP 访问权限来共享文件,而不是在机器上获取远程 shell。所以他们认为创建一个用户,给他一个占位符 shell(比如 /usr/bin/nologin/usr/bin/false)并在监狱中 chroot 就足以避免 shell 访问或对整个文件系统的滥用。但他们错了,用户可以在执行默认命令或 shell 之前要求在身份验证后立即执行命令。因此,要绕过将拒绝 shell 访问的占位符 shell,只需要求执行命令(例如 /bin/bash)之前,只需执行以下操作:

  1. $ ssh -v noraj@192.168.1.94 id

  2. ...

  3. Password:

  4. debug1: Authentication succeeded (keyboard-interactive).

  5. Authenticated to 192.168.1.94 ([192.168.1.94]:22).

  6. debug1: channel 0: new [client-session]

  7. debug1: Requesting no-more-sessions@openssh.com

  8. debug1: Entering interactive session.

  9. debug1: pledge: network

  10. debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0

  11. debug1: Sending command: id

  12. debug1: client_input_channel_req: channel 0 rtype exit-status reply 0

  13. debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0

  14. uid=1000(noraj) gid=100(users) groups=100(users)

  15. debug1: channel 0: free: client-session, nchannels 1

  16. Transferred: sent 2412, received 2480 bytes, in 0.1 seconds

  17. Bytes per second: sent 43133.4, received 44349.5

  18. debug1: Exit status 0

  19. $ ssh noraj@192.168.1.94 /bin/bash

/etc/ssh/sshd_config以下是用户的安全 SFTP 配置 ( –openSSH)示例 noraj

  1. Match User noraj

  2.        ChrootDirectory %h

  3.        ForceCommand internal-sftp

  4.        AllowTcpForwarding no

  5.        PermitTunnel no

  6.        X11Forwarding no

  7.        PermitTTY no

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

SFTP 隧道

如果您有权访问 SFTP 服务器,您还可以通过此隧道传输您的流量,例如使用公共端口转发:

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

SFTP 符号链接

sftp有命令“符号链接”。因此,如果您在某个文件夹中具有可写权限,则可以创建其他文件夹/文件符号链接。由于您可能被困在 chroot 中,这对您来说不是特别有用,但是,如果您可以从非 chroot服务访问创建的符号链接(例如,如果您可以从 Web 访问符号链接),您可以通过网络打开符号链接文件

例如,要创建从新文件 *froot** *”到“* */** **”的符号链接 **:

  1. sftp> symlink / froot

如果您可以通过网络访问文件“ froot ”,您将能够列出系统的根(“/”)文件夹。

身份验证方法

在高安全性环境中,通常的做法是仅启用基于密钥或双因素身份验证,而不是基于简单因素密码的身份验证。但通常会启用更强的身份验证方法,而不会禁用较弱的方法。常见的情况是启用 publickeyopenSSH 配置并将其设置为默认方法但不禁用 password。因此,通过使用 SSH 客户端的详细模式,攻击者可以看到启用了一个较弱的方法:

  1. $ ssh -v 192.168.1.94

  2. OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019

  3. ...

  4. debug1: Authentications that can continue: publickey,password,keyboard-interactive

例如,如果设置了身份验证失败限制并且您永远没有机会访问密码方法,则可以使用该 PreferredAuthentications选项强制使用此方法。

  1. $ ssh -v 192.168.1.94 -o PreferredAuthentications=password

  2. ...

  3. debug1: Next authentication method: password

检查 SSH 服务器配置是必要的,以检查是否只授权了预期的方法。在客户端使用详细模式可以帮助查看 配置的有效性。

配置文件

  1. ssh_config

  2. sshd_config

  3. authorized_keys

  4. ssh_known_hosts

  5. known_hosts

  6. id_rsa

Fuzzing

  • https://packetstormsecurity.com/files/download/71252/sshfuzz.txt

  • https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2

参考

  • 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

自动化命令

  1. Protocol_Name: SSH

  2. Port_Number: 22

  3. Protocol_Description: Secure Shell Hardening

  4. Entry_1:

  5.  Name: Hydra Brute Force

  6.  Description: Need Username

  7.  Command: hydra -v -V -u -l {Username} -P {Big_Passwordlist} -t 1 -u {IP} ssh

  8. Entry_2:

  9.  Name: consolesless mfs enumeration

  10.  Description: SSH enumeration without the need to run msfconsole

  11.  Note: sourced from https://github.com/carlospolop/legion

  12.  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'


Red Team之22 - SSH/SFTP渗透测试




原文始发于微信公众号(九河下稍的安全笔记):Red Team之22 - SSH/SFTP渗透测试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月10日21:30:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Red Team之22 - SSH/SFTP渗透测试http://cn-sec.com/archives/1456261.html

发表评论

匿名网友 填写信息