0x17 漏洞利用

1. 名词解释


  • fuzz:是 Fuzz testing 的缩写,全称模糊测试,是一种通过无规则试探探测漏洞的的方式。
  • exploit:通常指用于验证漏洞的一段代码
  • shellcode:是一段利用特定漏洞的代码
  • payload:在漏洞领域,指的是实际用于攻击的那一段代码
  • GetPC:获取当前指令所在地址的一种方式
    • 缺点是会产生大量的 0,可能被截断(“\n”, “\r”,” “, “\0”)image.png

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

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

2. 获取kernel32的基址


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