代码编织梦想

栈缓冲区溢出

内存数据分布图

image-20201124162352132
  • Text:包含程序代码
  • Data:包含全局变量,静态变量,该段的大小在编译时计算
  • 堆:存储动态变量,new动作会在堆上分配内存
  • 栈:保存函数参数,局部变量,函数调用时栈空间消耗就会变大。

堆栈内存是运行时实时分配的

CPU通用寄存器

  • EIP:指令指针
  • ESP:栈指针(栈顶)
  • EBP:基指针(栈底)
  • ESI:源变址寄存器
  • EDI:目标变址寄存器
  • EAX:累加寄存器
  • EBX:基地址寄存器
  • ECX:计数寄存器
  • EDX:数据寄存器

与栈溢出有关的寄存器主要是ESP,EBP,EIP。

ESP和EBP都是用于控制当前执行函数栈帧的寄存器。

EBP指向栈帧最高内存地址,ESP指向栈帧最低内存地址。

EIP保存要执行的下一条命令的内存地址。EIP是只读的。

栈帧:栈帧中存放着函数的参数,局部变量,及恢复前一个栈帧所需要的数据。

一旦函数执行完毕,整个栈帧就会被复原,ESP和EBP将重新指向调用方函数的栈帧。

**过程:**比如我们正在运行一个C程序,在程序开始时调用main主函数,并为其分配栈帧。主函数调用另一个函数myfunction,在为myfunction制备栈帧并移交执行权之前,主函数会记下myfunction结束以后的返回地址,并且把返回地址保存在帧上。myfunction执行完毕之后,栈帧就会被复原,EIP寄存器将加载栈所存储的返回地址,然后继续执行main函数的命令。

**原理:**当栈帧中的局部变量占用内存空间越来越大时,栈帧达到最大空间,局部变量的值可能会覆盖栈帧的其余部分,甚至突破栈帧到达更高的内存地址。当局部变量占用内存足够长,就覆盖了返回地址。EIP执行到返回地址时,就会出现找不到地址报错。如果我们能够使该栈帧溢出到返回地址,并且能够修改返回地址,将其替换为另一个程序在内存中的起始地址,我们就能能改变程序原本的正常执行流向,去执行由我们所控制的程序。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_42633229/article/details/110088258

Kali网络渗透测试实验三——XSS和SQL注入-爱代码爱编程

XSS和SQL注入 前言实验目的系统环境:Kali Linux 2、Windows ServerXSS部分:利用Beef劫持被攻击者客户端浏览器实验环境搭建1.利用AWVS扫描留言簿网站,发现其存在XSS漏洞2.Kali使用beef生成恶意代码3.访问http://留言簿网站,将恶意代码写入网站留言板4.管理员登录login.htm,账号密码均为a

解决Kali下使用BurpSuite+Firefox证书错误的问题-爱代码爱编程

解决Kali下使用BurpSuite+Firefox证书错误问题 问题现象解决方案再次验证 问题现象 问题现象如下图所示: Firefox选择:Advanced - Accept the Risk and Continue ,通过BurpSuite查看,无法获取被动扫描信息: 解决方案 Firefox安装:SwitchyOmega 插

外连Kali实现图形界面-爱代码爱编程

外连Kali实现图形界面 更换Kali源安装图形化界面配置xrdp实现远程连接图形界面 大多数情况下,我们一般只会在自己虚拟机上装Kali,当遇到些特殊情况需要将Kali装到某云服务器上,可服务器上只有ssh命令,那如何实现Kali自身的图形界面呢? 更换Kali源 首先我们来换下Kali的源 这里选用2020年中科大的 de

2020最新kali设置root用户(直接设置root用户/单用户模式设置root用户)-爱代码爱编程

2020kali设置root用户 1.kali知道密码时,直接修改kali的root密码1.登录kali时使用普通用户2.打开kali的命令终端,直接输入`sudo passwd root`进行修改3.登出当前普通用户,切换`root`用户2.kali忘记密码时,进入单用户模式直接修改kali的root密码1.开机时进入系统选择按`e`2.在编辑页

2020最新kali新老系统镜像地址-爱代码爱编程

2020最新kali新老系统镜像地址 1.kali新系统镜像地址2.kali老系统镜像地址 1.kali新系统镜像地址 #kali系统下载地址 https://www.kali.org/downloads/ #kali系统镜像下载地址 http://cdimage.kali.org/kali-images/ #kali的虚拟机版本下载地址 h

封神台 kali sqlmap 注入常见问题-爱代码爱编程

sqlmap使用前,测试网页是否存在可注入漏洞: 1.寻找形如“.asp?id=xx”类的带参数的URL。 2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。 3.清空浏览器地址栏,输入“javascript:alert(document.cookie=“id=”+escape(“xx”));”,按Enter

多图详解缓冲区溢出问题-爱代码爱编程

文章目录 1. 蠕虫病毒简介2. 缓冲区溢出3. 缓冲区溢出举例4. 缓冲区溢出的危害5. 内存在计算机中的排布方式6. 计算机中越界访问的后果7. 避免缓冲区溢出的三种方法7.1 栈随机化7.2 检测栈是否被破坏7.3 限制可执行代码区域8. 总结 蠕虫病毒是一种常见的利用Unix系统中的缺点来进行攻击的病毒。缓冲区溢出一个常见的后果是

ByteCTF 2020 pwnandroid-爱代码爱编程

pwndroid 一个安卓端程序,native层是简单的菜单程序,其中edit功能没有检查长度,可以溢出,并且没有使用\0截断字符串,在show的时候可以泄露后续的数据 难点在于如何进行交互,程序注册了JSBridge用于与js进行交互,其中该接口对象在js中的对象名为_jsbridge 该对象有一个call函数 因此,在javascr

ROP链:ret2syscall-爱代码爱编程

安全机制 ASLR(地址随机化) PIE(加强版ASLR) NX(数据段不可执行) ROP 系统调用 stack canary(栈溢出 写入校验值 ) stack smash 内存泄漏 RELRO got表 延迟绑定 plt 汇编代码 把真实地址放入got got 表单 跳转到libc.so 利用方法: 劫持eip,改为system plt任意地址写