Ox00 前言

Ox01 名词解释

  • fuzz:是 Fuzz testing 的缩写,全称模糊测试,是一种通过无规则试探探测漏洞的的方式。

  • exploit:通常指用于验证漏洞的一段代码

  • shellcode:是一段利用特定漏洞的代码

  • payload:在漏洞领域,指的是实际用于攻击的那一段代码

  • GetPC:获取当前指令所在地址的一种方式

    • 缺点是会产生大量的 0,可能被截断(“\n”, "\r"," ", "\0")

    • 使用浮点指令 FSTENV,缺点是会损坏栈的0xc大小的数据

    • 缺点是会产生一条冗余的指令,inc ebx


Ox10 获取Kernel32.dll加载基址的方法

mov eax, fs:[0x30];			 // 获取 PEB
mov eax, [eax + 0x0C];		 //	获取 PEB_LDR_DATA
mov eax, [eax + 0x1c];		 // LIST_ENTRY.Flink -> 第一个模块   ntdll
mov eax, [eax];				 // kernelbase.dll -> 第二个模块
mov edx, [eax + 0x08];		 // _LDR_DATA_TABLE_ENTRY.DllBase;
mov kernel32, edx;           // kernel32.base

IMG


Ox20 GETPC的方法

  • 使用短CALL,将当前地址压栈,再pop
    • E8 00 00 00 00
      • 可能会截断
    • E8 FF FF FF FF
      • 使其跳1字节
  •  利用浮点指令FSTENV,会损耗栈中0xC大小的数据

Ox30 ret2libc和ROP链原理

  • DEP绕过目标:跳至可执行代码的区域,执行解保护操作后,回跳至Shellcode
    • 利用系统库,跳至VirtualProtect
    • 利用堆喷

Ox40 堆喷原理

  • 暴力申请内存
    • 批量申请内存,使其跳至可执行代码处
    • 无滑板指令可用时需配合ROP链进行解保护

Ox50 漏洞分析的一般过程

  • 模糊测试FUZZ
  • 生成有序数定位溢出点偏移
  • 寻找jmp esp指令地址
  • 编写shellcode进行利用