二进制漏洞与利用学习

二进制漏洞与利用学习
一、主要术语

  • Binary:由编译类语言生成的可执行程序
  • Vulnerability:Binary中包含的可被利用的Bug
  • Exploit:借助Vulnerability来劫持Binary控制流的、经过特殊构造的数据
  • 0day:可被exploit的位置Vulnerability
  • Pwn:发现Vulnerability以及开发exploit的工作

二、目的:

  • 获取shell
  • 获取计算机上的敏感信息
  • 上串并安装Malware
  • 对计算机实施破坏

三、根本原因:
(1)通道问题:

  • 计算机中数据和控制通道隔离性差
  • 存在从数据通道信息转移到控制通道的可能

(2)逻辑问题

  • 对边界条件的检查不完善
  • 对内存管理不善
  • 逻辑不严谨或太复杂

四、分类:

  • Stack-Based
  • Heap-Based
  • Integer Issue
  • Pointer Issue
  • Format Strig Vulnerability
  • Race Condition

五、基础知识(Knowledge Base)

  • ELF:linux中可执行文件
  • PE:windows下可执行文件
    ELF文件格式

  • PLT:程序局部表

  • GOT:全局偏移表
  • X86指令大小不固定,不对齐,ARM指令大小为4B,且对齐(Aligned)

六、防护机制:
1.NX/W^X
(1)解释:数据页不可执行,代码页不可写
(2)Bypass:

- ret2lib:令控制流跳转到库代码中执行
- ROP(Return Oriented Programming):从内存中寻找Gadget(每个Gadget都以return结尾,返回调用该函数的代码所在的rip后的地址)并将其组成具有一定功能的代码 ,可以用RoPgadget寻找GadGet

2.ASLR:
(1)解释: 内核、堆栈、动态库的加载地址具有随机性
开启PIE的情况下,主程序的加载基地址也随机
(2)Bypass:

- 爆破

                32位环境,linux libc的加载基址为0Xf7xxx000

-  信息泄露:

                获取GOT表(含大量函数指针)的内容
                获取main函数返回地址

3.Stack Guard
Canaries/Cookies:在栈中的局部变量和返回地址间插入一个难以预测的值(Canary),当函数返回时,将检查Canary是否被破坏
4.StackShield:
将返回地址拷贝到影子栈中,返回时比较栈上的返址与影子栈中的返址
5.SSP
编译时对变量重排序,将函数指针放在低低址,缓冲区放在高地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章