Red Team之22 - SSH/SFTP渗透测试
2022-12-10 17:22:46 Author: 九河下稍的安全笔记(查看原文) 阅读量:6 收藏

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.

默认凭证

VendorUsernamesPasswords
APCapc, deviceapc
Brocadeadminadmin123, password, brocade, fibranne
Ciscoadmin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladminadmin, 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
Citrixroot, nsroot, nsmaint, vdiadmin, kvm, cli, adminC1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler
D-Linkadmin, userprivate, admin, user
Dellroot, user1, admin, vkernel, clicalvin, 123456, password, vkernel, Stor\@ge!, admin
EMCadmin, root, sysadminEMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc
HP/3Comadmin, root, vcx, app, spvar, manage, hpsupport, opc_opadmin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V\@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin
Huaweiadmin, root123456, admin, root, Admin123, Admin\@storage, Huawei12#\$, HwDec\@01, hwosta2.0, HuaWei123, fsp200\@HW, huawei123
IBMUSERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customerPASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer
Junipernetscreennetscreen
NetAppadminnetapp123
Oracleroot, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2userchangeme, ilom-admin, ilom-operator, welcome1, oracle
VMwarevi-admin, root, hqadmin, vmware, adminvmware, 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 [email protected].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-[email protected].com

  8. debug1: Entering interactive session.

  9. debug1: pledge: network

  10. debug1: client_input_global_request: rtype hostkeys-[email protected].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 [email protected].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 [email protected].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'


文章来源: http://mp.weixin.qq.com/s?__biz=MzU5NjQ1NzUxOQ==&mid=2247484751&idx=1&sn=74328e63246f9ce87297092699a71da9&chksm=fe63240fc914ad19dd509060ef25b8fa8468734b465f2a9327bb815f317f95ba9577095855ea#rd
如有侵权请联系:admin#unsafe.sh