pwn入门教程–0x01(必备知识)
• Binary Exploitation
• Pwn即Binary Exploitation,就是利用二进制漏洞来达到控制程序的工作流程(Control Flow)
• 其目的就在于获得程序的控制权从而来控制程序所在主机
• Binary Format
即二进制文件的格式,如下:
• 在Linux上叫做ELF(Executable and Linking Format)文件
• 组成部分分为
·rodata:read only data(只读数据)
·data:数据节
·code:编译好的代码
·stack:栈
·heap:堆
上图中的Memory Mapping就是指程序在运行后会被映射到内存上,称为Memory Mapping(内存映射)
• x64 Calling Convention
即调用约定
• rdi, rsi, rdx, rcx, r8, r9, (push to stack)
• rdi, rsi, rdx, r10, r8, r9, (push to stack) for system call
• return value is stored in rax
具体过程入下方动态图所示
• Stack Frame
堆叠框架
• Function Prologue
• Function Epilogue
具体过程 如下方动态图所示
• Buffer Overflow
缓冲区溢出,其实就是放的东西太多溢出来了
具体过程 如下方动态图所示
• Protection(保护机制)
• CANNARY(栈保护) –金丝雀
可以用checksec命令检查开启情况
栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让 shellcode 能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈底插入 cookie 信息,当函数真正返回的时候会验证 cookie 信息是否合法 (栈帧销毁前测试该值是否被改变),如果不合法就停止程序运行 (栈溢出发生)。攻击者在覆盖返回地址的时候往往也会将 cookie 信息给覆盖掉,导致栈保护检查失败而阻止 shellcode 的执行,避免漏洞利用成功。在 Linux 中我们将 cookie 信息称为 Canary。
• NX(DEP)(数据执行保护 Data Execution Prevention)
可以用checksec命令检查开启情况
NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
• ASLR
内存地址随机化机制(address space layout randomization)
可以用checksec命令检查开启情况
有以下三种情况:
0 - 表示关闭进程地址空间随机化
1 - 表示将mmap的基址,stack和vdso页面随机化
2 - 表示在1的基础上增加堆(heap)的随机化
• PIE (Position Independent Execution)
可以用checksec命令检查开启情况
开启后,code与data都会跟着ALSR打乱基址
本节就到这里了,有问题可以留言,希望下一节还有你哦~