vmpwn

luyanpei

1. VM 基础架构与执行流程

  • Dispatch Loop
    • 识别 opcode 分发方式(switch…case、跳表、函数指针数组等)。
    • 了解如何在反汇编中快速定位主循环和各个指令处理函数。
  • 寄存器与栈模型
    • 虚拟寄存器(如 R0–R7)、虚拟栈及其指针管理(SP、FP)。
    • 区分虚拟寄存器和真实寄存器的作用,如何跟踪它们在内存中的实现。
  • 内存模型
    • 虚拟内存区划分:代码段、数据段、堆、栈等。
    • 边界检查:LOAD/STORE 是否做了合法性验证(下标范围、页对齐)。

2. 指令语义逆向与行为验证

  • 静态分析
    • 用 IDA/Ghidra 识别每个 opcode 的 case 分支或函数,理清参数传递和副作用。
    • 标注 ip(指令指针)增量、跳转计算方式。
  • 动态观测
    • 构造最小可执行字节码,结合日志或 gdb 插桩,观察寄存器、内存的变化。
    • 快速编写 Python 驱动脚本,对 VM 进行批量指令测试。

3. 常见漏洞类型与利用思路

  1. 越界/缺乏边界检查
    • LOAD addr → valueSTORE addr, value:若缺少 0 ≤ addr < VM_MEM_SIZE,即可实现任意读写。
  2. 类型混淆
    • 当整数和地址类型无严格区分时,可把“常量”当指针跳转或写入。
  3. 控制流劫持
    • CALL targetRET 指令不做有效校验,可构造伪造调用帧或逼 ip 指向任意地址。
  4. 虚拟堆/栈漏洞
    • 虚拟堆的分配与释放实现(如 freelist、tcache 模拟)存在 double-free、use-after-free 或 off-by-one 越界,能在 VM 空间内任意分配或重用 chunk。
  5. 信息泄露
    • 某些指令可能会把内存内容打印或返回给外部,泄露真实内存地址或 libc 基址,辅助后续 ret2libc/ROP。

4. 利用技术与常用套路

  1. 任意地址读写 → GOT/函数指针覆盖
    • 直接把 GOT 表或虚拟机中保存真实函数指针的表改写为 systemmprotect 等。
  2. 构造虚拟 ROP 链
    • 在 VM 内存中布局一系列伪造“返回地址”或跳转指令,实现类似 ROP 的控制流。
  3. 沙箱绕过
    • 如果 VM 对某些 syscall 或字符串执行做了拦截,需借助混淆指令或多步写入绕过检测。
  4. 结合真实漏洞利用
    • 当 VM 漏洞触发真实内存写入时,可立刻切换到标准 pwn 技术(堆、栈、格式化字符串等)完成表达式链。

5. 工具与方法论

  • 脚本驱动
    • 用 Python/pwntools 快速发送一系列字节码,观察 VM 行为。
  • 自动化符号执行
    • 对分支较多的 VM,可用 angr/Unicorn 做自动化路径探索,定位边界检查缺失。
  • 差分测试
    • 构造合法 vs. 畸形指令流,自动化对比寄存器或输出差异,快速识别异常处理分支。
  • 日志与断点
    • 在关键 opcode 处理入口打断点,输出 ip、寄存器、栈/内存快照,抓取漏洞触发点。
  • Title: vmpwn
  • Author: luyanpei
  • Created at : 2025-05-09 00:07:05
  • Updated at : 2025-05-09 19:39:50
  • Link: https://redefine.ohevan.com/2025/05/09/vmpwn/
  • License: All Rights Reserved © luyanpei