【读书笔记】《0day安全》第二章:栈溢出的原理和实践
我本相死而生,无意惹惊鸿
《0day安全》第二章:栈溢出的原理和实践
🔥系列专栏:读书笔记
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月20日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
前言
我们还有更长的路要走,不过没关系,道路就是生活。
————杰克 凯鲁亚克《在路上》
先用几幅图表达一下我的理解
这是一个栈帧的基本结构
我们将足以彻底淹没一个栈帧的字符输入进去
原本的栈帧全红了,并且返回地址无效,因为哪也指向不了,所以程序崩了
现在我们分类型淹没,黑,蓝,绿随便字符,凑数,红色的淹没返回地址,因为返回地址很重要,我们需要它去指向我们的shellcode
在正常情况中,每一个栈帧的返回地址不一定指向正下面的栈帧,可能存在其他调用,会指向其他的未知地方
现在淹没了,返回地址是JMP ESP,他可以百分百的指向shellcode
缓冲区前置知识
缓冲区溢出就是在大缓冲区中的数据向小缓冲区复制的过程中,由于没有注意小缓冲区的边界,“撑爆”了较小的缓冲区,从而冲掉了和小缓冲区相邻内存区域的其他数据而引起的内存问题。
内存的分区
(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指令并执行。
(2)数据区:用于存储全局变量等。
(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。
(4)栈区:用于动态地存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数中继续执行。
指针的分类
1.ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
2.EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
3.EIP:指令寄存器(Extended Instruction Pointer),其内存放着一个指针,该指针永远指向下一条等待执行的指令地址
可以说如果控制了EIP寄存器的内容,就控制了进程——我们让EIP指向哪里,CPU就会去执行哪里的指令(在我的实际操作中,EIP也承担了非常重大的任务,是很花时间的一个点)
(1)局部变量:为函数局部变量开辟的内存空间。
(2)栈帧状态值:保存前栈帧的顶部和底部(实际上只保存前栈帧的底部,前栈帧的顶部可以通过堆栈平衡计算得到),用于在本帧被弹出后恢复出上一个栈帧。
(3)函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置,以便在函数返回时能够恢复到函数被调用前的代码区中继续执行指令。
函数的调用
这是本来没有任何动作的时候,ESP和EBP之间就只是一个正常的栈帧
按照从先入后出的顺序原则放入参数
此时压入返回地址
相当于是复制一个自己的EBP然后压入
此时已经开始了转换(栈顶和当前栈帧底部指针都要去新的栈帧了)
将ESP值装入EBP,更新栈帧底部
同时EBP指针跟上去
ESP按照指令要求走多少个内存空间,此时这一对ESP,EBP之间又形成了新的栈帧
缓冲区溢出具体原理
本质上就是用我们想要的返回地址覆盖原本的返回地址,使得程序不去执行应该执行的部分(例如输入密码阶段),而是去到别的部分(比如登录成功阶段)
修改函数返回地址
更通用、更强大的攻击通过缓冲区溢出改写的目标往往不是某一个变量,而是瞄准栈帧最下方的EBP和函数返回地址等栈帧状态值。(从而可以使用payload进行攻击,让返回地址返回到我所构造的shellcode中)
只要控制好字符串的长度,我们就能用我们想要的代码覆盖本来的代码
相关文章
- 你的云安全吗?——传统安全向云安全的演变
- DACL原理.控制文件的访问权限(文件,注册表.目录.等任何带有安全属性的对象.)
- 10分钟浅谈CSRF突破原理,Web安全的第一防线!
- 打造一款1kb大马并且处理D盾以及安全狗拦截与查杀
- Mac 下配置 SSH 免密码安全登录
- 2017安全之势:云、大数据、IoT、人工智能
- 常见web安全及防护原理
- linux安全
- 揭秘QQ 安全password框的原理
- 《云安全原理与实践》——第1章 1.0云计算基础
- 《云安全原理与实践》——1.2 云计算的基本概念
- 《云安全原理与实践》——3.2 主机虚拟化的主要安全威胁
- 云安全启动公司vArmour从Telstra和Redline Ventures融资4100万美元
- 《云安全原理与实践》——导读
- 戴尔预装软件发现3个漏洞 终端安全解决方案反而出现问题
- 深入认识存储安全的复杂性
- 让IT安全人员夜不能寐的11个数据问题
- 云风险:确保虚拟机上加密密钥管理安全
- 26.WEB安全基础知识二 详解HTTP协议
- Web安全 XXE漏洞的 测试和利用.(读取服务器的任何文件 和 收集服务器的内网信息.)