二进制漏洞与利用学习

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

  • 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
编译时对变量重排序,将函数指针放在低低址,缓冲区放在高地址

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值