没有合适的资源?快使用搜索试试~ 我知道了~
二进制漏洞挖掘-栈溢出-开启PIE1
需积分: 0 0 下载量 124 浏览量
2022-08-04
15:40:57
上传
评论
收藏 1.77MB PDF 举报
温馨提示
试读
16页
第二次运行: 第三次运行: 第二步是通过第一步计算得到的程序加载基址计算出 puts 函数对应 puts@plt、got.plt 的 第三步是通过第二步泄露出的
资源详情
资源评论
资源推荐
SP00F|版权属于我个人所有,你可以用于学习,但不可以用于商业目的
二进制漏洞-栈溢出
测试平台
系统:CentOS release 6.10 (Final)、32 位
内核版本:Linux 2.6.32-754.10.1.el6.i686 i686 i386 GNU/Linux
gcc 版本: 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
gdb 版本:GNU gdb (GDB) Red Hat Enterprise Linux (7.2-92.el6)
libc 版本:libc-2.12.so
漏洞原理
在对栈缓冲区进行写操作时(如 memcpy),未对缓冲区大小进行判断,导致写入数据
长度可能大于缓冲区长度。
通用利用方式
写入数据覆盖返回地址,使返回地址指向恶意代码起始地址。由于我是基于本地测试,
也就是 libc 库的版本已知,而基于远程攻击或不同版本的 libc 库可能会存在差异。
SP00F|版权属于我个人所有,你可以用于学习,但不可以用于商业目的
漏洞测试程序
很明显代码在执行 scanf 时未对缓冲区大小进行判断,存在栈溢出漏洞。
注意如无特殊说明,本文的 exp 都是基于该源码编译的二进制实现的。
所有测试均在 linux 环境下进行
开启 PIE
开启 PIE 二进制程序加载的基址也将被随机化。在不开启 PIE 的情况下,可以通过前面描述
的方式来绕过 NX+ASLR 保护。 想让应用程序具备 PIE 功能需要添加编译选项,并需同时
开启系统 ASLR 选项。 编译时通过添加以下选项开启应用程序 PIE 功能:
-fpie[PIE](-fpie 强度为 1,-fPIE 强度为 2 最强) -pie
开启 PIE 后的程序,用 checksec 监测如下:
SP00F|版权属于我个人所有,你可以用于学习,但不可以用于商业目的
漏洞分析
先运行几次看看加了 PIE 选项后程序运行变化,第一次运行:
第二次运行:
第三次运行:
从上面图中可以看到,无论是动态库 libc 的基址还是程序本身基址、栈、vdso 都发生了变
化。开启 ASLR+PIE 后你发现二进制程序基址、got 表、plt 表、bss 段地址都是不确定的
都变成了偏移,之前的攻击方法大部分都失效了。
SP00F|版权属于我个人所有,你可以用于学习,但不可以用于商业目的
从图上可以看到所有引用的地址都变成了偏移(蓝色框起来的地方)。
实现 exp
爆破
爆破原理和方法同绕过 ASLR 方式(略)。
局部覆盖+爆破
应用程序是按页加载到内存中的,一个内存页大小为 0x1000,开启 PIE 后单个内存页并不
会受到影响,这就意味着不管基址怎么变,某一个内存页中的某一条指令的后三位十六进制
数(低 12 位)的地址是始终不变的。因此我们可以通过覆盖地址的后几位来实现控制程序
剩余15页未读,继续阅读
萌新小白爱学习
- 粉丝: 16
- 资源: 311
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 主站开发文档,记录一下
- Linux系统的进程管理与监控技术介绍
- 如何使用SSH在远程Linux服务器上进行安全连接和文件传输
- 安卓期末大作业基于Android studio的推箱子小游戏项目源码(高分项目).zip
- 学生成绩管理系统,纯粹使用MVC模式设计,代码更为简单,页面不太好看。 仅仅作为学习参考,懒得更新了
- Digital-image-processing-system-main.zip
- 自动驾驶规划控制常用算法c++代码实现
- 旅行商问题旅行商问题旅行商问题旅行商问题旅行商问题.txt
- vuevuevuevuevuevuevuevuevuevuevuevuevuevuevuevue.txt
- c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0