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
Ox20 GETPC的方法
- 使用短CALL,将当前地址压栈,再pop
- E8 00 00 00 00
- 可能会截断
- E8 FF FF FF FF
- 使其跳1字节
- E8 00 00 00 00
- 利用浮点指令FSTENV,会损耗栈中0xC大小的数据
Ox30 ret2libc和ROP链原理
- DEP绕过目标:跳至可执行代码的区域,执行解保护操作后,回跳至Shellcode
- 利用系统库,跳至VirtualProtect
- 利用堆喷
Ox40 堆喷原理
- 暴力申请内存
- 批量申请内存,使其跳至可执行代码处
- 无滑板指令可用时需配合ROP链进行解保护
Ox50 漏洞分析的一般过程
- 模糊测试FUZZ
- 生成有序数定位溢出点偏移
- 寻找jmp esp指令地址
- 编写shellcode进行利用
