2018-2019-1 20165306 《信息安全系统设计基础》第三周学习总结

2018-2019-1 20165306《信息安全系统设计基础》第三周学习总结

缓冲区溢出漏洞实验

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

一、实验准备

  • 输入命令安装一些用于32位C程序的软件包

二、实验步骤

1.初始设置

  • Ubuntu和其他一些Linux系统中,使用地址空间随机化来随机堆和栈的初始地址,使得猜测准确地内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。需关闭这一功能。

  • 为了进一步防范缓冲区溢出攻击及其他用shell程序的攻击,许多shell程序在被调用时自动放弃他们的特权。为了重现防护措施被实现之前的情形,使用另一个shell程序(zsh)代替/bin/bash

2.shellcode

  • 一般情况下,缓冲区溢出会造成程序崩溃。在程序中,溢出的数据覆盖了返回地址。而如果覆盖返回地址的数据是另一个地址,那么程序就会跳转到该地址,如果该地址存放的是一段精心设计的代码用于实现其他功能,这段代码就是shellcode。

3.漏洞程序

  • /tmp 目录下新建一个stack.c文件:

  • GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以在编译代码时需要用-fno-stack-protector关闭这种机制。而-z execstack用于允许执行栈。-g参数是为了使编译后得到的可执行文档能用gdb调试。

4.攻击程序

  • /tmp目录下新建一个exploit.c文件:

  • 编译exploit.c 程序

gcc -m32 -o exploit exploit.c

代码调试中的问题和解决过程

  • FILE *badfile 误输成了File *badfile,导致编译失败。

posted @ 2018-10-14 22:41  20165306夏远航  阅读(156)  评论(1编辑  收藏  举报