博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018-2019-1 20165320 《信息安全系统设计基础》 缓冲区溢出漏洞实验
阅读量:6227 次
发布时间:2019-06-21

本文共 1076 字,大约阅读时间需要 3 分钟。

  • 一、缓冲区溢出简介:

缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。


  • 二、实验具体步骤


    1、准备工作

    在实验楼64位的Linux环境下安装能用于编译32位C语言程序的包

    1296864-20181014130521073-1190673879.png



    2、关闭Linux系统的相关地址防护系统

    Ubuntu和其他一些Linux系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,让我们很难猜到地址。

    sudo sysctl -w kernel.randomize_va_space=0

    许多shell程序在被调用的时候会自动放弃特权,所以很难保持一个root权限。实验过程中这一步骤不能完全理解过程,所以就暂且放着。

    然后进入Linux32位的环境。

    1296864-20181014130539255-1807210365.png



    3、编译漏洞程序

    进入/tmp 目录新建一个stack文件,编译并设置SET-UID

    SET-UID 给了一个普通用户能临时使用超级用户权限的途径。

    GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用 –fno-stack-protector 关闭这种机制。 而 -z execstack 用于允许执行栈。

    1296864-20181014130551420-1151370380.png

    1296864-20181014130604859-795998902.png



    4、编译攻击程序

    在 /tmp 目录下新建一个 exploit.c 文件,为了节省时间,实验楼直接给了我们一个代码文件的链接。

    wget http://labfile.oss.aliyuncs.com/courses/231/exploit.c

    1296864-20181014130750539-603434661.png



    5、修改内存地址,进行覆盖

    exploit.c文件中,\x??\x??\x??\x?? 处需要添上 shellcode 保存在内存中的地址,这里发生溢出后刚好能够覆盖返回地址。strcpy(buffer+100,shellcode); 这一句又告诉我们,shellcode 保存在 buffer + 100 的位置。所以我们通过gdb调试获得shellcode的地址。修改了exploit.c文件,进行编译。

    1296864-20181014130810701-36443429.png

    1296864-20181014130818306-769828324.png

    1296864-20181014130830781-1875596913.png



    6、运行程序

    1296864-20181014130842024-161359735.png

    修改了地址保护机制后,运行不成功,显示段错误。

    1296864-20181014130908392-2018871482.png


  • 实验收获

    感觉按照实验步骤一步一步来,确实能够得到相应的结果,但是整个实验也就是一个走了一个过程,还是没有弄懂相关内存溢出的具体流程,以及相关攻击的思路,自己的水平还是不达标,还有一段很长的路要走,有关老师上课提到的栈帧的知识点还需要弄懂。

转载于:https://www.cnblogs.com/Gst-Paul/p/9786053.html

你可能感兴趣的文章
GB(一)
查看>>
Gitter:高颜值GitHub小程序客户端诞生记
查看>>
Swift 烧脑体操(二) - 函数的参数
查看>>
V8十年故事:从农场诞生的星球最强JS引擎
查看>>
微服务网关Kong 1.0正式发布!提供100+项功能
查看>>
《The Startup Way》作者访谈
查看>>
慎用!BLEU评价NLP文本输出质量存在严重问题
查看>>
大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken
查看>>
阿里巴巴陈武:通过亿级用户App的实践验证,锤炼高质量APM体系
查看>>
高效运维最佳实践:如何做好On-call和事故响应?
查看>>
矩阵:如何使用矩阵操作进行 PageRank 计算?
查看>>
C# 8的新提案:new关键字类型推断
查看>>
方面和服务,差别大吗?
查看>>
Rust 和Erlang的对比
查看>>
C# 8中的默认接口方法
查看>>
微信小程序wx:for和wx:for-item的正确用法
查看>>
iOS开源项目周报1222
查看>>
个推开发者服务进阶之路
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
Facebook开源分布式日志存储系统LogDevice
查看>>