【无标题】

从零开始的学pwn之旅

栈的结构

栈是一种典型的后进先出的数据结构,其操作主要有压栈(push)与出栈(pop)两种操作,esp称之为栈顶,ebp称之为栈底,esp与ebp之间称之为栈。程序的栈是从进程地址的高地址向低地址增长的。

32位和64位

区别:

32位是直接放在栈上,64位是放在计算机上。前六个整型或指针参数依次保存在rdi,rsi,rdx,rcx,r8,r9寄存器中。

栈溢出

定义:

栈溢出是指程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数。溢出的数据会覆盖栈中其它数据。

利用:

栈溢出漏洞原理:缓冲区溢出分为栈溢出和堆溢出。栈溢出是由于在栈的空间内,放入大于栈空间的数据,导致栈空间以外有用的内存单元被改写,这种现象就称为栈溢出。

CANNARY: 是对栈的保护的一种方式,如果开启cannary,函数调用的时会先往栈里插入一个cookie值,函数返回上一层的时候会验证cookie值是否准确,如果不不准确就立刻停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie值改掉,这样将导致栈保护检查失败阻止shellcode的执行。在Linux中将cookie值称为canary。但这种保护也不是绝对安全的,攻击者可以利用程序中的函数,获得存在内存中的cookie值。这大概就是奔奔学长讲的金丝雀嘛。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值