Kali Linux 中 Apache、SSH、FTP、MSF、DHCP 服务深度用法全解析
嗯,用户让我总结一篇文章的内容,控制在100字以内,而且不需要特定的开头。我得先仔细看看这篇文章讲的是什么。 文章主要介绍了Kali Linux中的五个核心服务:Apache、SSH、FTP、Metasploit和DHCP。每个服务都有详细的启动管理、配置路径、实战用法和故障排查方法。看起来作者是从六个维度全面解析这些工具,目的是为网络安全人员提供实用的操作指南。 我需要把重点放在这些服务的功能和用途上,同时突出文章的结构和目标读者。确保总结简洁明了,不超过100字。 </think> 文章介绍了Kali Linux中Apache、SSH、FTP、Metasploit和DHCP五个核心服务的配置与使用,从启动管理、核心路径、详细配置、实战用法到故障排查进行了全面解析,旨在为网络安全从业者提供实用的操作指南和技术参考。 2025-12-26 06:27:29 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

Kali Linux 作为渗透测试与网络安全领域的标杆性操作系统,内置了大量常用的网络服务与工具,其中 Apache、SSH、FTP、Metasploit(MSF)、DHCP 是日常测试中高频使用的核心组件。本文将从服务本质、启动管理、核心路径、详细配置、实战用法、故障排查六个维度,对这五个服务进行全方位、深层次的解析,所有内容均基于实战场景原创梳理,旨在为网络安全从业者、运维人员提供完整的操作指南与技术参考。

Apache(全称 Apache HTTP Server)是全球使用最广泛的开源 HTTP 服务器软件,Kali Linux 内置的是 Apache2 版本。其核心作用是基于 HTTP/HTTPS 协议提供网页服务,在渗透测试中常被用于部署钓鱼页面、搭建漏洞测试环境、存放攻击载荷等场景。相较于其他 HTTP 服务器,Apache 具备高度的灵活性、可扩展性和跨平台性,支持多种模块扩展(如 PHP、Python 解析模块),能适配不同的测试需求。

1. 服务启动/停止/自启全流程管理(root 权限必选)

Kali Linux 基于 Debian 架构,服务管理默认采用 systemd 系统,Apache 服务的所有生命周期操作均通过 systemctl 命令实现,部分场景下也可使用传统的 apache2ctl 命令辅助验证。

# 1. 启动 Apache 服务(首次启动或手动停止后重启)
sudo systemctl start apache2

# 2. 停止 Apache 服务(临时关闭,重启系统后失效)
sudo systemctl stop apache2

# 3. 重启 Apache 服务(修改配置文件后必须执行,使配置生效)
sudo systemctl restart apache2

# 4. 平滑重启(不中断现有连接,适用于生产环境/测试过程中的配置更新)
sudo systemctl reload apache2

# 5. 设置开机自启(渗透测试环境中常用,避免重启系统后重新启动服务)
sudo systemctl enable apache2

# 6. 关闭开机自启(临时测试后清理环境)
sudo systemctl disable apache2

# 7. 查看服务运行状态(核心命令,判断服务是否正常启动)
sudo systemctl status apache2

# 8. 验证 Apache 配置文件语法(修改配置后优先执行,避免语法错误导致启动失败)
sudo apache2ctl configtest

状态查看命令输出解读:若显示“active (running)”且进程号存在,说明服务正常运行;若显示“failed”,则需查看日志定位问题;若显示“inactive (dead)”,说明服务未启动。

2. 核心路径详解(理解配置逻辑的关键)

Apache 的配置文件采用“主配置+子配置+模块配置”的分层结构,核心路径如下,每个路径的作用与文件关联需精准掌握:

  • /var/www/html/:默认网页根目录(DocumentRoot),所有对外提供访问的网页文件均需存放在此目录(或自定义的根目录)。默认首页文件为 index.html、index.php 等,访问时若未指定文件名,Apache 会自动查找此目录下的首页文件。

  • /etc/apache2/:Apache 核心配置目录,包含所有配置文件与模块配置:

    • /etc/apache2/apache2.conf:主配置文件,是 Apache 启动的核心依赖,定义了全局配置(如日志格式、进程数、用户权限等),同时通过“Include”指令引入其他子配置文件。

    • /etc/apache2/ports.conf:端口配置文件,定义 Apache 监听的端口(默认 HTTP 80 端口,HTTPS 443 端口),修改端口后需重启服务生效。

    • /etc/apache2/sites-available/:虚拟主机配置文件存放目录(“可用”状态),所有虚拟主机的配置文件均在此创建,默认包含 000-default.conf(默认虚拟主机)和 default-ssl.conf(HTTPS 虚拟主机模板)。

    • /etc/apache2/sites-enabled/:虚拟主机启用目录(“启用”状态),通过软链接(ln -s)将 sites-available 目录下的配置文件链接到此目录,Apache 启动时仅加载此目录下的配置。

    • /etc/apache2/mods-available/ 与 /etc/apache2/mods-enabled/:模块配置目录,分别存放可用模块与启用模块的配置,如 php8.2 解析模块、rewrite 重写模块等,启用模块需通过 a2enmod 命令。

  • /var/log/apache2/:日志文件目录,渗透测试中可通过日志分析访问记录、攻击痕迹:

    • access.log:访问日志,记录所有客户端对 Apache 的访问请求,包含访问 IP、访问时间、请求方法、请求路径、状态码等信息。

    • error.log:错误日志,记录 Apache 运行过程中的错误信息(如配置错误、文件不存在、权限不足等),是故障排查的核心依据。

3. 详细配置与实战用法(渗透测试核心场景)

(1)基础测试:验证服务可用性

启动 Apache 服务后,可通过三种方式验证:

  • 本地验证:在 Kali 本地打开浏览器,访问 http://localhost 或 http://127.0.0.1,若显示 Apache2 Debian Default Page(默认页面),说明服务正常。

  • 局域网验证:在同一局域网的其他设备上,访问 http://Kali主机IP(如 http://192.168.1.100),能正常显示默认页面则说明服务对外提供访问。

  • 命令行验证:使用 curl 命令测试,curl http://localhost,若返回默认页面的 HTML 代码,说明服务正常。

(2)自定义网页部署(钓鱼页面/测试页面)

渗透测试中常需部署自定义页面(如钓鱼登录页、漏洞测试页面),步骤如下:

# 1. 进入网页根目录 cd /var/www/html/ # 2. 创建自定义页面(示例:钓鱼登录页 index.html) sudo nano index.html # 3. 写入 HTML 代码(简化示例,实际需模拟目标页面样式) <!DOCTYPE html> <html> <head><title>企业邮箱登录</title></head> <body> <form action="login.php" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> # 4. (可选)创建接收数据的 PHP 脚本(记录用户名密码) sudo nano login.php # 写入 PHP 代码 <?php $user = $_POST['username']; $pass = $_POST['password']; $log = "用户名:$user 密码:$pass\n"; file_put_contents('log.txt', $log, FILE_APPEND); header("Location: http://mail.qq.com"); // 跳转至真实邮箱页面,隐藏钓鱼痕迹 ?> # 5. 设置权限(避免因权限不足导致页面无法访问或日志无法写入) sudo chmod 755 /var/www/html/ sudo chmod 644 index.html login.php sudo touch log.txt && sudo chmod 666 log.txt

部署完成后,访问 http://Kali主机IP 即可看到钓鱼页面,用户输入的账号密码会被记录在 log.txt 中。

(3)虚拟主机配置(多网站共存)

当需要同时部署多个网页(如多个钓鱼页面、不同漏洞测试环境)时,可通过虚拟主机实现多网站共存,以基于域名的虚拟主机为例:

# 1. 创建两个虚拟主机的网页根目录 sudo mkdir -p /var/www/site1 sudo mkdir -p /var/www/site2 # 2. 为每个目录创建测试页面 sudo echo "<h1>Site1 - 钓鱼页面</h1>" > /var/www/site1/index.html sudo echo "<h1>Site2 - 漏洞测试页面</h1>" > /var/www/site2/index.html # 3. 设置目录权限 sudo chown -R www-data:www-data /var/www/site1 /var/www/site2 sudo chmod -R 755 /var/www/ # 4. 创建虚拟主机配置文件 # 配置 site1(域名:site1.test) sudo nano /etc/apache2/sites-available/site1.conf # 写入配置 <VirtualHost *:80> ServerName site1.test ServerAlias www.site1.test DocumentRoot /var/www/site1 ErrorLog ${APACHE_LOG_DIR}/site1-error.log CustomLog ${APACHE_LOG_DIR}/site1-access.log combined </VirtualHost> # 配置 site2(域名:site2.test) sudo nano /etc/apache2/sites-available/site2.conf # 写入配置 <VirtualHost *:80> ServerName site2.test ServerAlias www.site2.test DocumentRoot /var/www/site2 ErrorLog ${APACHE_LOG_DIR}/site2-error.log CustomLog ${APACHE_LOG_DIR}/site2-access.log combined </VirtualHost> # 5. 启用虚拟主机配置(创建软链接) sudo a2ensite site1.conf sudo a2ensite site2.conf # 6. 禁用默认虚拟主机(可选,避免冲突) sudo a2dissite 000-default.conf # 7. 验证配置语法并重启 Apache sudo apache2ctl configtest sudo systemctl restart apache2 # 8. 配置域名解析(客户端需设置,使域名指向 Kali 主机) # 方法1:客户端 hosts 文件配置(Windows:C:\Windows\System32\drivers\etc\hosts;Linux:/etc/hosts) # 添加内容:Kali主机IP site1.test www.site1.test site2.test www.site2.test

配置完成后,在客户端浏览器访问 http://site1.test 和 http://site2.test,即可分别访问两个不同的网站。

(4)HTTPS 配置(启用 SSL/TLS 加密)

为提升钓鱼页面的可信度或模拟 HTTPS 环境测试,需为 Apache 配置 HTTPS,使用 Let's Encrypt 免费证书(需外网可达)或自签名证书(局域网测试):

# 方案1:自签名证书(局域网测试用) # 1. 生成自签名证书(存放在 /etc/apache2/ssl 目录) sudo mkdir /etc/apache2/ssl sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt # 执行过程中需输入国家、省份、组织等信息,可随意填写 # 2. 启用 SSL 模块 sudo a2enmod ssl # 3. 配置 HTTPS 虚拟主机(基于默认的 default-ssl.conf 修改) sudo nano /etc/apache2/sites-available/default-ssl.conf # 修改核心配置项 <VirtualHost _default_:443> ServerName site1.test DocumentRoot /var/www/site1 SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key ErrorLog ${APACHE_LOG_DIR}/ssl-error.log CustomLog ${APACHE_LOG_DIR}/ssl-access.log combined </VirtualHost> # 4. 启用 HTTPS 虚拟主机并重启 Apache sudo a2ensite default-ssl.conf sudo systemctl restart apache2 # 方案2:Let's Encrypt 免费证书(外网可达场景) # 1. 安装 Certbot 工具 sudo apt update && sudo apt install certbot python3-certbot-apache -y # 2. 申请并自动配置证书 sudo certbot --apache -d site1.test # 按提示输入邮箱、同意协议,自动完成证书申请与配置

配置完成后,访问 https://site1.test,浏览器会提示证书信息(自签名证书会显示不安全,可在测试客户端手动信任)。

4. 故障排查(常见问题与解决方法)

  • 问题1:启动 Apache 失败,提示“Address already in use”原因:80/443 端口被其他服务占用(如 Nginx、迅雷等)。解决方法:查看占用端口的进程,停止对应服务或修改 Apache 端口。# 查看 80 端口占用进程 sudo lsof -i :80 # 停止占用进程(如进程号为 1234) sudo kill -9 1234 # 或修改 Apache 端口(编辑 /etc/apache2/ports.conf,将 Listen 80 改为 Listen 8080) sudo nano /etc/apache2/ports.conf sudo systemctl restart apache2

  • 问题2:访问页面提示“403 Forbidden”原因:网页根目录或文件权限不足,或 Apache 配置中禁止访问。解决方法:调整目录/文件权限,检查配置文件中的访问控制规则。# 调整权限 sudo chown -R www-data:www-data /var/www/html/ sudo chmod -R 755 /var/www/ # 检查配置文件中的访问控制(编辑 apache2.conf) sudo nano /etc/apache2/apache2.conf # 确保 <Directory /var/www/> 段配置为 <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>

SSH(Secure Shell)是一种基于加密协议的远程登录工具,用于在不安全的网络中为远程登录、文件传输提供安全保障。Kali Linux 内置 OpenSSH Server(开源 SSH 服务器),通过 SSH 可远程控制 Kali 主机、传输渗透测试工具与数据,是渗透测试中远程操作的核心方式,相较于 Telnet 等明文协议,SSH 所有数据传输均经过加密,能有效防止信息泄露。

1. 服务启动/停止/自启管理

OpenSSH Server 在 Kali 中默认可能未启动,需手动管理,命令如下:

# 1. 启动 SSH 服务
sudo systemctl start ssh

# 2. 停止 SSH 服务
sudo systemctl stop ssh

# 3. 重启 SSH 服务(修改配置后生效)
sudo systemctl restart ssh

# 4. 平滑重启(不中断现有连接)
sudo systemctl reload ssh

# 5. 设置开机自启(远程测试环境必备)
sudo systemctl enable ssh

# 6. 关闭开机自启
sudo systemctl disable ssh

# 7. 查看服务状态
sudo systemctl status ssh

# 8. 查看 SSH 监听端口(默认 22 端口)
sudo netstat -tulnp | grep sshd

2. 核心路径与配置文件解读

  • /etc/ssh/:SSH 核心配置目录,包含服务器配置、客户端配置等:

    • sshd_config:SSH 服务器核心配置文件,定义监听端口、登录权限、认证方式等,所有服务器端规则均在此配置。

    • ssh_config:SSH 客户端配置文件,定义客户端连接远程 SSH 服务器的默认规则(如默认端口、超时时间等)。

    • ssh_host_*_key:SSH 服务器密钥文件(RSA、ED25519 等算法),用于客户端与服务器的身份认证,首次启动 SSH 服务时自动生成。

  • ~/.ssh/:用户级 SSH 配置目录,存放用户的密钥对、已知主机列表等(每个用户独立):

    • id_rsa:RSA 算法私钥文件(核心机密,不可泄露)。

    • id_rsa.pub:RSA 算法公钥文件(可公开,用于配置密钥登录)。

    • known_hosts:记录客户端已连接过的 SSH 服务器公钥,避免中间人攻击,若服务器公钥变化,会提示警告。

    • authorized_keys:存放允许登录当前用户的客户端公钥,配置密钥登录时需将客户端公钥写入此文件。

  • /var/log/auth.log:SSH 登录日志文件,记录所有 SSH 登录尝试(成功/失败)、登录 IP、登录用户等信息,是安全审计与攻击溯源的核心依据。

3. 详细配置与实战用法

(1)基础密码登录(默认方式)

SSH 默认支持密码登录,步骤如下:

# 1. 确保 Kali 端 SSH 服务已启动
sudo systemctl start ssh

# 2. 客户端连接(Windows 需安装 OpenSSH 客户端或使用 Xshell、Putty 等工具)
# Linux/macOS 客户端直接使用 ssh 命令
ssh 用户名@Kali主机IP
# 示例:Kali 用户名为 kali,IP 为 192.168.1.100
ssh [email protected]

# 3. 非默认端口连接(若修改了 SSH 端口,如 2222)
ssh [email protected] -p 2222

# 4. 输入 Kali 用户名对应的密码,验证通过后即可远程登录

注意:密码登录存在暴力破解风险,渗透测试环境中建议仅在临时测试时使用,长期远程环境需配置密钥登录。

(2)密钥登录(安全登录方式,推荐)

密钥登录基于非对称加密算法(如 RSA、ED25519),无需输入密码,安全性远高于密码登录,步骤如下:

# 步骤1:客户端生成密钥对(Windows/Linux/macOS 客户端均适用)
# 生成 RSA 密钥对(-b 指定密钥长度,2048 或 4096,长度越长越安全)
ssh-keygen -t rsa -b 4096
# 执行后按提示操作:
# 1. 选择密钥保存路径(默认 ~/.ssh/id_rsa,直接回车即可)
# 2. 设置密钥密码(可选,为空则无需密码,建议设置复杂密码提升安全性)

# 步骤2:将客户端公钥上传至 Kali 服务器
# 方法1:使用 ssh-copy-id 命令(简单高效,推荐)
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
# 输入 Kali 用户密码,即可自动将公钥写入 ~/.ssh/authorized_keys

# 方法2:手动上传(适用于 ssh-copy-id 不可用的场景)
# 1. 客户端将公钥内容复制到剪贴板
cat ~/.ssh/id_rsa.pub
# 2. 远程登录 Kali 服务器,编辑 authorized_keys 文件
ssh [email protected]
nano ~/.ssh/authorized_keys
# 3. 将客户端公钥内容粘贴到文件中,保存退出

# 步骤3:配置 Kali 服务器禁用密码登录(可选,进一步提升安全性)
sudo nano /etc/ssh/sshd_config
# 修改以下配置项
PasswordAuthentication no  # 禁用密码登录
PubkeyAuthentication yes   # 启用密钥登录
AuthorizedKeysFile .ssh/authorized_keys  # 指定公钥文件路径

# 步骤4:重启 SSH 服务使配置生效
sudo systemctl restart ssh

# 步骤5:客户端测试密钥登录
ssh [email protected]
# 若设置了密钥密码,输入密钥密码即可登录;未设置则直接登录,无需输入密码

(3)SSH 端口转发(渗透测试核心技巧)

SSH 端口转发(端口映射)可实现内网穿透、流量加密传输,在渗透测试中常用于访问内网不可直接访问的服务(如内网数据库、内网 Web 服务),分为本地端口转发、远程端口转发、动态端口转发三种场景:

1)本地端口转发(将远程服务映射到本地)

场景:客户端无法直接访问目标内网服务(如 192.168.2.10:8080),但可访问内网中的 Kali 主机(192.168.2.20),通过 Kali 主机转发流量。

# 命令格式:ssh -L 本地端口:目标服务IP:目标服务端口 用户名@Kali主机IP
# 示例:将 192.168.2.10:8080 映射到本地 8888 端口
ssh -L 8888:192.168.2.10:8080 [email protected]
# 映射完成后,访问本地 http://127.0.0.1:8888,即可访问 192.168.2.10:8080

2)远程端口转发(将本地服务映射到远程)

场景:Kali 主机在内网(192.168.1.100),客户端在外网,无法直接访问 Kali 主机,需将 Kali 本地服务(如 80 端口的 Apache 服务)映射到外网可访问的服务器(203.0.113.50)。

# 命令格式:ssh -R 远程服务器端口:本地服务IP:本地服务端口 用户名@外网服务器IP
# 示例:将 Kali 本地 80 端口映射到外网服务器 203.0.113.50 的 8080 端口
ssh -R 8080:127.0.0.1:80 [email protected]
# 映射完成后,访问外网服务器 http://203.0.113.50:8080,即可访问 Kali 的 Apache 服务

3)动态端口转发(创建 SOCKS 代理)

场景:通过 Kali 主机创建 SOCKS 代理,客户端所有流量通过代理访问内网,适用于内网多服务探测。

# 命令格式:ssh -D 本地代理端口 用户名@Kali主机IP
# 示例:创建本地 1080 端口的 SOCKS 代理
ssh -D 1080 [email protected]
# 配置客户端代理(如浏览器、Burp Suite):
# 代理类型:SOCKS5,代理地址:127.0.0.1,端口:1080
# 配置完成后,客户端流量即可通过 Kali 主机访问内网

(4)SSH 文件传输(scp/sftp 命令)

SSH 提供 scp(安全复制)和 sftp(安全文件传输协议)两种文件传输方式,无需额外启动 FTP 服务,安全性更高。

# 1. scp 命令(简单文件/目录传输)
# 客户端上传文件到 Kali 服务器
scp 本地文件路径 [email protected]:目标路径
# 示例:上传本地 test.exe 到 Kali 的 /home/kali/ 目录
scp ~/test.exe [email protected]:/home/kali/

# 客户端从 Kali 服务器下载文件
scp [email protected]:目标文件路径 本地路径
# 示例:下载 Kali 的 /home/kali/log.txt 到本地 ~/ 目录
scp [email protected]:/home/kali/log.txt ~/

# 传输目录(加 -r 参数)
scp -r 本地目录路径 [email protected]:目标目录路径

# 2. sftp 命令(交互式文件传输,适用于多文件操作)
# 连接 Kali 服务器
sftp [email protected]

# 常用 sftp 命令
ls  # 查看 Kali 服务器当前目录文件
lcd 本地目录  # 切换本地目录
cd 目标目录  # 切换 Kali 服务器目录
put 本地文件  # 上传文件
get 服务器文件  # 下载文件
rm 服务器文件  # 删除服务器文件
mkdir 目录名  # 在服务器创建目录
exit  # 退出 sftp 连接

4. 安全加固与故障排查

(1)安全加固措施(避免被攻击)

# 1. 修改默认 SSH 端口(避免暴力破解扫描) sudo nano /etc/ssh/sshd_config # 将 Port 22 改为其他端口(如 2222,建议使用 1024-65535 之间的端口) Port 2222 sudo systemctl restart ssh # 2. 禁用 root 用户登录(root 权限过高,被破解后风险极大) sudo nano /etc/ssh/sshd_config PermitRootLogin no sudo systemctl restart ssh # 3. 限制允许登录的用户 sudo nano /etc/ssh/sshd_config # 添加配置:仅允许 kali 用户登录 AllowUsers kali sudo systemctl restart ssh # 4. 设置登录超时时间(避免闲置连接被利用) sudo nano /etc/ssh/sshd_config ClientAliveInterval 60 # 每 60 秒发送一次心跳包 ClientAliveCountMax 3 # 3 次无响应则断开连接 sudo systemctl restart ssh

(2)故障排查

  • 问题1:客户端无法连接 SSH,提示“Connection refused”原因:Kali 端 SSH 服务未启动、端口被防火墙拦截、端口修改后未使用新端口连接。解决方法:启动 SSH 服务,开放防火墙端口,使用正确端口连接。# 开放防火墙端口(如 2222 端口) sudo ufw allow 2222/tcp sudo ufw reload # 查看防火墙状态 sudo ufw status

  • 问题2:密钥登录失败,提示“Permission denied (publickey)”原因:authorized_keys 文件权限过高、公钥内容错误、密钥文件权限过高。解决方法:调整权限,验证公钥内容。# 调整 authorized_keys 权限(必须为 600,否则 SSH 会拒绝使用) chmod 600 ~/.ssh/authorized_keys # 调整 .ssh 目录权限(必须为 700) chmod 700 ~/.ssh/ # 验证公钥内容是否正确 cat ~/.ssh/authorized_keys

FTP(File Transfer Protocol,文件传输协议)是用于在网络中进行文件传输的标准协议,Kali Linux 内置 vsftpd(Very Secure FTP Daemon)服务,该服务以安全性高、轻量、稳定著称,支持匿名登录、本地用户登录等多种认证方式,在渗透测试中常用于快速搭建文件传输服务器,实现攻击载荷上传、目标主机数据下载等功能。

1. 服务启动/停止/自启管理

# 1. 启动 vsftpd 服务
sudo systemctl start vsftpd

# 2. 停止 vsftpd 服务
sudo systemctl stop vsftpd

# 3. 重启 vsftpd 服务(修改配置后生效)
sudo systemctl restart vsftpd

# 4. 设置开机自启
sudo systemctl enable vsftpd

# 5. 关闭开机自启
sudo systemctl disable vsftpd

# 6. 查看服务状态
sudo systemctl status vsftpd

# 7. 查看 FTP 监听端口(默认 21 端口,主动模式)
sudo netstat -tulnp | grep vsftpd

2. 核心路径与配置文件解读

  • /etc/vsftpd.conf:vsftpd 核心配置文件,所有服务规则(如匿名登录、写权限、端口范围等)均在此配置,默认配置较为严格(禁用匿名登录、禁止写权限)。

  • /etc/vsftpd.user_list:用户列表文件,默认情况下,在此文件中的用户会被禁止登录 FTP(需结合配置文件中的 userlist_deny 选项)。

  • /etc/vsftpd.chroot_list:禁锢用户目录列表文件,在此文件中的用户登录后仅能访问自身家目录,无法切换到其他目录(需结合 chroot 相关配置)。

  • /var/log/vsftpd.log:vsftpd 日志文件,记录用户登录、文件上传/下载、错误信息等,用于安全审计与故障排查。

  • 用户家目录:本地用户登录 FTP 后,默认进入自身家目录(如 /home/kali/)。

  • /srv/ftp/:匿名用户默认根目录,匿名登录后仅能访问此目录下的文件。

3. 详细配置与实战用法

vsftpd 默认配置较为严格,需根据测试需求修改配置文件,常见场景分为匿名登录配置、本地用户登录配置两种。

(1)匿名登录配置(允许任意用户匿名访问)

场景:快速搭建公共文件传输服务器,供测试设备上传/下载文件(渗透测试中常用于让目标主机下载攻击载荷)。

# 步骤1:修改 vsftpd 配置文件
sudo nano /etc/vsftpd.conf

# 修改/添加以下配置项
anonymous_enable=YES  # 启用匿名登录
anon_upload_enable=YES  # 允许匿名用户上传文件
anon_mkdir_write_enable=YES  # 允许匿名用户创建目录
anon_other_write_enable=YES  # 允许匿名用户删除/修改文件(测试场景用,生产环境禁用)
anon_root=/srv/ftp/  # 指定匿名用户根目录
local_enable=NO  # 禁用本地用户登录(仅允许匿名登录)
write_enable=YES  # 启用写权限(上传/创建目录需此权限)
anon_umask=022  # 匿名用户上传文件的权限掩码(022 对应权限 644)
xferlog_enable=YES  # 启用日志记录
xferlog_file=/var/log/vsftpd.log  # 指定日志文件路径

# 步骤2:设置匿名用户根目录权限(关键,避免权限不足导致上传失败)
# 匿名用户的系统用户为 ftp,需确保 ftp 用户对根目录有写权限
sudo chown -R ftp:ftp /srv/ftp/
sudo chmod -R 777 /srv/ftp/  # 测试场景简化权限,生产环境需严格控制

# 步骤3:重启 vsftpd 服务使配置生效
sudo systemctl restart vsftpd

# 步骤4:测试匿名登录
# 本地测试
ftp localhost
# 登录时用户名输入 anonymous,密码任意(如空或 [email protected])
# 远程测试(其他设备)
ftp 192.168.1.100

# 匿名用户常用 FTP 命令
ls  # 查看当前目录文件
cd 目录名  # 切换目录
put 本地文件  # 上传文件(客户端→FTP服务器)
get 服务器文件  # 下载文件(FTP服务器→客户端)
mkdir 目录名  # 创建目录
rm 文件名  # 删除文件
quit  # 退出登录

(2)本地用户登录配置(仅允许指定本地用户访问)

场景:需要权限控制的文件传输,仅允许 Kali 本地存在的用户登录(如渗透测试团队内部文件共享)。

# 步骤1:创建 FTP 专用本地用户(避免使用 kali 等特权用户)
sudo useradd -m ftpuser  # 创建用户并生成家目录(/home/ftpuser/)
sudo passwd ftpuser  # 设置密码(如 123456@FTP)

# 步骤2:修改 vsftpd 配置文件
sudo nano /etc/vsftpd.conf

# 修改/添加以下配置项
anonymous_enable=NO  # 禁用匿名登录
local_enable=YES  # 启用本地用户登录
write_enable=YES  # 启用写权限
local_umask=022  # 本地用户上传文件权限掩码(022 对应 644)
chroot_local_user=YES  # 禁锢所有本地用户在自身家目录(无法切换到其他目录,提升安全性)
chroot_list_enable=YES  # 启用禁锢目录例外列表
chroot_list_file=/etc/vsftpd.chroot_list  # 例外列表文件(在此文件中的用户不受禁锢)
userlist_enable=YES  # 启用用户列表
userlist_deny=NO  # 仅允许 user_list 文件中的用户登录(白名单模式)
userlist_file=/etc/vsftpd.user_list  # 用户白名单文件
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

# 步骤3:配置用户白名单(仅允许 ftpuser 登录)
sudo nano /etc/vsftpd.user_list
# 添加内容(仅一行)
ftpuser

# 步骤4:(可选)配置禁锢目录例外列表(若需允许某用户访问其他目录)
sudo nano /etc/vsftpd.chroot_list
# 添加需要例外的用户名(如无则为空)

# 步骤5:设置本地用户家目录权限
sudo chown -R ftpuser:ftpuser /home/ftpuser/
sudo chmod -R 755 /home/ftpuser/

# 步骤6:重启 vsftpd 服务
sudo systemctl restart vsftpd

# 步骤7:测试本地用户登录
ftp 192.168.1.100
# 用户名输入 ftpuser,密码输入设置的 123456@FTP
# 登录后默认进入 /home/ftpuser/ 目录,无法切换到 /root/、/etc/ 等目录(因启用了 chroot)

(3)主动模式与被动模式配置(解决防火墙拦截问题)

FTP 存在主动模式和被动模式两种数据传输方式,默认情况下可能因防火墙拦截导致文件传输失败,需手动配置端口范围:

# 编辑 vsftpd 配置文件,添加被动模式端口范围配置
sudo nano /etc/vsftpd.conf

# 添加以下配置项(被动模式)
pasv_enable=YES  # 启用被动模式
pasv_min_port=20000  # 被动模式最小端口
pasv_max_port=20100  # 被动模式最大端口
pasv_address=192.168.1.100  # FTP 服务器 IP(避免客户端无法获取正确 IP)

# (可选)主动模式配置
port_enable=YES  # 启用主动模式
connect_from_port_20=YES  # 主动模式数据传输使用 20 端口

# 重启 vsftpd 服务
sudo systemctl restart vsftpd

# 开放防火墙端口(被动模式端口范围+21端口)
sudo ufw allow 21/tcp
sudo ufw allow 20000:20100/tcp
sudo ufw reload

主动模式:服务器主动向客户端发起连接(使用 20 端口传输数据),适用于客户端防火墙开放入站连接的场景;被动模式:客户端主动向服务器发起连接(使用配置的端口范围传输数据),适用于服务器防火墙限制入站连接的场景,渗透测试中建议优先使用被动模式。

4. 故障排查

  • 问题1:匿名用户无法上传文件,提示“553 Could not create file”原因:匿名用户根目录权限不足,或未启用 anon_upload_enable 配置。解决方法:调整目录权限,检查配置文件。# 调整权限 sudo chown -R ftp:ftp /srv/ftp/ sudo chmod -R 777 /srv/ftp/ # 检查配置文件 grep "anon_upload_enable" /etc/vsftpd.conf # 确保为 YES sudo systemctl restart vsftpd

  • 问题2:本地用户登录后无法切换目录,提示“500 OOPS: chroot”原因:启用 chroot 后,用户家目录权限过高(vsftpd 要求 chroot 目录权限不能为 777)。解决方法:调整家目录权限。sudo chmod 755 /home/ftpuser/ sudo systemctl restart vsftpd

Metasploit Framework(简称 MSF)是全球最流行的开源渗透测试框架,集成了漏洞利用模块、攻击载荷(Payload)、后渗透模块等核心组件,支持多种操作系统(Windows、Linux、macOS 等)和多种漏洞类型的测试。Kali Linux 内置 MSF 完整版本,通过 msfconsole(MSF 控制台)可实现漏洞扫描、漏洞利用、权限提升、持久化控制等全流程渗透测试操作,是渗透测试工程师的核心工具。

1. MSF 启动与环境初始化

MSF 依赖 PostgreSQL 数据库存储漏洞信息、扫描结果、会话信息等,启动前需先初始化数据库环境:

# 步骤1:启动 PostgreSQL 数据库服务
sudo systemctl start postgresql

# 步骤2:设置 PostgreSQL 开机自启(可选)
sudo systemctl enable postgresql

# 步骤3:初始化 MSF 数据库(首次启动 MSF 必须执行,仅需执行一次)
sudo msfdb init
# 执行成功后,会创建 MSF 专用数据库(默认数据库名:msf,用户名:msf,密码:随机生成)

# 步骤4:启动 MSF 控制台(核心命令)
msfconsole
# 启动成功后,界面会显示 MSF 标志,提示符变为 msf6 >

MSF 控制台常用基础命令:

help  # 查看所有命令帮助
search 关键词  # 搜索模块(漏洞利用、payload 等)
use 模块路径  # 加载指定模块
show options  # 查看当前模块的配置项
set 配置项 值  # 设置配置项(如 set RHOSTS 目标IP)
run/exploit  # 执行当前模块(漏洞利用模块用 exploit,辅助模块用 run)
sessions  # 查看所有活跃会话(后渗透控制会话)
session -i 会话ID  # 进入指定会话
exit  # 退出 MSF 控制台

2. 核心路径与模块分类

(1)核心路径

  • /usr/share/metasploit-framework/:MSF 安装目录,包含所有核心模块、工具、配置文件。

  • /usr/share/metasploit-framework/modules/:核心模块目录,按功能分类存放,是 MSF 的核心组成部分:

    • exploits/:漏洞利用模块,针对具体漏洞的攻击代码(如 MS17-010 永恒之蓝漏洞利用模块)。

    • payloads/:攻击载荷模块,漏洞利用成功后在目标主机执行的代码(如反向连接、正向连接、反弹 Shell 等)。

    • auxiliary/:辅助模块,用于信息收集、端口扫描、密码破解等辅助操作(不具备漏洞利用功能)。

    • post/:后渗透模块,漏洞利用成功获取会话后,用于权限提升、信息收集、持久化控制等操作。

    • encoders/:编码模块,对 payload 进行编码,避免被杀毒软件(AV)检测到(免杀基础)。

    • nops/:空指令模块,用于调整 payload 长度,确保漏洞利用时内存对齐。

  • /etc/metasploit/:MSF 配置目录,包含数据库配置、框架配置等。

  • ~/.msf4/:用户级配置目录,存放用户自定义模块、会话记录、日志等。

(2)模块分类详解

  1. 漏洞利用模块(exploits):按目标系统和漏洞类型分类,如 windows/smb/ms17_010_eternalblue(Windows SMB 服务 MS17-010 漏洞)、linux/ssh/ssh_login(SSH 暴力破解漏洞)。每个模块对应一个或多个具体漏洞,需结合目标漏洞情况选择。

  2. 攻击载荷模块(payloads):分为三种类型:

    1. Singles:独立 payload,无需依赖其他组件,直接执行指定功能(如执行命令、反弹 Shell),适用于漏洞利用后直接获取简单交互。

    2. Stagers:分段 payload,分为舞台(Stager)和载荷(Stage),舞台体积小,用于漏洞利用成功后建立连接,再下载并执行完整载荷,适用于漏洞利用空间有限的场景(如缓冲区溢出漏洞)。

    3. Stages:完整 payload,由 Stager 下载后执行,功能强大(如 Meterpreter 会话),是渗透测试中最常用的 payload


文章来源: https://www.freebuf.com/articles/system/463922.html
如有侵权请联系:admin#unsafe.sh