第三章 漏洞利用技术
课时1 栈溢出-这些都是套路
0X01 基础知识
1、寄存器:rsp/esp、rbp/ebp等
2、栈:
3、函数调用:call、ret
4、调用约定:
- __stdcall、__cdecl、__fastcall、__thiscall、__nakedcall、__pascal
5、参数传递:取决于调用约定,默认如下
- X86从右向左入栈
- X64优先寄存器,参数过多时才入栈
6、函数调用相关指令解读:
- call
- leave
- ret
0X02 栈溢出的保护机制
1、栈上的数据无法被当成指令来执行
- 数据执行保护(NX/DEP)
- 绕过方法:ROP
2、让攻击者难以找到shellcode地址
- 地址空间布局随机化(ASLR)
- 绕过方法:infoleak、ret2diresolve、ROP
3、检测Stack Overflow
- Stack Canary/Cookie
- 绕过方法:infoleak
4、现在NX+Stack Canary+ASLR基本是标配
0X03 栈溢出的利用方法
1、现代栈溢出利用技术基础:ROP
- 一种代码复用技术,通过控制栈调用来劫持控制